Linuxのsyslog入門

概要
1. システムログとは
2. ログの検査
3. 主なシステムログファイルの種類
4. ログファイルのローテーション
5. ログの出力

1. システムログとは
システムログとは、デーモンなどが出力するシステムの動作記録のことを言います。
ログにはデーモンが処理した内容や、ユーザーが操作した内容などが記録されています。
システムに不具合が生じた場合や、セキュリティ障害などが起こった場合には、その原因究明と解決にログが重要な役割を果たします。

2. ログの検査

ログを調べることにより、システムの利用状況や異常がないかを確認することができます。
Linuxシステムの主なログファイルは/var/log以下に出力されます。

$ cd /var/log
$ ls -al
total 540
drwxr-xr-x.  3 root root   4096 Oct 11 14:35 .
drwxr-xr-x. 18 root root   4096 Jan 16  2014 ..
drwxr-x---.  2 root root   4096 Sep  5 14:06 audit
-rw-r--r--   1 root root   1467 Oct 11 14:35 boot.log
-rw-------.  1 root utmp      0 Jan 16  2014 btmp
-rw-------   1 root root   2626 Oct 11 18:01 cron
-rw-r--r--   1 root root  18121 Oct 11 14:35 dmesg
-rw-r--r--   1 root root  18037 Sep  5 14:06 dmesg.old
-rw-r--r--.  1 root root 359527 Jan 16  2014 dracut.log
-rw-r--r--.  1 root root 146292 Oct 11 18:12 lastlog
-rw-------.  1 root root    582 Oct 11 14:35 maillog
-rw-------.  1 root root  84023 Oct 11 14:35 messages
-rw-------.  1 root root   7449 Oct 11 18:21 secure
-rw-------.  1 root root      0 Jan 16  2014 spooler
-rw-------.  1 root root      0 Jan 16  2014 tallylog
-rw-rw-r--.  1 root utmp  11904 Oct 11 18:12 wtmp
-rw-------.  1 root root    153 Sep  5 14:07 yum.log

3. 主なシステムログファイルの種類

/var/log以下には次のログが記録されています。

ログファイル 説明
/var/log/boot.log システム起動時のログ
/var/log/mail.log メールシステムのログ
/var/log/cron cronのログ
/var/log/secure 認証関連のログ
/var/log/dmesg システム起動時のdmesgの内容
/var/log/lastlog 最終ログイン情報の記録
/var/log/wtmp ログイン情報の記録
/var/log/anaconda.* インストーラのログ
/var/log/messages 上記に含まれないログ

*/var/log/wtmp、/var/log/lastlogはバイナリ形式のファイルです

• ログの表示
トラブル時に、ログをリアルタイムで監視したい場合は、tailコマンドにfオプションを付けることで
ログファイルにログが追加されるたびに逐次監視することができます。

作業環境
OS: Windows7 Home Premium 64bit
VirtualBox: 5.0.2
Vagrant: 1.7.4
CentOS: 6.5

$ sudo tail -f /var/log/messages
Oct 11 14:35:24 centos01 kernel: device-mapper: ioctl: 4.24.6-ioctl (2013-01-15) initialised: dm-devel@redhat.com
Oct 11 14:35:24 centos01 kernel: Adding 1254392k swap on /dev/sdb1.  Priority:-1 extents:1 across:1254392k
Oct 11 14:35:24 centos01 kernel: NET: Registered protocol family 10
Oct 11 14:35:24 centos01 kernel: lo: Disabled Privacy Extensions
Oct 11 14:35:25 centos01 rpc.statd[877]: Version 1.2.3 starting
Oct 11 14:35:25 centos01 sm-notify[878]: Version 1.2.3 starting
Oct 11 14:35:25 centos01 kernel: RPC: Registered named UNIX socket transport module.
Oct 11 14:35:25 centos01 kernel: RPC: Registered udp transport module.
Oct 11 14:35:25 centos01 kernel: RPC: Registered tcp transport module.
Oct 11 14:35:25 centos01 kernel: RPC: Registered tcp NFSv4.1 backchannel transport module.

ログファイルのサイズが大きい場合には、grepコマンドで特定のキーワードをフィルタした方が良いです。

$ cd /var/log
$ sudo grep version messages
Sep  5 14:07:41 vagrant-centos65 kernel: nf_conntrack version 0.5.0 (3923 buckets, 15692 max)
Oct 11 14:35:24 centos01 kernel: Linux version 2.6.32-431.3.1.el6.x86_64 (mockbuild@c6b10.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Jan 3 21:39:27 UTC 2014
Oct 11 14:35:24 centos01 kernel: SMBIOS version 2.5 @ 0xFFF60
Oct 11 14:35:24 centos01 kernel: regulator: core version 0.5
Oct 11 14:35:24 centos01 kernel: Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
Oct 11 14:35:24 centos01 kernel: pci_hotplug: PCI Hot Plug PCI Core version: 0.5
Oct 11 14:35:24 centos01 kernel: pciehp: PCI Express Hot Plug Controller Driver version: 0.4
Oct 11 14:35:24 centos01 kernel: acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
Oct 11 14:35:24 centos01 kernel: ipmi message handler version 39.2 

grepの使い方は以下の記事が参考になると思います
grepコマンドで覚えておきたい使い方14個(+3個) | 俺的備忘録 〜なんかいろいろ〜

4. ログファイルのローテーション
ログファイルは放置しておくと肥大化するため、古くなったログを切り分けて保存することでログファイルの肥大化を防ぐ仕組みが準備されています。
この古くなったログを切り分けて世代管理することを「ローテーション」といいます。

ログのローテーションは、/etc/logrotated.confで設定できます。

$ cat /etc/logrotate.conf | grep -v "#\|^$"
weekly
rotate 4
create
dateext
include /etc/logrotate.d
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

5. ログの出力
Linuxのログは、主にsyslogという仕組みを使ってログを収集、出力を行っています。
CentOS6以降では、rsyslogというデーモンを使用しています
rsyslogの特徴としては、以下の通りです。

  • TCPによるログのネットワーク転送 *syslogはUDP
  • 設定ファイルがsyslog互換
  • TLS/SSLによる暗号化
  • MySQLPostgreSQLへのログの保存
  • ログのフィルタリング
  • ロギング以外にも様々な通知方法(メール、SNMPTrap)

• rsyslogを構成するファイル
rsyslogは次のファイルで構成されています。

/etc/rsyslog.conf 共通設定ファイル
/etc/rsyslog.d/* 個別設定ファイル
/lib64/rsyslog/*.so rsyslogで使用できるモジュール。モジュールを追加することでrsyslogの機能を追加できる

• rsyslogの設定
rsyslogの設定は、/etc/rsyslog.confで行います。

# rsyslog v5 configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514


#### GLOBAL DIRECTIVES ####

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

*一部のみ抜粋

• syslogのファシリティとプライオリティ
syslogはログの分類と重要度が定義されています。

  • ファシリティ(facility)...ログの分類
  • プライオリティ(priority)...ログの重要度
ファシリティ 説明
auth 認証サービスのメッセージ
authpriv 認証サービス
cron cronのメッセージ
daemon デーモンのメッセージ
kern カーネルのメッセージ
lpr プリンタサービスのメッセージ
mail メールサービスのメッセージ
news ニュースサービスのメッセージ
syslog syslogのメッセージ
user ユーザープロセスのメッセージ
uucp uucp転送を行うプログラムのメッセージ
local0~7 任意に使用できるファシリティ

*local0~7は任意のプログラムで使用するファシリティと定義されている

プライオリティ 説明
debug デバッグ情報
info 情報
notice 通知
warn 警告
err 一般的なエラー
crit 致命的なエラー
alert 緊急に対処すべきエラー
emerg 緊急事態

*下にいくほど重要度が高い

プライオリティinfoを指定した場合、重要度がinfo以上のログが出力されます。

• rsyslogのログ出力設定

[フォーマット]
<ファシリティ>.<プライオリティ> <アクション>

例. authpriv.* /var/log/secure
→ authprivファシリティの全てのログを/var/log/secureに出力する

• ファシリティ、プライオリティの表現

表現 意味
mail.* mailファシリティのログすべて
*.info すべてのファシリティのinfoレベル以上のログ
mail.=info mailファシリティのinfoレベルのみのログ
mail.!=info mailファシリティでinfoレベル以外のログ
mail.info;mail.!err mailファシリティでinfoからwarningレベルのログ
*.info;mail.none mailファシリティ以外のinfoレベル以上のログ

• アクション

表現 意味
/var/log/messages /var/log/messagesに出力する
~/var/log/messages /var/log/messagesに出力する。ただし非同期で書き込みをする
~ ログを出力しない
@192.168.1.1 192.168.1.1のsyslogサーバーへ送信する
@@192.168.1.1 TCPで192.168.1.1のsyslogサーバーへ送信する
すべてのユーザーに通知する
パイプ<プログラム or スクリプト> パイプを使ってログを処理する

• syslogにログを出力する

loggerコマンドを使って、任意のファシリティ、プライオリティに対して任意のメッセージを出力することができます。

$ sudo logger -t test -p local0.info 'syslog messages'

tオプション: タグを付与する
pオプション: ファシリティとプライオリティを定義する

上記にコマンドを実行すると、local0ファシリティのプライオリティinfoに"syslog messages"が出力されます。

以上になります。

参考:
syslogを押さえよう! | Think IT(シンクイット)
rsyslogの導入 - Programming-Knowleodge.com