ログ管理
障害が起きたときに最初に見るのはログです。逆に言えば、ログの出方を設計できないと障害は追えません。なお、この学習環境には rsyslogd が入っておらず、動いているのは systemd-journald だけです。rsyslog の書式は試験に出るので読み方だけ押さえます。
プライオリティは数字が小さいほど深刻
| 数字 | 名前 | 意味 |
|---|---|---|
| 0 | emerg (panic) | システムが使用不能 |
| 1 | alert | 直ちに対処が必要 |
| 2 | crit | 致命的な状態 |
| 3 | err (error) | エラー |
| 4 | warning (warn) | 警告 |
| 5 | notice | 通常だが重要 |
| 6 | info | 情報 |
| 7 | debug | デバッグ用の詳細 |
emerg が 0 で最も重く、debug が 7 で最も軽い。日常の感覚と逆向きなので表ごと覚えます。また、設定でプライオリティを1つ指定すると、それ以上に深刻なものもすべて含まれます。mail.info と書けば mail の info から emerg までが対象です。
ファシリティはどこから出たログかの分類で、auth と authpriv が認証、cron、daemon、kern、印刷の lpr、mail、syslog 自身、既定値の user があります。加えて local0 から local7 が利用者の自由枠で、自作アプリのログを分けたいときにここを使う、という設計が問われます。
rsyslog.conf は ファシリティ.プライオリティ と 出力先
プレーンテキスト
auth,authpriv.* /var/log/auth.log
*.info;mail.none;cron.none /var/log/messages
*.* @192.168.1.10* はすべてを表します。.none はそのファシリティを除外する指定で、*.info;mail.none は「全部の info 以上、ただしメールは除く」です。セミコロンで条件を並べ、カンマでファシリティを列挙します。ファイル名の前に - を付けると書き込みのたびに同期しません。@ で始まる出力先は他ホストへの転送で、@ 1つが UDP、@@ 2つが TCP、ポートは 514 番です。
シェルから syslog へ書くのが logger です。-p でファシリティとプライオリティを local0.info の形で指定し、-t でタグを付けます。
journalctl はユニットと期間で絞る
| オプション | 何をするか |
|---|---|
-u <ユニット> | 指定したユニットのログだけ |
-b | 今回の起動以降。-b -1 で1つ前の起動 |
-p <レベル> | 指定レベル以上のログだけ |
--since --until | 期間を絞る。--since "1 hour ago" も可 |
-n <件数> | 末尾から指定件数だけ。-f は追尾 |
-k | カーネルのメッセージだけ。--no-pager でページャを外す |
journald の記録は既定では /run/log/journal/ に置かれ、再起動すると消えます。永続化するには /var/log/journal/ を作るか、/etc/systemd/journald.conf に Storage=persistent を書きます。
logrotate の rotate は残す世代数
設定は、対象のログのパスに続けて項目を波括弧で囲んで並べる形です。周期は daily weekly monthly、rotate <数> が残す世代数で、それより古いものは削除されます。compress は gzip 圧縮、delaycompress は圧縮を1世代遅らせる指定です。missingok は対象ファイルが無くてもエラーにせず、notifempty は中身が空なら回しません。create <権限> <所有者> <グループ> は新しい空ファイルを指定の権限で作り、copytruncate は名前を変えずに中身を切り詰めるのでファイルを開き続けるプロセス向けです。size はサイズ契機、postrotate から endscript はローテーション後に実行するコマンドです。
全体の既定は /etc/logrotate.conf にあり、末尾で /etc/logrotate.d/ を読み込みます。個別の設定はこのディレクトリに置きます。logrotate -d <設定ファイル> なら動かさずに動作を確認できるので、書いたら必ずこれで確かめてください。
試験で狙われるところ
プライオリティは数字が小さいほど深刻で、emerg が 0、debug が 7 です。mail.info は info 以上が全部対象、.none は除外の指定です。@host は UDP 転送、@@host は TCP 転送です。rotate 4 は4回回すのではなく4世代残すという意味です。そして /var/log/wtmp と btmp と lastlog はバイナリなので cat では読めず、last lastb lastlog が要ります。