Zabbixで障害を自動で復旧するようにした件について

こんにちは。最近急に涼しくなってきたので、鍋を食べたくなる季節がきたー！とか、
食が楽しみになってきたエンジニアの[ふるや](https://twitter.com/h_furuya_)です🍲

今回は、サーバー・インフラ監視ツール**Zabbix**（ざびっくす）で障害を自動で復旧するようにした件について、綴らせていただきます。

# 経緯
- 「ゲームをプレイしているとエラーになる」といった内容の問い合わせがあった
    - 調査の末、**memcachedがダウン**したことが原因と判明
- ZabbixからChatworkへ通知が届く設定がなく、**発見が遅れた**
- 根本原因は後で探るとして、**すぐ復旧できるような仕組み作り**が最優先

# 対応内容
- **memcached.service**を監視する
※サービスのダウン、アップのタイミングでChatworkに通知する
- memcachedがダウンした場合、memcachedの起動コマンドを実行する

# 設定：監視項目を追加する

## 1. TOP画面にて、以下を実行する
![03.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/e64af588-84f5-9a82-9c25-ae629f3eaa25.jpeg)
**メニューから 設定 > ホスト を押下する**

## 2. ホスト画面にて、以下を実行する
![04.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/a6d94818-d89f-ac8a-1339-7e7011f5d1ca.jpeg)
**(1) ホストの各項目に「アイテム」と「トリガー」があることを確認する**
**(2) memcachedが存在するホストの「アイテム」を押下する**

## 3. アイテム画面にて、以下を実行する
![05.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/c51de8a9-fbd8-a8e4-d242-fd74a22279cc.jpeg)
**画面右上の「アイテム作成」を押下する**

## 4. アイテム作成画面にて、以下を実行する
![06.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/81dee8aa-0c44-4616-5737-4c894a5f6ac3.jpeg)
**(1) 名前を入力する**
　　ここでは `Memcached Port Monitoring` とします
**(2) 「memcachedのポートを指定したキー」を入力する**
　　`net.tcp.service[tcp,,11211]`
**(3) 値のマッピングを入力する**
　　今回は memcached の status を知りたいので、`Service state`を選択する
**(4) アプリケーションの作成に「Memcached」を入力する**
　　すでに識別できるものがあれば、下の一覧から選択する
**(5) テストを押下する**

## 5. アイテムのテスト画面にて、以下を実行する
![07.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/94121279-0bf8-1186-bb1a-ef9de1a24637.jpeg)
**(1) 「値の取得とテスト」を押下し、「結果」が表示されることを確認する**
**(2) 問題なければテスト画面を閉じ、「追加」を押下する**

## 6. トリガー画面にて、以下を実行する
![08.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/8c96544e-f91c-bde2-dc78-29e593e1f765.jpeg)
**(1) 上記「ホスト一覧画面」より、「トリガー」を押下する**
**(2) 右上の「トリガー作成」を押下する**

## 7. トリガー作成画面にて、以下を実行する
![09.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/da52a38e-cc7d-320d-6a64-81f33da26dfb.jpeg)
**(1) 名前に Chatwork通知の際に表示したい内容 を入力する**
**(2) 深刻度を入力する**
　　今回は memcached のステータスが**Down**となった際に**ゲームが成立しなくなる**ため、
　　「**<font color="red">致命的な障害</font>**」とする
**(3) 右の「追加」を押下し、先ほど作成したアイテム名「Memcached Port Monitoring」を選択する**
　　テンプレートのように表示されるので、あとは通知したい条件を入力する。
　　（通常 : 1 なので、 1 で作成します）
**(4) 「追加」を押下する**

## 8. テストする
![10.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/9c6eb27a-6f05-71aa-d433-7728003d69f1.jpeg)
**Chatwork通知を確認する**

# 設定：サービスを自動起動させる
memcachedの起動コマンドをZabbixに実行してもらうために、
ZabbixにSystemコマンド実行権限を付与します。

## 1. memcached.serviceが起動しているサーバーの zabbix_agentd.conf を修正する

```
vim /etc/zabbix/zabbix_agentd.conf
```

```
# 初期状態の場合L74付近
+ AllowKey=system.run[*]
```

## 2. zabbix_agent を再起動し、設定修正内容を反映する

```
systemctl restart zabbix-agent
```

## 3. Zabbixユーザーに対して、部分的にsudo権限を付与する
（今回は再起動のみ付与します）

```
visudo
```

```
+ zabbix ALL=(ALL) NOPASSWD: /bin/systemctl restart memcached.service
```

## 4. メニュー > 設定 > アクション > アクションの作成 から アクションを追加する

### アクション　※以下、数字の順に設定する
![01.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/d802d251-541d-1057-90a2-3c82e881b5b9.jpeg)

### 実行内容　※以下、数字の順に設定する
![02.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/74924/c9551432-b325-bff7-2faa-dd8afde2d860.jpeg)

#### 実行内容に記載するコマンド

```
sudo /bin/systemctl restart memcached.service
```

※`sudo`が必要。`systemctl`だけでは実行されない。

## 5. テストする
設定後は必ずテストしましょう。

<br />
<br />

完了です！お疲れ様でした！😊

少々手間ですが、サービス提供者としては必須ですし
個人的には設定するのが楽しかったです。
（次：設定も自動化したい）

以上、エンジニアの[ふるや](https://twitter.com/h_furuya_)が綴らせていただきました。

<br />
<br />

本記事は以下に投稿した記事を再構成しています。
https://dhe.dank-hearts.net/n/na643313dabb8
https://dhe.dank-hearts.net/n/n5d05df5d7476