kusanagi monitで行うサーバー監視解説

謝 永佳

「KUSANAGIのmonitコマンドを用いたサーバー監視について詳しく解説する記事。Monitはサーバーのアクセスログを監視し、特定の条件で自動的にサービスを再起動するシステム・プロセス監視ツールである。コマンドの使い方やMonitが有効か無効かを判断する方法、監視設定の方法などについて分かりやすく説明。Monitの設定ファイルの生成や再読み込み、監視を有効化・無効化する方法などについても触れている。KUSANAGIのMonitの仕様も詳しく紹介している。」

kusanagi monitで行うサーバー監視解説.

今回はKUSANAGIのmonitコマンドでサーバー監視、およびその仕様について、解説していきたいと思います。

今回のサーバー監視で利用しているツールはコマンドの名前通りにMonitというシステム・プロセス監視ツールです。
KUSANAGIのMonitはサーバーのアクセスログを監視し、自動的にサービスを再起動で利用しています。
具体的どういう項目を監視、どういう条件で再起動するかには後程詳細に説明します。

まずはmonitコマンドの使い方を見てみましょう。

monit コマンドの使い方

Monitでサーバー監視を有効化されているかどうかは「kusanagi monit」コマンドで確認することができます。

Monitが有効している状態
$ kusanagi monit
monit is on
monit completed.

Monitが無効している状態
$ kusanagi monit
monit is off
monit completed.

Monitでサーバー監視を有効化するには「 kusanagi monit on」コマンドで行います。

Monitが有効している状態
$ kusanagi monit on
monit is already on. Nothing to do.
monit completed.

Monitが無効している状態
$ kusanagi monit on
Turning on monit.
Created symlink /etc/systemd/system/multi-user.target.wants/monit.service -> /usr/lib/systemd/system/monit.service.
monit completed.

Monitでサーバー監視を無効化するには「 kusanagi monit off」コマンドで行います。

Monitが有効している状態
$ kusanagi monit off
Turning off monit.
Removed /etc/systemd/system/multi-user.target.wants/monit.service.
monit completed.

Monitが無効している状態
$ kusanagi monit off
monit is already off. Nothing to do.
monit completed.

Monitの設定を再度読み直すには「kusanagi monit reload」コマンドで行います。

$ kusanagi monit reload
Reloading monit.
monit completed.

プロファイルのMonitの設定ファイルを生成したい場合、「kusanagi monit config」コマンドで行うことができます。
設定ファイルの生成はプロビジョニング時に自動生成されます。もし設定ファイルが削除または変更された場合、設定ファイルを戻すには「kusanagi monit config」コマンドで設定ファイルを再生成することができます。
「kusanagi monit config」コマンドのみオプションとしてプロファイルを指定することができます。省略した場合は、カレントプロファイルが対象となります。

$ kusanagi monit config kusanagi_html
monit completed.

生成された設定ファイルは/etc/monit.d/フォルダに配置しています。どういうファイルが生成されたか確認に行きましょう。
生成されたファイルは下記2つのファイルになります。

$ ls -l /etc/monit.d/kusanagi_html*
-rw-r--r-- 1 root root 770  4月 14 17:20 /etc/monit.d/kusanagi_html.httpd
-rw-r--r-- 1 root root 689  4月 14 17:20 /etc/monit.d/kusanagi_html.nginx

2つのファイルの中身はこちらになります。

$ cat /etc/monit.d/kusanagi_html.httpd 
check file kusanagi_html_httpd with path /home/kusanagi/kusanagi_html/log/httpd/access.log
        start program = "/opt/kusanagi/bin/kusanagi restart"
        stop program = "/bin/systemctl stop httpd"
        depends on httpd
        if match '"(GET|POST) /.* HTTP/.*" 5[0-9][0-9] [0-9]+ ' for 2 cycle then start
        if 5 restarts within 5 cycles then alert
        if 5 restarts within 5 cycles then unmonitor
        group httpd

check file kusanagi_html_httpd_ssl with path /home/kusanagi/kusanagi_html/log/httpd/ssl_access.log
        start program = "/opt/kusanagi/bin/kusanagi restart"
        stop program = "/bin/systemctl stop httpd"
        depends on httpd
        if match '"(GET|POST) /.* HTTP/.*" 5[0-9][0-9] [0-9]+ ' for 2 cycle then start
        if 5 restarts within 5 cycles then alert
        if 5 restarts within 5 cycles then unmonitor
        group httpd

$ cat /etc/monit.d/kusanagi_html.nginx 
check file kusanagi_html_nginx with path /home/kusanagi/kusanagi_html/log/nginx/access.log
        restart program = "/opt/kusanagi/bin/kusanagi restart"
        depends on nginx
        if match '"(GET|POST) /.* HTTP/.*" 5[0-9][0-9] [0-9]+ ' for 2 cycle then restart
        if 5 restarts within 5 cycles then alert
        if 5 restarts within 5 cycles then unmonitor
        group nginx

check file kusanagi_html_nginx_ssl with path /home/kusanagi/kusanagi_html/log/nginx/ssl_access.log
        restart program = "/opt/kusanagi/bin/kusanagi restart"
        depends on nginx
        if match '"(GET|POST) /.* HTTP/.*" 5[0-9][0-9] [0-9]+ ' for 2 cycle then restart
        if 5 restarts within 5 cycles then alert
        if 5 restarts within 5 cycles then unmonitor
        group nginx

KUSANAGIのMonitの仕様について

上記のファイルの中身を見たらほぼ同じ内容が書かれていることがわかると思います。
違う部分はcheck、depends、groupから開始の行になります。
KUSANAGIのMonitの仕様としてはWebアクセスログに一定条件で500番台が発見された場合、サービス(nginx、httpd、php) のうち、現在有効なサービスを再起動します。
※サービスを再起動してもサーバー復旧されない場合もあります。ご注意ください。

上記の29~35行目までの設定内容を解説します。

check file kusanagi_html_nginx_ssl with path /home/kusanagi/kusanagi_html/log/nginx/ssl_access.log

の部分は監視サービスタイプや名前を設定します。
例:監視のタイプはファイルタイプ「file」でファイルパスは「/home/kusanagi/kusanagi_html/log/nginx/ssl_access.log」です。監視サービスの名前を「kusanagi_html_nginx_ssl」にします。

restart program = "/opt/kusanagi/bin/kusanagi restart"

の部分は再起動時プログラムを設定します。
例:「kusanagi restart」コマンドを実行します。kusanagi restartはサービス(nginx、httpd、php) のうち、現在有効なサービスを再起動します。

depends on nginx

の部分は依存関係を設定します。
例:監視サービスが有効になるためにはnginxサービスが必須です。

if match '"(GET|POST) /.* HTTP/.*" 5[0-9][0-9] [0-9]+ ' for 2 cycle then restart
if 5 restarts within 5 cycles then alert
if 5 restarts within 5 cycles then unmonitor

の部分はアクションとアクションを実行する条件を設定します。
例:

  • 1行目はサービスが2回サイクルで正規表現(500番台エラー)をマッチしたら、再起動プログラムを実行します。
  • 2行目はサービスが 5 サイクル以内に 5 回再起動された場合にアラートに送信します。
    アラートの送信先やメール文面は「/etc/monit.d/alert」で設定変更できます。
  • 3行目はサービスが 5 サイクル以内に 5 回再起動された場合にMonitがサービスの監視を解除します。
group nginx

監視サービスのグループ名を設定します。
例:グループ名を「nginx」にします。
Monitでは「monit -g グループ monitor all」コマンドでグループ毎に監視有効・無効化する機能があります。
KUSANAGIはnginx有効時にnginxグループの監視を有効化し、httpdグループの監視を無効化します。
逆にhttpd有効時にnginxグループの監視を無効化し、httpdグループの監視を有効化します。

普段にはなかなか行わないコマンドと思いますが、こちらの解説でKUSANAGIのMonitの動作やMonitはどういうサービスなのかの参考になればよいと思います。

最後に500番台エラーはサーバーエラーなので、サーバー側に何か問題があると考えた方がよいでしょう。
KUSANAGIのMonitはWebサイトに500番台エラー発生時の一時対策すぎないので、エラーが発生したら、可能な限り発生した原因や箇所を特定し、恒久対策を行ってください。

※本記事は、2023年4月時点での仕様となります。今後の改訂によって変わる可能性がありますので、ご留意ください。
※Monitには色々な監視設定できますが、ご興味があるかたにはMonitのドキュメントを確認してください。

<< 新しく実装されたkusanagi containerコマンドで複数のPHPバージョンを一つのサーバで運用してみるkusanagi ssl で簡単に SSL 設定を行う >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解