syslogのイロハのイぐらい

syslogdに関する定義ファイルは"/etc/syslog.conf"。syslog.confは、取得するログの種類(selector)と、ログの出力先(action)を1行に記述するかたちで定義を行う。

selector        action

selectorはログの分類(facility)と重要度(priority)の2つの要素から構成されており、.(ピリオド)で要素を結びつけて1つのselectorとして扱う。

facility.priority        action

selectorとactionとの結びつけは1行に1つが基本であるが、同じアクションに紐付けるselectorを1行で複数定義することもできる。その場合は、"selector"を;(セミコロン)を用いて連結する。

selector;selector        action

同様に、facilityを複数1行の中で設定することも可能で、その場合は,(コロン)を用いて連結する。

kern,mai.info

facilityとして使用できる分類は以下のとおり。

facility 内容
authpriv 認証サービス(authもあるが、authprivが推奨される)
cron cronメッセージ
daemon daemonメッセージ
kern kernelメッセージ
lpr printer serviceメッセージ
mail mail serviceメッセージ
news news serviceメッセージ
syslog syslogメッセージ
user ユーザプロセスメッセージ
uucp uucp転送プログラムメッセージ
local0-7 アプリケーション定義に基づいて使用する

priorityとして使用できる分類は以下のとおり。

priority 内容
debug デバッグ情報
info 情報
notice 通知
warn 警告通知
err 一般エラー
crit 致命的エラー
alert 緊急に対処が必要
emerg システム緊急
  • priorityの設定においては、指定したpriority以上のレベルすべてが含まれる。たとえば、warnを選択した場合、warnレベルだけではなく、warn,err,crit,alert,emergレベルのログがすべて出力される。
  • 逆に特定のレベル以下のみのログを出力したい場合は、!(エクスクラメーションマーク)をつける。
kern.*;kern.!err
    • この場合、kernelメッセージのうち、debug,info,notice,warnレベルのログが出力される。
  • 特定のレベルのpriorityのみ出力することも可能。その場合は=(イコール)を使用する。
mail.=info
    • この場合、mail serviceメッセージのうち、infoレベルのログだけが出力される。
  • 特定のレベルのpriorityのみを除外することも可能。その場合はnoneを使用する。
kern.none

=や!、;、noneは組み合わせて使用することが可能であり、facilityとpriorityの両方に対して使用することができる。たとえば、下記のようにselectorを記述すれば、local7のログでpriorityがinfo以外のメッセージを出力させることができる。

local7.*;local7.!=info

出力を設定するactionの側でも、様々な方法での出力に対応することができる。

  • ファイルパスを指定する
  • 出力をパイプする(コマンドを実行する場合と同様に"|"を使用してsyslog.confに記載する)
  • コンソールに出力する
    • これはファイルへの出力の1種ともいえるが、/dev/consoleに出力することにより可能
  • リモートホストへ送信する
    • syslog転送を行う場合、受信側のsyslogdにも設定が必要(-rオプションの設定)
    • syslog転送には514/udpを使用するため、ポートが開放されている必要がある
  • 特定のユーザに通知する
    • 出力先としてユーザを指定することにより、指定したユーザへの通知を行うことができる
  • オンラインのすべてのユーザに通知する
    • "*"に対して出力することにより、オンラインのすべてのユーザに対して通知を行うことができる