ミッション 監視の自動化

3つを1つに束ねる

この章で、離れても切れない端末、太らないログ、原因の読めるエラーログ、死活の判定、決まった間隔での自動実行を作りました。部品はもう揃っています。

最後に、これらを回り続ける1つの体制にします。やることは3つです。

  1. 自分で作ったログにも、畳む設定を用意する
  2. 状況をまとめて読める報告を作る
  3. 報告も自動で更新されるようにする

自分のログにも寿命を決める

ヘルスチェックの記録は、放っておけば nginx のログと同じように太ります。2分ごとに1行なら1日 720 行です。

パッケージが置いてくれるのは、そのパッケージのログの設定だけです。自分で作ったログは、自分で面倒を見ます

/var/log/healthcheck.log { weekly rotate 4 compress missingok notifempty }

create の行はここでは要りません。書いているのは root だからです。誰が書いているかで、必要な指定は変わります。

まとめて読める形にする

ログが複数あると、それぞれを開いて回ることになります。朝いちばんに見る場所は1つにしたいので、要点だけを集めた報告を作ります。

集めるものは次の3つです。

  • 直近の死活判定。いま生きているか
  • 直近で NG が何回あったか。安定しているか
  • ディスクの空き。埋まりかけていないか

ディスクは df -h / で見られます。-h は人が読みやすい単位にする指定です。logrotate を入れた理由そのものなので、報告に並べておく価値があります。

5章で作った証明書の期限も、同じ考えで並べておけます。-checkend の判定は終了コードで返るので、報告に書ける形にするひと手間が要ります。

報告も自動で更新する

報告を手で走らせるなら、結局ログを見て回るのと変わりません。前のレッスンと同じ形で、.service.timer を1組作ります。

間隔は中身に合わせます。死活は2分ごとでも、報告は1時間に1回で十分です。何もかも短くすると、ディスクとログを無駄に消費します。

手を動かす

ヘルスチェックのログを畳む設定を書き、状況をまとめる報告スクリプトを作り、それを1時間ごとに更新させます。

ヒント

  • 1. /etc/logrotate.d/healthcheck を書く。weekly、rotate 4、compress、missingok、notifempty を入れる
  • 2. logrotate -f で強制的に畳ませ、圧縮されたものができることを確かめる
  • 3. /root/bin/monitor-report.sh を書く。直近の死活判定、NG の回数、df -h / の結果を /root/monitor-report.txt に書き出す
  • 4. chmod +x を付けて1回走らせる
  • 5. monitor-report.service と monitor-report.timer を書く。OnCalendar=hourly にする
  • 6. systemctl daemon-reload のあと systemctl enable --now monitor-report.timer で有効にする

14 項目で採点します