zabbixとpyvmomiでネットワーク切断の自動化をしてみる

pyvmomiで作成したスクリプトをZabbixで実行して自動化するサンプルを作ってみました。
ここでは、監視対象ホストから取得した値でアラートが発生したらZabbixサーバ側でスクリプトを実行して監視対象ホスト(VM)のvNICを自動で切断してみます。

# 検証方針

* Zabbixサーバ、監視クライアント共にCentOSを使用する
* Zabbixサーバに監視クライアントの登録、トリガー設定、アクション設定をする
* 監視対象ホストからzabbix_senderで値を飛ばしてトリガーを発生させる
* vCenterからVMのvNICが切断されたことを確認する

# 環境

| 項目    | 内容                                             |
|:--------|:-------------------------------------------------|
| OS      | CentOS 7.3                                       |
| Zabbix  | 3.2.7-1                                          |
| python  | python34                                         |
| pyvmomi | 6.5.0.2017.5.post1                               |
| vCenter | バージョン 6.5.0 ビルド 4602587                  |
| ホスト  | Zabbixサーバ : ZBX_SRV、監視対象ホスト : ZBX_AGE |

# vNIC切断ツール

## ソースコード

[https://gist.github.com/sky-joker/0c9e689d982c9871d7967661c596ecbd](https://gist.github.com/sky-joker/0c9e689d982c9871d7967661c596ecbd)

## 使い方

(1) 使い方は以下の通りです。

```bash
[root@localhost ~]# ./vm_disconnect_nw.py vCenterのIP ログインユーザー名 パスワード 対象VM名 対象vNIC名
[root@localhost ~]# ./vm_disconnect_nw.py xxx.xxx.xxx.xxx administrator@vsphere.local password ZBX_AGE 'Netwok adapter 1'
```

# 検証

## ホスト登録

(1) ホスト情報は以下の通りです。

![](https://sky-joker.tech/wp-content/uploads/2017/07/c9e7bad0be0d5c6f8e54ca25e6344bc6.png)

(2) 以下のマクロを登録します。

| 項目          | 内容                                      |
|:--------------|:------------------------------------------|
| {$VCENTER_IP} | vCenterのIP                               |
| {$USERNAME}   | vCenterへログインするユーザー名           |
| {$PASSWORD}   | vCenterへログインするユーザーのパスワード |

![](https://sky-joker.tech/wp-content/uploads/2017/07/b0b615a9e9c4aa8e345a5f49b7294c39.png)

(3) アイテムは以下の様に登録してあります。

![](https://sky-joker.tech/wp-content/uploads/2017/07/40d9b6c6e626f7c24be1469ab70a7e9b.png)

(4) トリガーは以下の様に登録してあります。

![](https://sky-joker.tech/wp-content/uploads/2017/07/b714f658a7ead78e11d74d6045e1b323.png)

## アクション設定

(1) アクションは以下の様に登録してあります。

![](https://sky-joker.tech/wp-content/uploads/2017/07/71e1c8a196e66ccbcba25da3620ff504.png)

(2) 実行内容は以下の様に登録してあります。

![](https://sky-joker.tech/wp-content/uploads/2017/07/f6300c22ab423fcc4e12c8c3866e9ce0.png)

```
/usr/lib/zabbix/externalscripts/vm_disconnect_nw.py {$VCENTER_IP} {$USERNAME} {$PASSWORD} {HOST.HOST} 'Network adapter 1'
```

## vNIC切断ツールのインストール

(1) ツールをダウンロードします。

```bash
[root@ZBX_SRV ~]# git clone https://gist.github.com/0c9e689d982c9871d7967661c596ecbd.git
Cloning into '0c9e689d982c9871d7967661c596ecbd'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
```

(2) zabbixのスクリプトディレクトリへコピーします。

```bash
[root@ZBX_SRV ~]# cp 0c9e689d982c9871d7967661c596ecbd/vm_disconnect_nw.py /usr/lib/zabbix/externalscripts/
[root@ZBX_SRV ~]# chmod +x /usr/lib/zabbix/externalscripts/vm_disconnect_nw.py
[root@ZBX_SRV ~]# chown zabbix.zabbix /usr/lib/zabbix/externalscripts/vm_disconnect_nw.py
[root@ZBX_SRV ~]# chmod 750 /usr/lib/zabbix/externalscripts/vm_disconnect_nw.py
```

## 検証実行

(1) ZBX_AGEのvNIC状態が接続中のことを確認します。

![](https://sky-joker.tech/wp-content/uploads/2017/07/87b689bccaf94763a956590e14623641.png)

(2) ZBX_AGEから「1」を送信します。

```bash
[root@ZBX_AGE ~]# zabbix_sender -z zabbixサーバIP -s 'ZBX_AGE' -k test.item -o 1
```

(3) タスクが実行されZBX_AGEのvNICが切断されたことを確認します。

![](https://sky-joker.tech/wp-content/uploads/2017/07/b22fca2733bd1fc61418db9ca5db3d27.png)

![](https://sky-joker.tech/wp-content/uploads/2017/07/ab5151f9a1109fbb0372f14d3b2e4403.png)

vNICが切断されました :-)
このような感じでpyvmomi + Zabbixを組み合わせることでVMwareの自動化が出来たりします。
自動化がきちんとハマるととても便利ですね！