【メモ】ZabbixでWindows Serverを監視する（ActiveCheck in Private Subnet）

何番煎じか分かりませんが、Monitoring Windows Server in Private Subnet by Zabbixな作業メモです。

あくまでも設定の一例です。

検証はAWS上で行いました。

# サーバの構築(ubuntuの場合)

サーバは、「Ubuntu Server 16.04 LTS (HVM), SSD Volume Type」のAMIを利用しました。

Zabbixサーバは、パッケージを利用してインストールしていきます。

バージョンは、「Zabbix 3.0 LTS」を利用します。

サーバは、パブリックセグメントに配置します。


## リポジトリのインストール

まずは、リポジトリをインストールします。

[1 Repository installation](https://www.zabbix.com/documentation/3.0/manual/installation/install_from_packages/repository_installation)


今回は「zabbix-release_3.0-1+xenial_all.deb」を利用しました。

[Index of /zabbix/3.0/ubuntu/pool/main/z/zabbix-release](http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/)

```bash:command
wget http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-2+xenial_all.deb
sudo dpkg -i zabbix-release_3.0-2+xenial_all.deb
sudo apt-get update
```


## サーバのインストール（MySQLを使う場合）

今回はデータベースにMySQLを利用します。また、スタンドアロン構成（ZabbixサーバとMySQLサーバは同居）とします。

[2 Server installation with MySQL database](https://www.zabbix.com/documentation/3.0/manual/installation/install_from_packages/server_installation_with_mysql)


まず、必要なパッケージをインストールします。

~~この際、MySQLのrootパスワードの設定を要求されます。~~

```bash:command
sudo apt-get install zabbix-server-mysql zabbix-frontend-php
```

これだけだとZabbixの初期セットアップウィザード（？）でエラーが出るので、以下のパッケージを追加でインストールします。

```bash:command
sudo apt-get install php-bcmath php-mbstring php-xmlwriter php-xmlreader
```

MySQLの初期設定を行います。

```bash:command
sudo mysql -uroot
```

```mysql:command(MySQL)
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by '<new password for zabbix user on zabbix database>';
quit;
```

スキーマの登録を行います。

<new password for zabbix user on zabbix database>を入力する必要があります。

```bash:command
zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p zabbix
```

Zabbixに対して、DBへの接続設定を行います。

```bash:command
sudo vi /etc/zabbix/zabbix_server.conf
```

```
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<new password for zabbix user on zabbix database>
```

プロントエンドサーバのタイムゾーンを修正します。

（コメントアウトされているので、ちゃんと外しましょう）

```bash:command
sudo vi /etc/apache2/conf-enabled/zabbix.conf
```

```
php_value date.timezone Asia/Tokyo
```

Webインタフェースで日本語が利用できるように、OSにロケールを追加します。

```bash:command
sudo locale-gen ja_JP.UTF-8
```

Zabbixのプロセスを起動します。

```bash:command
sudo service zabbix-server start
```

必要に応じて、フロントエンドサーバの再起動を行います。

```bash:command
sudo service apache2 restart
```

こちらも必要に応じて、サービスの自動起動設定を行います。

```bash:command
sudo systemctl enable zabbix-server.service
```

```bash:command
systemctl is-enabled zabbix-server.service
```

参考情報
[【新旧対応】Linuxでの自動起動の設定方法を解説](http://eng-entrance.com/linux_startup)


# 監視対象の設定（Windows Serverの場合）

Windows ServerにZabbixエージェントを導入します。

ここでは、Private Subnet上のWindows ServerでActive Checkを行うための設定を行います。

## インストール

コンパイル済みZabbixエージェントをダウンロードします。

サーバのバージョンと同じものを利用します。

[コンパイル済みZabbixエージェント](http://www.zabbix.com/jp/download)


ダウンロードしたファイルを解凍します。

今回は ```C:\zabbix_agent\``` に```\bin\win64\```に含まれる以下の3つのファイルを展開します。

- zabbix_agentd.exe
- zabbix_get.exe
- zabbix_sender.exe

併せて、```C:\zabbix_agent\``` に```\conf\```に含まれる以下のファイルを展開します。

- zabbix_agentd.win.conf

展開した後 ```zabbix_agentd.conf```にリネームします。


``` zabbix_agentd.conf ``` に対して、以下の設定を修正します。

```
Hostname=（分かりやすいホスト名を指定）
HostnameItem=system.hostname
ServerActive=ZabbixサーバのIPアドレス or ホスト名:ポート番号（デフォルトでは10051）
HostMetadata=自動登録の判定として定義している名称（10051ポートへのアクセスを制限していない場合、予期しないホストの登録を防ぐために複雑な文字列を設定した方がいいかも）
```

HostMetadataは、アクションで自動登録を行うために利用します。

以下の要素はコメントアウトします。

```
# Hostname
```

Zabbixエージェントをインストールします。

```bat:command
cd C:\zabbix_agent\
zabbix_agentd.exe --config C:\zabbix_agent\zabbix_agentd.conf --install
```

「管理ツール」>「サービス」に、Zabbix Agentが登録されていることを確認し、サービスを起動します。


## 設定

Zabbixサーバにログインします。

```
http://<Server IP Address>/zabbix/
```

### 初期設定ウィザード

初期設定ウィザードを実行します。

初期設定ウィザードが完了したら、Webインターフェースにログインします。初期ユーザの認証情報は、```Admin/zabbix```です。

### ホストグループ

ホストグループを作成します。ここでは、ホストの追加は行いません。

「設定」>「ホストグループ」

- グループ名

### テンプレート

テンプレートを作成します。

テンプレートは、デフォルトのテンプレートから複製することも可能です。

Windowsを監視したい場合、「Template OS Windows」などを活用できます。

ただし、アイテムのタイプが「Zabbixエージェント」（Passiveチェック）になっているため、テンプレートを複製してからテンプレートを作成する場合にはタイプの変更を行います。

この際、テンプレートとリンクが設定されていると変更できないため、リンクは削除します。


#### アイテム

テンプレートにアイテムを追加することも可能です。

例えば、IISのサービスを監視したい場合には以下のようなアイテムを作成します。

- タイプ
    - Zabbixエージェント（アクティブ）
- キー
    - service.info[World Wide Web Publishing Service]
- データ型
    - 数値（整数）
- データの形式
    - 10進数
- 値のマッピングの使用
    - Windows Service State

#### トリガー

検知したい障害をトリガーとして定義します。

- 条件式
    - {(テンプレート名):service.info[World Wide Web Publishing Service].last()}<>0
- 深刻度
    - 致命的な障害


### アクション（自動登録）

イベントソースが自動登録のアクションを追加します。

「設定」>「アクション」

- 実行条件
    - ホストメタデータ
    - 含まれる
    - （Agentの設定ファイルで「HostMetadata」に設定した文字列）
- 事項内容
    - ホストを追加
    - ホストグループに追加
    - テンプレートとリンク

この設定を行えば、サーバにホストが自動登録されるはずです。


### メディア

障害を通知する方法を設定します。

Email等を利用できます。

「管理」>「メディアタイプ」


メールの送信サーバとしてAmazon SESを利用する場合は、以下の手順を参考に新たなメディアタイプを定義します。

[日本語アラートメールの送信方法](http://www.zabbix.jp/node/1441)

[フリーで使える統合監視の鬼、Zabbixでナウい監視をする〜Amazon SESでアラートを送る〜](http://tech-sketch.jp/2014/06/%E3%83%95%E3%83%AA%E3%83%BC%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E7%B5%B1%E5%90%88%E7%9B%A3%E8%A6%96%E3%81%AE%E9%AC%BC%E3%80%81zabbix%E3%81%A7%E3%83%8A%E3%82%A6%E3%81%84%E7%9B%A3%E8%A6%96%E3%82%92-4.html)

[5 Custom alertscripts](https://www.zabbix.com/documentation/3.0/manual/config/notifications/media/script)

### アクション（トリガー）

イベントソースがトリガーのアクションを追加し、障害の発生を通知します。

「設定」>「アクション」

実行条件（障害の深刻度やメンテナンス期間かどうか）および実行内容（メッセージの送信など）を設定します。


### ユーザ

通知先（メールアドレス）や有効な時間帯などを指定します。

「管理」 > 「ユーザー」


## 監視対象の設定（AWSリソースの監視）

AWS上のサーバを監視したい場合、スクリプトを利用した監視が可能です。

以下のようなサンプルテンプレートが提供されています。

[tech-sketch/zabbix_aws_template](https://github.com/tech-sketch/zabbix_aws_template)

[[OpsJAWS: やってみようシリーズ] CloudWatch × Zabbix連携による統合監視実現](http://aws.typepad.com/aws_partner_sa/2016/06/opsjaws-try-ops-with-zabbix-1.html)

AWSのAPIへアクセスするためのアクセスキーとシークレットは、監視対象のリソースと同じAWSアカウント上にZabbixサーバが存在しなおかつインスタンスプロファイルが適切に設定されていれば、省略することが可能です。

動作環境によっては、スクリプトの修正も必要です。

[Python script in /externalscripts not found](https://www.zabbix.com/forum/showthread.php?t=56490)