こんにちは。
前回は Tomcat と httpd のログ確認入門 をまとめました。
今回は monit 経由で再起動した場合のログ確認 に焦点を当ててみます。
「ログ確認って何から見ればいいの?」という初級者向けです。
この記事が以下のような方の参考になればうれしいです。
・初めて Linux サーバ上の Tomcat / httpd を扱う人
・運用作業を安全に行いたい初心者向け
0. monit とは?
💡 monit は サービスやプロセスを監視・管理するツール です。
- サービスが落ちていないか監視
- 異常を検知した場合に自動で再起動や通知を実行
- 直接プロセスを管理するのではなく、
systemdやserviceコマンドを呼び出して操作する
0. この記事で扱った環境
💡 まずは、この記事で確認したサーバ環境をざっくり整理します。
| 項目 | 内容 |
|---|---|
| OS / サービス管理 | Linux 系(systemd 管理、CentOS7 以降を想定) |
| Web サーバ | Apache HTTP Server (httpd) |
| アプリケーションサーバ | Tomcat(Spring Framework アプリケーション) |
| HTTPS 証明書 | 更新作業後に再起動が必要 |
| サービス監視 | monit から systemd 経由で再起動 |
| ログ確認方法 | systemd ログ:journalctl -u tomcat / httpdTomcat アプリログ: /opt/tomcat/logs/localhost.log(古いログは .gz 圧縮) |
| 補足 | Tomcat はアプリ初期化に時間がかかる(Spring Context 読み込みなど) httpd は軽量で秒単位で再起動可能 |
環境を意識しながらログ確認の手順や時間感覚を理解すると、より安全に作業できます。
1. 背景
- サーバ証明書更新やアプリ更新の際、monit から Tomcat や httpd の再起動を実施
- 「monit から呼ばれた systemd は、どのタイミングで実際にプロセスを停止/起動したのか?」
- 「アプリはちゃんと停止・起動したのか?」をログで確認したかった
2. monit 経由再起動のイメージ
-
monit がサービス停止/起動のコマンドを実行
systemctl stop tomcat systemctl start tomcat -
systemd が実際のプロセス停止・起動を管理
-
Tomcat 本体が停止 → アプリ停止 → 起動 → アプリ初期化
-
systemd が終了状態を感知
-
monit が次のチェックに進む
ポイント:monit 自体はプロセス管理せず、systemd 経由で実際の操作が行われる
3. systemd のログで確認
例えば Tomcat の停止・起動ログ:
sudo journalctl -u tomcat -r | head -n 20
ログ例:
Stopping Apache Tomcat 8...
PID file was not removed
Tomcat did not stop in time
Stopped Apache Tomcat 8
Starting Apache Tomcat 8...
Tomcat started
Server startup in 30 sec
🔹 ポイント
-
Stopping...→ monit が stop を呼び出した直後 -
Stopped→ systemd がプロセス停止を確認した瞬間 -
Starting...→ monit が start を呼び出した直後 -
Server startup→ Tomcat がアプリ初期化まで完了した瞬間
4. localhost.log でアプリ停止・起動を確認
Tomcat のアプリ停止・起動は localhost.log に詳細が出ます。
sudo zgrep -H "13:1" /opt/tomcat/logs/localhost.log-2025-11-22.gz
出力例:
13:15:25 Destroying Spring FrameworkServlet 'dispatcherServlet'
13:15:52 Initializing Spring embedded WebApplicationContext
13:16:34 Initializing Spring DispatcherServlet 'dispatcherServlet'
🔹 ポイント
- 停止開始 → destroy → root context close → 完了
- 起動開始 → WebApplicationContext 初期化 → DispatcherServlet 初期化 → 完了
5. monit / systemd / Tomcat のタイムライン例
| 時刻 | イベント | どのログに出るか |
|---|---|---|
| 14:00:00 | monit stop 実行 | monit stdout / systemd journal |
| 14:00:01 | systemd stop 実行開始 | systemd journal |
| 14:00:06 | Tomcat アプリ停止完了 | localhost.log |
| 14:00:10 | systemd stop 完了 | systemd journal |
| 14:00:15 | monit start 実行 | monit stdout / systemd journal |
| 14:00:20 | Tomcat アプリ起動開始 | localhost.log |
| 14:00:50 | Tomcat アプリ起動完了 | localhost.log |
| 14:00:57 | systemd start 完了 | systemd journal |
| 14:01:00 | monit 次のチェックへ | monit stdout |
6. 初心者向けポイント
- monit は直接サービスを停止していない → systemd 経由で操作される
- systemd は Tomcat / httpd 本体のプロセスの停止・起動を管理
- Tomcat アプリの初期化・終了は localhost.log で確認
- httpd は軽量なので秒単位で再起動可能
7. 実務への活かし方
- 証明書更新やアプリ更新の再起動作業で、正しい順序と時間感覚を把握できる
- monit と systemd の連携理解 → ログ解析やトラブルシュートが早くなる
- アプリ停止・起動時間を見積もる → 作業手順書に具体的数字を記載できる
8. 自分の学び
- monit が呼び出す systemd とアプリログの関係が理解できた
- 初心者でも、journalctl + zgrep で安全に確認できる
- 再起動にかかる実時間を把握することで、作業手順の安心感が増す
✅ 次のステップ
- systemd 側で
TimeoutStopSecやRestartSecの設定を確認 - monit のチェック周期を調整して無駄な再起動を防ぐ
- 複数アプリがある場合のタイムライン整理
ポイント:ログ確認は慣れれば短時間でできる。
monit → systemd → アプリの流れを理解すると、トラブルシュートも怖くない!