Zabbix のインストール
先日、管理している WordPress の1つが「このサイトに重大なエラーが発生しました」とだけ表示されて、ホームページにアクセスできなくなりました。ユーザーからの問い合わせで発覚しました。
最近は WordPress のプラグインとかでエラーが発生するとメールで通知してくれたりしますが、今回のエラーはメール通知が来ませんでした。
Webサーバのエラーログにも何も出力されておらず、とりあえずプラグインの不具合だろうと目星をつけて wp コマンドをたたいてみます。
$ wp plugin list
:
Fatal error: Uncaught Error: Call to undefined function cal_days_in_month() in /...../wp-content/plugins/backwpup/...
:
BackWPup というプラグインの不具合でした。ということでこのプラグインを削除します。
$ sudo mv /...../wp-content/plugins/backwpup /tmp
ホームページにアクセスすると、無事、正常に表示されました。
めでたしめでたし。。。ではない。問題は、ユーザから指摘されるまで障害が発生していることに気づけなかったことです。
死活監視は Statuscake を利用しているのですが、サービス監視はしていなかったので、ユーザに指摘されるまで発見できませんでした。
サービス監視はトップページが正常に表示されているかチェックし、表示されていなければメールで通知するという監視機能です。
無料の監視サービスが見つからなかったので、定番ツールの Zabbix を自宅サーバにインストールして使うことにしました。
Zabbixのインストール
ダウンロードページで以下のように選択します。

バージョンは最新のLTSを選択。マニュアルの「16 エージェントとエージェント2の比較」を読んで、コンポーネントは Agent 2 のものを選択。あとはインストール先の環境に従って選択します。
そうすると、以下のようなインストール方法が表示されますので、その通りにインストールします。C はそれぞれのDBを監視するエージェントなので不要と判断し、インストールしませんでした。

/etc/nginx/conf.d/zabbix.conf が生成されていますので、https://zabbix.tyd4.com でアクセスできるように変更します。ついでにアクセス制限もしておきます。
listen 443 ssl;
listen [::]:443 ssl;
server_name zabbix.tyd4.com;
allow 127.0.0.1;
allow 192.168.10.0/24;
allow FE80::/64;
allow 2404:7a82:6d20:5b00::/64;
deny all;
nginx のリロードをします。
$ sudo service nginx reload
Let’s Encrypt の証明書を取得します。
$ sudo crtbot --nginx -d zabbix.tyd4.com --preferred-challenges=http
htttps://zabbix.tyd4.com にアクセスすると初期設定を促されますので、指示に従って設定します。
「zabbixサーバー名」は「ソフトハウス太陽堂」にしました。
ユーザー設定 > プロファイル > パスワード変更 でパスワードを変更しておきます。
他にも何かやったかもしれませんが、記録していなかったので割愛します。
で、あとは監視先の各サーバーのサービス監視を登録していきます。
Web監視の登録
サービス監視は Zabbix の「Web監視」で登録します。
- データ収集 > ホスト で右上の「ホストの作成」でホストを追加する
- ホストの一覧に追加されたら「Web」のリンクをクリック
- 右上の「Webシナリオの作成」でシナリオタブとステップタブを記載して「追加」
以上で監視できます。
詳しくはマニュアルを参照ください。
ステップの「URL」にアクセスしたときに、「要求文字列」の文字列が出力され、「要求ステータスコード」が返却されていれば正常と判断する、ということです。
通知は 通知 > メディアタイプ で有効にしたメディアに通知することができます。私は Email を有効にしました。
通知方法はユーザーごとに指定できます。ユーザー > ユーザー で Admin などを選択し、メディアタブで Email などのメディアを選択します。
あとはメールのテンプレートを好みにするとか、ダッシュボードにWeb監視のウィジェットを追加するとか、お好みで。
とりあえず以上で監視設定できたと思いますが、ちゃんと監視できているかどうかは次回障害時までおあずけです。