はじめに
令和元年5月1日午前0時~午前2時まで MySQL サーバーの起動失敗によりブログが閲覧できない状態となっていました。
令和に関する記事を公開した直後でアクセスもあったかと思います。
ご迷惑をおかけしました。
監視の検討
以前紹介しましたが、このブログのサーバーは無料版の Mackerel による監視を行っています。
ただ、監視項目は、デフォルトのホストの死活監視と、メモリ等のリソース監視のみとなっていました。
今更ながら、下記の監視を追加しました。
- プロセス監視(check-procs)
- URL 監視(check-http)
監視プラグインの準備
監視プラグインのインストールを行います。
CentOS なので下記となります。
# yum install mackerel-check-plugins
プロセス監視(check-procs)
check-procs プラグインを利用します。
今回は、プロセスが0だと CRITICAL、それ以外は OK という条件としますが、~以下、~以上など柔軟な設定が可能なようです。
また、一般的なヘルプも確認します。
アップデートによる瞬断も考えられますので、max_check_attempts を編集し、1分間隔で監視し、3回以上 OK 以外ならメールを飛ばす設定とします。
監視するプロセスは、php-fpm、nginx、mysqld となりますので、下記を設定しました。
[plugin.checks.check_php-fpm]
command = ["check-procs", "--pattern", "php-fpm"]
max_check_attempts = 3
[plugin.checks.check_nginx]
command = ["check-procs", "--pattern", "nginx"]
max_check_attempts = 3
[plugin.checks.check_mysqld]
command = ["check-procs", "--pattern", "mysqld"]
max_check_attempts = 3
URL 監視(check-http)
過去、プロセスは正常に上がっていても、MySQL の認証方法が変わり、表示ができない問題が発生していたこともありました。
対策として、1分間に1回、このブログのステータスコードの監視も追加します。
check-http プラグインを利用します。
-s, --status= mapping of HTTP status
To override status
check-http -s 404=ok -u http://example.com
のような記載もあり、–status をデフォルトのままで使用するとどうなのか気になったので、一応試してみました。
異常時の検知例
# check-http -u https://blog.oyasu.info/
HTTP CRITICAL: HTTP/1.1 500 Internal Server Error - 494 bytes in 0.202638 second response time
# check-http -u https://blog.oyasu.info/404.html
HTTP WARNING: HTTP/1.1 404 Not Found - 57010 bytes in 0.422603 second response time
正常時
# check-http -u https://blog.oyasu.info/
HTTP OK: HTTP/1.1 200 OK - 114036 bytes in 0.397335 second response time
特に指定しなくても、400番台 WARNING、500番台は CRITICAL となるようです。
プロセス監視と同様に、max_check_attempts を編集し、3回以上 OK 以外ならメールを飛ばす設定とします。
[plugin.checks.check-http-blogoyasuinfo]
command = ["check-http", "-u", "https://blog.oyasu.info/"]
max_check_attempts = 3
まとめ
Mackerel を使用して簡単にウェブサーバーの監視を追加できました。
ある程度規模ができてくると、Zabbix や Nagios を立てるのも良いかと思いますが、一台であまり過去を振り返らない運用の場合簡単に設定できる無料版の Mackerel が便利ですね。