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] |

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

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

4. テスト

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

{ホスト名:vm.memory.size[available].last(0)}<2048M

↓16:38にアラート状態となり、httpdが再起動されているのが分かります。

[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 ~]#