Linuxでのログ収集について

Linuxの、カーネルやデーモンのメッセージなど、システムのほとんどのログを記録しているファイルとして/var/log/messagesが有名ですが、
Linuxの主なディストリビューションに標準で実装されているログ収集の仕組みとしては、rsyslogsystemd journalが代表的です。

rsyslogとは?

Linuxでログを取集するソフトウェアで、syslogメッセージをテキストデータで受け取る。Syslogプロトコルをベースにして、TCPの利用、マルチスレッド対応、セキュリティの強化、各種データベースへの対応などの特徴を兼ね備えている。

systemd jounalとは?

systemdが提供する機能の一つで、システムログをバイナリデータで受け取る。systemdのシステムではsystemd journalのデーモンのsystemd-journaldが行う。ログは不揮発性ストレージ(/var/log/journal/machine-id/.journal)か、揮発性ストレージ(/run/log/journal/machine-id/.journal)に格納する。
systemdでは、揮発性ストレージとして利用される/runはtmpfsがマウントされている。tmpfsはカーネルの内部メモリキャッシュ領域に作成され、時にスワップ領域も使用される。揮発性ストレージか不揮発性ストレージのどちらかに格納するかはjournald.confのパラメータStrageにより指定する。
Syslogプロトコル互換のインターフェース(/dev/log,/run/systemd/journal/syslog)があり、収集したシステムログを他のSyslogデーモンに転送して格納する設定にもできる。

rsyslogの設定

カーネルやサーバーから送られてくるメッセージを/etc/rsyslog.confおよび/etc/rsyslog.dディレクトリ以下のファイルで指定した出力先に出力する。このrsyslog.confのファイルで、/var/log/messagesに何を出力するかも決められます。rsyslog.confの書式の説明については割愛します。

システムログに関するコマンド

journalctlコマンドで、systemd-journaldが収集したログ情報を閲覧できる。オプションの説明については割愛。
また、systemd-catコマンドで、引数に指定したコマンドをsystemd-journalに送ることができる。
また、loggerコマンドで、任意のファシリティとプライオリティを指定してログメッセージをSyslogデーモンに送る事ができる。

ログファイルのローテーション

ログファイルは放置しておくと肥大化するので、ローテーション機能を使って肥大化を防ぐ。ログファイルのローテーション機能はlogrotateユーティリティが提供していて、cronで定期的に実行される。logrotateは、logrotateコマンドや、/etc/logrotate.confファイルで行う。

参考文献

LPICレベル1 スピードマスター問題集