ロギング

journald, rsyslog, ログ管理

Linuxのログシステム

systemd環境ではjournaldがログを収集し、 オプションでrsyslogと連携してファイルに永続化します。

journald

  • • systemd統合ログシステム
  • • バイナリ形式で保存
  • • 構造化ログ対応
  • • デフォルトで揮発性(/run/log/journal/)

rsyslog

  • • 伝統的なsyslogデーモン
  • • テキスト形式で/var/log/に保存
  • • リモート転送対応
  • • フィルタリングルール

journalctl

1# 基本操作
2journalctl # 全ログ表示
3journalctl -f # リアルタイム表示(tail -f相当)
4journalctl -n 100 # 最新100行
5
6# サービス指定
7journalctl -u nginx
8journalctl -u nginx -f
9
10# 時間指定
11journalctl --since today
12journalctl --since "2024-01-01 00:00:00"
13journalctl --since "1 hour ago"
14journalctl --since "2024-01-01" --until "2024-01-02"
15
16# ブート指定
17journalctl -b # 現在のブート
18journalctl -b -1 # 前回のブート
19journalctl --list-boots # ブート一覧
20
21# 優先度指定
22journalctl -p err # error以上
23journalctl -p warning # warning以上
24# emerg, alert, crit, err, warning, notice, info, debug
25
26# カーネルログ
27journalctl -k # dmesg相当
28
29# 出力形式
30journalctl -o json # JSON形式
31journalctl -o json-pretty
32journalctl -o short-iso # タイムスタンプISO形式
33
34# ディスク使用量
35journalctl --disk-usage
36journalctl --vacuum-size=1G # 1GBに圧縮
37journalctl --vacuum-time=7d # 7日以上を削除

rsyslog設定

設定ファイル: /etc/rsyslog.conf/etc/rsyslog.d/*.conf

1# /etc/rsyslog.conf の構文
2# facility.priority destination
3# facility: auth, authpriv, cron, daemon, kern, mail, syslog, user, local0-7
4# priority: emerg, alert, crit, err, warning, notice, info, debug
5
6# 例: 全ログをファイルに
7*.info /var/log/messages
8
9# 認証ログを別ファイルに
10authpriv.* /var/log/secure
11
12# メールログ
13mail.* /var/log/maillog
14
15# cron
16cron.* /var/log/cron
17
18# リモートサーバーに転送
19*.* @@log.example.com:514 # TCP
20*.* @log.example.com:514 # UDP

主要なログファイル

/var/log/messages

一般的なシステムログ

/var/log/syslog

Debian/Ubuntuの一般ログ

/var/log/secure

認証・セキュリティログ(RHEL系)

/var/log/auth.log

認証ログ(Debian系)

/var/log/kern.log

カーネルログ

/var/log/cron

cronジョブログ

logrotate

logrotateはログファイルのローテーション(圧縮・削除)を管理。 ディスク枯渇を防ぎます。

1# /etc/logrotate.d/nginx
2/var/log/nginx/*.log {
3 daily
4 rotate 14
5 compress
6 delaycompress
7 missingok
8 notifempty
9 create 0640 nginx nginx
10 sharedscripts
11 postrotate
12 [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
13 endscript
14}
15
16# 主要オプション
17# daily/weekly/monthly - ローテーション頻度
18# rotate N - 保持世代数
19# compress - gzip圧縮
20# delaycompress - 次回ローテーション時に圧縮
21# missingok - ファイルがなくてもエラーにしない
22# notifempty - 空ファイルはローテートしない
23# create - 新規ファイルのパーミッション
24# copytruncate - コピー後に元ファイルを切り詰め
25
26# 手動実行
27logrotate -f /etc/logrotate.conf
28logrotate -d /etc/logrotate.conf # ドライラン

SRE/インフラ観点

ログ管理のベストプラクティス

  • • journald永続化: mkdir /var/log/journal
  • • ログローテーション設定を確認(ディスク枯渇防止)
  • • 重要ログの外部転送(Elasticsearch, CloudWatch等)
  • • 構造化ログ(JSON)の活用

トラブルシューティング

  • • サービス起動失敗: journalctl -u service -xe
  • • ブート問題: journalctl -b -p err
  • • 認証問題: /var/log/secureまたはauth.log
  • • カーネル問題: journalctl -kまたはdmesg