変更要約: 初版(主題1.09・副主題1.09.1〜1.09.3に対応)
4.2システムのログ
ログの収集・参照・保守を学びます。rsyslog(rsyslog.conf のファシリティ・プライオリティ・アクション、中央ログサーバーへの転送)、systemd ジャーナル(journalctl の問い合わせ・フィルタ・journald.conf・/var/log/journal/)、手動出力(logger・systemd-cat)、logrotate によるローテーション(/etc/logrotate.conf・/etc/logrotate.d/)を押さえます。
障害対応の第一歩は常に「ログを見る」です(本主題の重要度5)。現代の Linux では、systemd のジャーナルと伝統の rsyslog が並走しており、両方の引き方と、肥大対策(logrotate)までがセットで問われます。
4.2.1rsyslog とファシリティ・プライオリティ
- rsyslogd=syslog 系の標準デーモン。rsyslog.conf のルールは「ファシリティ.プライオリティ アクション」形式(例
mail.err /var/log/mail.err)。 - ファシリティ=ログの発生源の分類(auth・authpriv・cron・daemon・kern・mail・user・local0〜7)。プライオリティ=重大度(低→高:debug・info・notice・warning・err・crit・alert・emerg)。指定した重大度以上が対象になる。
- アクション=ファイルへ書く(/var/log/...)だけでなく、
@ホスト(UDP)・@@ホスト(TCP)で中央ログサーバーへ転送できる(受け側も rsyslog で受信設定)。 - 手動でログを打つ=logger(
logger -p user.err "テスト"=スクリプトから syslog へ)・systemd-cat(コマンドの出力をジャーナルへ流す)。
4.2.2systemd ジャーナルと logrotate
- journalctl=ジャーナルの問い合わせ:
-u nginx(ユニット別)・-b(今回起動分)・-f(追随=tail -f 相当)・-p err(重大度フィルタ)・--since "2026-07-06"(期間)。 - ジャーナルの永続化=/var/log/journal/ が存在すればディスクへ保存(無ければメモリのみ=再起動で消える)。設定は /etc/systemd/journald.conf(上限サイズ等)。古い分の削除=
journalctl --vacuum-size=500Mや--vacuum-time=30d。 - logrotate=テキストログのローテーション・圧縮・削除の自動化。全体設定 /etc/logrotate.conf+パッケージごとの /etc/logrotate.d/(rotate 4・weekly・compress 等)。cron/タイマー経由で定期実行される。
「mail.err の意味=mail ファシリティの err 以上」「@=UDP・@@=TCP 転送」「ユニットのログ=journalctl -u・追随=-f・今回起動=-b」「ジャーナル永続化=/var/log/journal/ の有無」「ローテーション=logrotate(logrotate.d)」 が定番です。「以上」の解釈(err 指定で crit も対象)を外さないこと。
「nginx が落ちた」障害対応で流れを組みましょう。まず journalctl -u nginx -b -p warning で今回起動分の警告以上に絞って眺め、時間帯が分かったら --since/--until で挟み込みます。ジャーナルで足りない伝統デーモンのログは /var/log/(messages・secure 等)を確認——どのファイルに何が入るかを決めているのが rsyslog.conf のルールです。authpriv.* /var/log/secure なら認証ログは secure へ、*.info;mail.none /var/log/messages なら「info 以上ただし mail は除く」が messages へ、とセレクタの読み方まで問われます。複数サーバーの監査要件があるなら *.* @@log01.example.com でTCP 転送の中央集約を構成します(UDP の @ は軽量だが欠落しうる)。ジャーナルはバイナリ形式なので grep でなく journalctl のフィルタで引く、テキストログの肥大は logrotate が「週次で4世代・圧縮」などの規則で面倒を見る、という役割の線引きまで整理できれば、この節は完成です。
| 目的 | コマンド/設定 | 要点 |
|---|---|---|
| ユニットのログを追う | journalctl -u nginx -f | -b で今回起動・-p で重大度 |
| 振り分けルール | rsyslog.conf「fac.pri アクション」 | 指定重大度**以上**が対象 |
| 中央サーバーへ転送 | @host(UDP)/@@host(TCP) | 監査要件は TCP が定石 |
| 肥大対策 | logrotate / --vacuum-* | テキスト=logrotate・ジャーナル=vacuum |
ひっかけ: 「mail.err は mail の err のみを対象にする」は誤りです。syslog のセレクタは指定重大度以上(err・crit・alert・emerg)を含みます。また「ジャーナルは常にディスクに永続化される」も誤り=/var/log/journal/ が無ければメモリのみで再起動で消えます。「logrotate はジャーナル(バイナリ)もローテーションする」も誤り=ジャーナルの整理は journald の上限設定と --vacuum 系です。
4.2.3この節のまとめ
- rsyslog=fac.pri(以上)→アクション(@UDP/@@TCP 転送可)・手動は logger/systemd-cat
- journalctl -u/-b/-f/-p/--since・永続化は /var/log/journal/。テキストの肥大は logrotate・ジャーナルは --vacuum
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. systemd 環境で、nginx ユニットの「今回の起動以降」のログだけを表示したい。適切なコマンドは?
Q2. rsyslog.conf の「mail.err /var/log/mail.err」というルールが対象とするメッセージはどれ?
Q3. /var/log/ 配下のテキストログを「週次で4世代・圧縮保存」のように自動ローテーションしたい。使う仕組みと設定場所は?

