dshimizu/blog/alpha

とりとめのないITブログ

rsyslogのプライオリティ情報の出力設定について調べた時の備忘録

はじめに

rsyslogを利用して出力されるログで、例えば /var/log/messages で warn や err などのプライオリティ文字列の出力があった場合に、キーワード監視でのアラート設定をしたいと思いましたが、デフォルトの設定ではプライオリティの情報が出力されないことがわかりました。 

デフォルトだと以下のような出力となっています。

Sep 10 00:10:03 ip-172-26-1-161 rsyslogd: [origin software="rsyslogd" swVersion="xxxx" x-pid="550" x-info="https://www.rsyslog.com"] rsyslogd was HUPed

それを以下のように [info] といったプライオリティの情報が出力されるようにしたい、といったことがやりたいこととなります。

Sep 10 00:10:03 ip-172-26-1-161 rsyslogd [info]: [origin software="rsyslogd" swVersion="xxxx" x-pid="550" x-info="https://www.rsyslog.com"] rsyslogd was HUPed

そのため、プライオリティ情報を出力させるための設定について調べたことをメモします。

rsyslog.confのフォーマット

まず、 rsyslog.conf の書式は以下のような形のようでした。 バージョンによっては /etc/rsyslog.d/ 以下に設定ファイルを配置することもできると思います。

  selector    action  
  • selector・・・出力するログの内容の指定
  • action・・・ログの出力先の指定

具体的な設定ファイル上の記述だと以下のようになり、 *.info;mail.none;authpriv.none;cron.none が selector, /var/log/messages が action になります。

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

selector

selectorは出力するログの内容を指定するもので、「facility」と「priority」を.で接続したものになります。特定のactionに対して複数のselectorを指定したい場合は、;で接続します。

例えば、/var/log/messagesへ出力されるログのselectorは以下のようになっています。*.infoでinfoレベル以上のログは全て出力し、あとに続くmail.none;authpriv.none;cron.noneで、メール、認証サービス、cron関連のログは除くような指定がされています。

  *.info;mail.none;authpriv.none;cron.none  

facility

facilityはログの種類を示します。あらかじめ定義されているものと独自に利用できるものがあります。

facility 対象のログ
auth(security) 認証サービスのメッセージ(現在はauthprivが推奨されている)
authpriv 認証サービス(カテゴリはauthと同じ。authとは出力結果が異なる)
cron cronのメッセージ
daemon デーモンのメッセージ
kern カーネルのメッセージ
lpr プリンタサービスのメッセージ
mail メールサービスのメッセージ
news ニュースサービスのメッセージ
syslog syslogのメッセージ
user ユーザープロセスのメッセージ
uucp uucp転送を行うプログラムのメッセージ
local0~7 独自に利用できるファシリティ
priority

priorityはログのレベルの重要度を設定します。通常は指定したpriority以上のログが出力されます。例えば、errを指定すればcritalertemergのログも出力されます。

>

priority 内容
debug デバッグ情報
info 情報
notice 通知
warn 警告
err 一般的なエラー
crit 致命的なエラー
alert 緊急に対処すべきエラー
emerg システムが落ちるような状態

action

actionには、selectorで指定したメッセージをどこに出力するかを設定します。

  • 指定したファイルのパスに出力する
  • |(パイプ)でほかのプログラムに渡す
  • @ホスト名で指定したホストに転送する
  • ユーザーのコンソール(/dev/condole)に出力
  • 指定したユーザに通知

テンプレートやマクロでのログ出力内容のカスタマイズ

rsyslogで出力されるログをカスタマイズするにはテンプレートという機能を使用します。$templateという記述で定義します。その際、マクロという定義を使って出力する内容を指定できます。マクロは%マクロ名%のように、前後に「%」を付けて使用します。

ファシリティ 用途
msg ログメッセージ
hostname ログを出力したホストの名前
fromhost ログを受け取ったホストの名前
programname プログラム名
syslogfacility ファシリティ(数字)
syslogfacility-text ファシリティ(テキスト)
syslogseverity プライオリティ(数字)
syslogseverity-text プライオリティ(テキスト)
syslogpriority syslogseverityと同等
syslogpriority-text syslogseverity-textと同等
timegenerated ログを受け取った日時
timereported ログが出力された日時
timestamp timereportedと同等
$now 現在時刻(書式:YYYY-MM-DD)
$year 現在の年(4けた)
$month 現在の月(2けた)
$day 現在の日(2けた)
$hour 現在の時(24時間表記、2けた)
$minute 現在の分(2けた)

 

/var/log/messagesにファシリティのプライオリティの情報を出力する場合は、/etc/rsyslog.confへ以下のような指定をします。

  # 既存/var/log/messagesへのログ出力設定をコメントアウト #*.info;mail.none;authpriv.none;cron.none                /var/log/messages
# 新規に設定を追加
$template mytemplate,"%timegenerated% %hostname% %programname% %syslogpriority-text% %msg%\n" *.info;mail.none;authpriv.none;cron.none                /var/log/messages;mytemplate  

設定をおこなったあとは rsyslog を再起動します。

  # service rsyslog restart  

messages ログを見ると、 [info] とプライオリティ情報が出力されるようになりました。

Feb 15 02:19:51 ip-172-26-1-161 systemd [info]  Stopping rsyslog.service - System Logging Service...
:

おわりに

rsyslog の設定についてわかっていない部分があったので、調べたことをまとめて記載しました。

参考