Powered by SmartDoc

syslog

syslogとは

syslogとはプログラム、サービスあるいはカーネルからの情報、警告、エラーなどのメッセージを受信し、ファイル化する仕組みでプログラムやサービス、カーネルの動作を監視し不具合の発見やその対処のために使用する。syslogのプロトコルはRFCに記されている。

syslogはLinuxをインストールすると自動的に利用できるように設定されており、syslogdとklogdの2つのデーモンを使用する。

syslogの設定ファイルは/etc/syslog.confである。その内容リスト3.1.1[syslog.conf]に示す。

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ファイルにはどのサービスやプログラムから送信されるどんなメッセージをどのファイルに記録するかが記されている。syslog.confの設定はメッセージの送信元の分類をファシリティ、メッセージの重要性をプライオリティ、その記録先をアクションという。ファシリティとプライオリティを合わせてセレクタという。

syslog.confの設定
ファシリティ.プライオリティ  アクション
      ↓           ↓
authpriv.*                 /var/log/secure

ファシリティとプライオリティを表3.2.1[ファシリティ]表3.2.2[プライオリティ]に示す。プライオリティは下に行くほど重要度が高くなる、

ファシリティ
ファシリティ 意味
auth 認証メッセージ
authpriv 認証メッセージ
cron cronメッセージ
daemon デーモンメッセージ
kern カーネルメッセージ
lpr プリンタメッセージ
mail メールメッセージ
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])で設定できる。

/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の動作はsyslog.confで設定した状況にならなければ確認できない。そこでsyslogの機能をテストするコマンドloggerを使う。使用例を図3.5.1[loggerコマンドの使用例]に示す。

loggerコマンドの使用例
# logger -p daemon.warn "This is only a test."

全ての状況をテストするスクリプトをリスト3.5.1[loggerコマンドを使ったテストスクリプト]に示す。

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

演習

  1. syslogの設定やログファイルの内容を確認しなさい。
  2. loggerコマンドを使ったスクリプトを入力し、各ログファイルにメッセージが出力されるかを確認しなさい。