はじめに
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 | プリンタサービスのメッセージ |
メールサービスのメッセージ | |
news | ニュースサービスのメッセージ |
syslog | syslogのメッセージ |
user | ユーザープロセスのメッセージ |
uucp | uucp転送を行うプログラムのメッセージ |
local0~7 | 独自に利用できるファシリティ |
priority
priorityはログのレベルの重要度を設定します。通常は指定したpriority以上のログが出力されます。例えば、err
を指定すればcrit
、alert
、emerg
のログも出力されます。
>
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 の設定についてわかっていない部分があったので、調べたことをまとめて記載しました。