LoginSignup
12
19

More than 5 years have passed since last update.

Zabbix:監視対象サービス停止時に自動復旧させる

Last updated at Posted at 2017-06-04

やりたいこと

例えば、httpdサービスが停止した(httpdプロセス数が0個になった)場合、Zabbixでアラーム(トリガ)として検知します。
ここまでは普通ですが、
その後、そのトリガをアクションの条件として、障害発生サーバのhttpdサービスを復旧したら楽ですよね。

やりたいことの考え

ワークアラウンドとしてまず浮かぶのは、(1回目のアラーム時)停止サービスを再度起動してみることですよね。
だったら、人間様じゃなくてZabbix君にやらせてしまいましょう。
それも再度落ちるようなら(2回連続アラームなったら)、人間様にご登場いただくと云う寸法で。

今回の実現環境

  • ZabbixServer側:zabbix3.0
  • ZabbixAgent(httpdサービス起動)側:zabbix-agent導入済みのCentOS7

ざっくりした実現方法

  1. zabbix-agent経由で、httpdサービス停止を検知
  2. zabbix-serverでトリガ発報
  3. トリガでアクションが発動
  4. アクションで、Zabbix-agent側でshellコマンドを発行
  5. shellコマンドで"systemctl start httpd.service"をsudoで実行
  6. httpdサービス復旧

実現方法

ZabbixSever側

ITEM設定

名前を「httpd.service process」と設定。最初の1ワード目が、"systemctl で使用する"httpd.service"と同じ文字列であることがミソ(アクションのコマンドで使用します)。

image.png

TRIGGER設定

名前を「httpdサービス停止(自動再起動処理有)」とし、日本語部分を固定フォーマットにすることがミソ(アクション設定時にこの文字列をキーワードにする)

image.png

ACTION設定

アクション設定です。アクションの名前は何でも良いです。
アクションの条件に、3行目(トリガー名 含まれる 「サービス停止(自動再起動処理有)」)を加える。
トリガで使用した文字列「サービス停止(自動再起動処理有)」が存在すればアクションを起こすようにする。

image.png

実行内容は、Zabbixエージェントで、下記のようなコマンドを実行するよう指示する。
image.png
]

ZabbixAgent側

実現方法として、Zabbix-agentをrootユーザで稼働する方法と、sudoを使用する方法がある。
今回は、既存システムに影響が少ないsudoを使用する方法を採用する。

/etc/sudoers設定

visudoコマンドで、/etc/sudoersの最終行に追加。

/etc/sudoers
zabbix ALL=(ALL)NOPASSWD: /usr/bin/systemctl start httpd.service, /usr/bin/systemctl start chronyd.service

実行結果

イベントログを見ていると、サービス停止後、ひとつのアクションが実行され復旧していることがわかる。
アクション内容も、設定したマクロ{ITEM.NAME}が思ったとおりに展開されていることが確認できた。
image.png

最後に

見ていただければわかるように、アイテム「httpd.service process」(マクロの{ITEM.NAME})のhttpd部分を別のサービス名(e.g. chronyd等々)に変更すれば汎用的に利用可能です。
また、実際の現場では、サービスは起動はOKだが、「Webシナリオ」でエラーとなる場合に、httpd/mysqldサービスの再起動を実行する等すれば、少しは使い物になると思います。

今回は例としてsystemctlコマンドでした。
が、ansibleと連携することで、Webシナリオ等のサービス障害検知時に、設定状況の差異修復を行えば良いと思う。

最後の最後に

もし本番でこのような仕組みを使うのであれば、メンテナンス時にZabbix機能の「メンテナンス」を使用することをおすすめします(アクションの条件にもデフォルトで入っています)。
もし使用しなければ、メンテナンス中にZabbixが勝手にサービス再開してしまいますから…(怖い怖いw)

12
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
19