👻

Linuxログ管理

2021/05/06に公開

rsyslogとは

稼働しているアプリケーションやプログラムのログを、効率的に収集しログファイルやコンソールに出力するログ管理システム

rsyslogの設定ファイル

rsyslogのログは「/etc/rsyslog.conf」と「/etc/rsyslog.d/」で設定される。

ファシリティ

ファシリティはカーネルや、実行中のプロセスなどメッセージの生成元を表す。

ファシリティ 説明
auth,authpriv 認証システムによる出力
cron cronによる出力
daemon 各種デーモンによる出力
kern カーネルによる出力
ipr 印刷システムによる出力
mail メールサービス関連による出力
user ユーザーアプリケーションによる出力
local0~local7 ローカルシステムの設定

プライオリティ

プライオリティはログメッセージの重要度を表す。

プライオリティ 説明
emerg 緊急事態
alert 早急に対処が必要な事態
cirt システムの処理は継続できるものの深刻な事態
err 一般的なエラー
warning 一般的な警告
notice 一般的な通知
info 一般的な情報
debug デバッグ情報
none ログを記録しない
* 全てのプライオリティ

出力先

メッセージの出力先を、ログファイルや、端末、他のホストなどを選択できる部分をアクションフィールドと言う。

アクションフィールド 説明
/dev/console コンソールに出力
/var/log/messages /var/log/messagesに出力
/var/log/secure /var/log/secureに出力
-/var/log/maillog /var/log/maillogに出力
/var/log/cron /var/log/cronに出力
/var/log/spooler /var/log/spoolerに出力
/var/log/boot.log /var/log/boot.logに出力

loggerコマンド

loggerコマンドを使用すると、ログメッセージを生成することが可能。

# loggerコマンドの実行
[root@ip-172-31-40-215 ec2-user]# logger -p syslog.info -t test "test logger messeage"
# loggerコマンドで生成したメッセージの確認
[root@ip-172-31-40-215 ec2-user]# tail /var/log/messages
May  5 08:35:34 ip-172-31-40-215 systemd: Unit testscrpit.service entered failed state.
May  5 08:35:34 ip-172-31-40-215 systemd: testscrpit.service failed.
May  5 08:35:55 ip-172-31-40-215 dhclient[2850]: XMT: Solicit on eth0, interval 109870ms.
May  5 08:36:22 ip-172-31-40-215 systemd: Created slice User Slice of ec2-user.
May  5 08:36:22 ip-172-31-40-215 systemd: Starting User Slice of ec2-user.
May  5 08:36:22 ip-172-31-40-215 systemd-logind: New session 1 of user ec2-user.
May  5 08:36:22 ip-172-31-40-215 systemd: Started Session 1 of user ec2-user.
May  5 08:36:22 ip-172-31-40-215 systemd: Starting Session 1 of user ec2-user.
May  5 08:36:50 ip-172-31-40-215 su: (to root) ec2-user on pts/0
May  5 08:37:28 ip-172-31-40-215 test: test logger messeage
[root@ip-172-31-40-215 ec2-user]# 

loggerコマンドのオプション

引数 説明
-i 各行にloggerプロセスのプロセスIDを記録
-p ファシリティ.プライオリティ
-t タグを指定

systemd-catコマンド

systemd-catコマンドは手動でコマンドの実行結果をジャーナルファイルに書き込むことが可能。

[root@ip-172-31-40-215 ec2-user]# systemd-cat df -h
[root@ip-172-31-40-215 ec2-user]# tail /var/log/messages
May  5 08:40:01 ip-172-31-40-215 systemd: Stopping User Slice of root.
May  5 08:41:42 ip-172-31-40-215 dhclient[2850]: XMT: Solicit on eth0, interval 128860ms.
May  5 08:43:51 ip-172-31-40-215 dhclient[2850]: XMT: Solicit on eth0, interval 121640ms.
May  5 08:44:30 ip-172-31-40-215 journal: ファイルシス   サイズ  使用  残り 使用% マウント位置
May  5 08:44:30 ip-172-31-40-215 journal: devtmpfs         482M     0  482M    0% /dev
May  5 08:44:30 ip-172-31-40-215 journal: tmpfs            492M     0  492M    0% /dev/shm
May  5 08:44:30 ip-172-31-40-215 journal: tmpfs            492M  404K  492M    1% /run
May  5 08:44:30 ip-172-31-40-215 journal: tmpfs            492M     0  492M    0% /sys/fs/cgroup
May  5 08:44:30 ip-172-31-40-215 journal: /dev/xvda1       8.0G  1.6G  6.5G   19% /
May  5 08:44:30 ip-172-31-40-215 journal: tmpfs             99M     0   99M    0% /run/user/1000
[root@ip-172-31-40-215 ec2-user]# 

journalctlコマンド

systemdを採用したシステムにおいて、ログを表示または参照するためのコマンド。

journalctlの設定ファイル

journalctlファイルに関する設定は「/etc/systemd/journald.conf」に設定される。

journalファイルの実態

journalファイルの実態は、「/var/log/journal/」にバイナリファイルとして保存されている。

journalctlコマンドの主なオプション

オプション 説明
-f(--follow) ログの末尾を表示し続ける
-r(--reverse) ログを新しい順に表示する
-e ジャーナルの末尾を表示する
-x 説明文つきで表示する
-k(--dmesg) カーネルメッセージのみ表示する
-b(--boot) ブート時のメッセージを表示する
-p 指定したプライオリティ以上のメッセージを表示する
-u(--unit) 指定したUnitのログを表示する
-l(--full) 画面表示可能な全てのログを表示
-n(--lines) 直近のログから指定行数分を表示
-o(--output) ログの出力形式を指定
--since 指定した日付時刻以降のログを表示
--until 指定した日付時刻までのログを表示
--vacuum-size= アーカイブジャーナルの総容量が指定したサイズを下回るまでに古いジャーナルを削除
--vacuum-time= 指定した期間より古いアーカイブジャーナルを削除
--full エスケープ文字を除いてプレーンテキストで出力する
--no-pager 1ページごとに表示せず、全てのログを出力する

logrotate

常時起動しているシステムによって追記されるシステムログは、追記される一方なのでどんどん肥大化していく。Linuxでは、logrotate機能によって、古くなったログを切り分けたり、不要になったログを削除したり自動化することでログファイルが肥大化することを防ぐ。

logrotateの設定ファイル

logrotateの設定ファイルは、「/etc/logrotate.conf」と「etc/logrotate.d/」配下に各ログファイルに対しての設定ファイルが存在している。

[root@sandbox ec2-user]# cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
	minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

Discussion