Zabbixのリモートコマンドでansible-playbookを実行してhttpdを再起動する。

■環境
VPS1台構成
CentOS Linux release 7.6.1810 (Core)
Zabbix 4.0.5
ansible 2.7.8
Apache/2.4.6

※1台構成のためAnsible実行サーバーと操作対象サーバーとZabbixサーバーは同一機器となっています。

# 1. Ansible環境構築
* Ansibleインストール
`# yum install ansible`
でAnsibleをインストールします。※EPELが有効化されていなければ、有効化が必要です。

* Ansible用のディレクトリ作成
`# cd /opt`
`# mkdir ansible`

* Playbook作成
`# vi /opt/ansible/http_restart.yml`
下記内容のファイルを作成します。

```
---
- hosts: localhost
  tasks:
   - name: restart httpd
     systemd: name=httpd state=restarted
```

# 2. Zabbix リモートコマンド実行の準備
* Zabbixエージェントの設定変更
/etc/zabbix/zabbix_agentd.confに下記一行を足します。
`EnableRemoteCommands=1`

* Zabbixエージェントの再起動
`# systemctl restart zabbix-agent`

* zabbixユーザーに/bin/ansible-playbookのsudo権限付与
visudoコマンドで/etc/sudoersに下記設定を追加します。
`zabbix  ALL=(ALL)       NOPASSWD: /bin/ansible-playbook`

# 3. Zabbixの設定(GUI)
今回はメモリのAvailableが1024Mより少なくなった時にhttpdを再起動するようにします。
テンプレート「Template OS Linux」に含まれているアイテム「Available memory」を利用します。
テンプレート「Template OS Linux」をlocalhostに適用します。

* トリガー作成
下記のように設定して、トリガーを作成します。
| 名前 | [httpd_restart] Lack of available memory on server {HOST.NAME} |
| 深刻度 | 重度の障害 |
| 条件式 | {ホスト名:vm.memory.size[available].last(0)}<1024M |

* アクション作成
下記のように設定して、アクションを作成します。

■アクション
| 名前 | httpd_restart |
| 実行条件 | トリガー名 含む [httpd_restart] |
![アクション_アクション.png](https://qiita-image-store.s3.amazonaws.com/0/369887/91da03fb-389c-b174-3c69-db9dd06c68a8.png)


■実行内容
| 実行内容 | 1 現在のホストでリモートコマンドを実行 すぐに 標準 |

■実行内容の詳細
| 実行内容のタイプ | リモートコマンド |
| ターゲットリスト | 現在のホスト |
| タイプ | カスタムスクリプト |
| 次で実行 | Zabbixエージェント |
| コマンド | sudo /bin/ansible-playbook -i localhost, -c local /opt/ansible/http_restart.yml |

![アクション_実行内容.png](https://qiita-image-store.s3.amazonaws.com/0/369887/73a030a8-9af4-bc18-b0e4-be216cec88a0.png)


# 4. テスト
アラート状態となるようにトリガーを下記のように変更してテストをしてみます。
{ホスト名:vm.memory.size[available].last(0)}<1024M
↓
{ホスト名:vm.memory.size[available].last(0)}<2048M

↓16:38にアラート状態となり、httpdが再起動されているのが分かります。
![test_qiita.png](https://qiita-image-store.s3.amazonaws.com/0/369887/f18feceb-ea07-4f43-fd0d-539d03d0ae85.png)

```
[root@hoge ~]# date;ps auxww | grep http[d]
2019年  3月 12日 火曜日 16:37:41 JST
apache    1358  0.0  0.9 541648 20604 ?        S    04:00   0:04 /usr/sbin/httpd -DFOREGROUND
apache    1360  0.0  0.9 541912 20852 ?        S    04:00   0:03 /usr/sbin/httpd -DFOREGROUND
apache    1362  0.0  0.9 541872 20844 ?        S    04:00   0:04 /usr/sbin/httpd -DFOREGROUND
apache    1365  0.0  0.9 541872 20756 ?        S    04:00   0:04 /usr/sbin/httpd -DFOREGROUND
apache    1409  0.0  0.9 541872 20800 ?        S    04:03   0:04 /usr/sbin/httpd -DFOREGROUND
apache    9229  0.0  0.9 541356 20096 ?        S    13:37   0:04 /usr/sbin/httpd -DFOREGROUND
apache    9231  0.0  0.9 541972 20288 ?        S    13:37   0:04 /usr/sbin/httpd -DFOREGROUND
apache    9233  0.0  0.9 541504 20276 ?        S    13:37   0:04 /usr/sbin/httpd -DFOREGROUND
apache    9235  0.0  0.9 541868 20596 ?        S    13:37   0:03 /usr/sbin/httpd -DFOREGROUND
apache   11510  0.0  0.9 541084 19856 ?        S    16:10   0:01 /usr/sbin/httpd -DFOREGROUND
root     21885  0.0  0.8 430908 17244 ?        Ss    3月11   0:12 /usr/sbin/httpd -DFOREGROUND
[root@hoge ~]#
[root@hoge ~]#
[root@hoge ~]# date;ps auxww | grep http[d]
2019年  3月 12日 火曜日 16:44:27 JST
root     12237  0.0  0.7 430888 16676 ?        Ss   16:38   0:00 /usr/sbin/httpd -DFOREGROUND
apache   12238  0.1  0.8 540812 18468 ?        S    16:38   0:00 /usr/sbin/httpd -DFOREGROUND
apache   12239  0.1  0.9 540820 18892 ?        S    16:38   0:00 /usr/sbin/httpd -DFOREGROUND
apache   12240  0.4  1.0 544692 23028 ?        S    16:38   0:01 /usr/sbin/httpd -DFOREGROUND
apache   12241  0.1  0.8 540820 18480 ?        S    16:38   0:00 /usr/sbin/httpd -DFOREGROUND
apache   12242  0.1  0.8 540820 18480 ?        S    16:38   0:00 /usr/sbin/httpd -DFOREGROUND
apache   12252  0.0  0.8 540836 18548 ?        S    16:38   0:00 /usr/sbin/httpd -DFOREGROUND
[root@hoge ~]#
```