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のドキュメントを確認してください。