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による暗号化
- MySQL、PostgreSQLへのログの保存
- ログのフィルタリング
- ロギング以外にも様々な通知方法(メール、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 | プリンタサービスのメッセージ |
メールサービスのメッセージ | |
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