syslogとはプログラム、サービスあるいはカーネルからの情報、警告、エラーなどのメッセージを受信し、ファイル化する仕組みでプログラムやサービス、カーネルの動作を監視し不具合の発見やその対処のために使用する。syslogのプロトコルはRFCに記されている。
syslogはLinuxをインストールすると自動的に利用できるように設定されており、syslogdとklogdの2つのデーモンを使用する。
syslogの設定ファイルは/etc/syslog.confである。その内容リスト3.1.1[syslog.conf]に示す。
1: # Log all kernel messages to the console. 2: # Logging much else clutters up the screen. 3: #kern.* /dev/console 4: 5: # Log anything (except mail) of level info or higher. 6: # Don't log private authentication messages! 7: *.info;mail.none;authpriv.none;cron.none /var/log/messages 8: 9: # The authpriv file has restricted access. 10: authpriv.* /var/log/secure 11: 12: # Log all the mail messages in one place. 13: mail.* -/var/log/maillog 14: 15: 16: # Log cron stuff 17: cron.* /var/log/cron 18: 19: # Everybody gets emergency messages 20: *.emerg * 21: 22: # Save news errors of level crit and higher in a special file. 23: uucp,news.crit /var/log/spooler 24: 25: # Save boot messages also to boot.log 26: local7.* /var/log/boot.log
syslogのメッセージは一般的にsyslog.confで指定されたディレクトリ/var/log内のファイルに記録される。
syslog.confファイルにはどのサービスやプログラムから送信されるどんなメッセージをどのファイルに記録するかが記されている。syslog.confの設定はメッセージの送信元の分類をファシリティ、メッセージの重要性をプライオリティ、その記録先をアクションという。ファシリティとプライオリティを合わせてセレクタという。
ファシリティ.プライオリティ アクション ↓ ↓ authpriv.* /var/log/secure
ファシリティとプライオリティを表3.2.1[ファシリティ]と表3.2.2[プライオリティ]に示す。プライオリティは下に行くほど重要度が高くなる、
ファシリティ | 意味 |
---|---|
auth | 認証メッセージ |
authpriv | 認証メッセージ |
cron | cronメッセージ |
daemon | デーモンメッセージ |
kern | カーネルメッセージ |
lpr | プリンタメッセージ |
メールメッセージ | |
news | ニュースメッセージ |
syslog | syslogメッセージ |
user | ユーザメッセージ |
uucp | uucpメッセージ |
local0からlocal7 | 任意のメッセージ |
プライオリティ | 意味 |
---|---|
debug | デバッグ |
info | 情報 |
notice | 通知 |
warning | 警告 |
err | エラー |
crit | 危機的 |
alert | 警戒(すぐに修正すべき問題) |
emerg | 非常事態(システムが使用不能) |
ログファイルが肥大化しないようにファイルへの記録期間やログのバックアップの保存期間を/etc/logrotate.conf(リスト3.3.1[/etc/logrotate.conf])で設定できる。
1: # see "man logrotate" for details 2: # rotate log files weekly 3: weekly 4: 5: # keep 4 weeks worth of backlogs 6: rotate 4 7: 8: # create new (empty) log files after rotating old ones 9: create 10: 11: # uncomment this if you want your log files compressed 12: #compress 13: 14: # RPM packages drop log rotation information into this directory 15: include /etc/logrotate.d 16: 17: # no packages own wtmp -- we'll rotate them here 18: /var/log/wtmp { 19: monthly 20: create 0664 root utmp 21: rotate 1 22: } 23: 24: # system-specific logs may be also be configured here.
この例では週単位でログファイルを変更し、4世代分をバックアップしている。記録期間はdaily、weekly、monthlyのいずれかを指定する。
ログファイルは単純なテキストファイルなのでcat、less、head、tailコマンドなどで簡単に表示できる。tailコマンドを使えば、最新のログを表示でき、さらにfオプションを指定すればログファイルへの書き込みを常に監視できる。
# tail /var/log/messages
# tail -f /var/log/messages
syslogの動作はsyslog.confで設定した状況にならなければ確認できない。そこでsyslogの機能をテストするコマンドloggerを使う。使用例を図3.5.1[loggerコマンドの使用例]に示す。
# logger -p daemon.warn "This is only a test."
全ての状況をテストするスクリプトをリスト3.5.1[loggerコマンドを使ったテストスクリプト]に示す。
#!/bin/bash for i in \ {auth,authpriv,cron,daemon,kern,lpr,mail,mark,news,syslog,user,uucp, local0,local1,local2,local3,local4,local5,local6,local7} do for k in {debug,info,notice,warning,err,crit,alert,emerg} do logger -p $i.$k "Test daemon message, facility $i priority $k" done done