Zabbix 3.2 on Amazon Linux 体験記

## 前提
インフラや運用の知識が乏しい人間が勉強メモとして書いている記事となります。セキュリティーや可用性など実運用に際して著しい欠陥がある場合がありますので、適用する際はご注意ください。

## 概要
- Amazon LinuxにZabbixサーバーとエージェントをソースコードからインストール
- WEBページから動作状況のモニタリング

## Zabbix とは
![logo.png](https://qiita-image-store.s3.amazonaws.com/0/28193/15be7d91-3bbf-65c4-ade1-5553e183edc0.png)

Zabbix は、サーバーモニタリング用GPLv2ライセンスのOSSツールとなります。
Zabbix サーバーがエージェントサーバー（運用しているWEBサーバーなど）から、動作状況を逐次収集し、WEBページからその状況を見ることができます。
テンプレートを組み合わせて監視対象のパラメーターを対象のサーバーに応じて簡単に変更することができます。
Zabbix 3.2 のドキュメントは[こちら](https://www.zabbix.com/documentation/3.2/start)。

## 環境
- Zabbix 3.2
- Amazon Linux 2016.09
- PHP 5.6
- Apache 2.4
- Mysql 5.5

## インストール
### 依存モジュールのインストール
まず、依存モジュールをインストールします。[Requirements](https://www.zabbix.com/documentation/3.2/manual/installation/requirements)によると、PHPは5.4以上が必須、Apacheは1.3.12以上でよいようですがPHPに合わせて2.4を今回は使用します。
データベースはだいたいなんでも使用できますが、今回は Mysql 5.5 を使用します。

```bash
yum install mysql-server httpd24 php56 php56-gd php56-mbstring php56-mysqlnd php56-bcmath
```

### 本体のインストール
ドキュメントの[パッケージからインストール](https://www.zabbix.com/documentation/3.2/manual/installation/install_from_packages/server_installation_with_mysql)を参考に下記コマンドでインストールを行います。

```bash
rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-release-3.2-1.el6.noarch.rpm
yum install zabbix-server-mysql zabbix-web-mysql
```

ところが、下記のエラーが出て全くインストールが進みません。

```bash
Error: Package: zabbix-server-mysql-3.2.6-1.el7.x86_64 (zabbix)
           Requires: libnetsnmp.so.31()(64bit)
Error: Package: iksemel-1.4-2.el7.centos.x86_64 (zabbix-non-supported)
           Requires: libgnutls.so.28(GNUTLS_1_4)(64bit)
Error: Package: zabbix-server-mysql-3.2.6-1.el7.x86_64 (zabbix)
           Requires: systemd
Error: Package: iksemel-1.4-2.el7.centos.x86_64 (zabbix-non-supported)
           Requires: libgnutls.so.28()(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
```

ざっくり調べてみた感じですと、Amazon Linuxにはsystemdがインストールできないようで、諦めて今回はソースコードからのインストールを行うことにしました。

ドキュメントの[ソースコードからのインストール](https://www.zabbix.com/documentation/3.2/manual/installation/install)を参考に、ソースコードの取得、ビルド用のモジュールのインストール、ビルドを行います。

```bash
wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.2.6/zabbix-3.2.6.tar.gz
tar -zxvf zabbix-3.2.6.tar.gz

# ビルド用モジュールのインストール
sudo yum install gcc mysql56-devel libxml2-devel net-snmp-devel libcurl-devel

# ビルド＆インストール
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
make install
```

上記のコマンドが成功すると、```/usr/local/etc/zabbix_server.conf```に設定ファイルが作られ、```zabbix_server```コマンドが実行できるようになっているはずです。

とりあえず、ドキュメントに従って```zabbix_server ```と```zabbix_agentd ```でZabbixサーバーとエージェントプロセスを起動します。

### WEBページの表示とZabbixの設定
ZabbixではWEBページ上からシステム設定の確認や、Zabbixの設定を行うことができます。ページを表示するには、環境の```htdocs```フォルダに```frontends/php```をコピーする必要があります。
RHEL系だと下記のような処理になります。

```bash
mkdir /var/www/html/zabbix
cd frontends/php
cp -a . /var/www/html/zabbix
```

ここまでくれば、```http://<server_ip_or_name>/zabbix```にアクセスすると、Zabbixのウェルカムページが表示されるはずです。

「Next Step」に進むと、PHP の設定確認ページが表示されます。Failになっている項目があると次の処理に進めませんので、要求されている内容に設定を変更する必要があります。

PHPの設定が終わると、次はデータベースの設定を行う必要があります。データベースは自動生成をしてくれるわけではなく、ユーザーやデータベースの作成だけでなく、テーブルの作成まで行う必要があります。
Zabbix用のユーザーとデータベースを作成後、Zabbixソースフォルダ直下の以下のファイルを順番に適用しテーブルの作成までを行います。

```bash
database/mysql/schema.sql
database/mysql/images.sql
database/mysql/data.sql
```

データベースの設定後、Zabbixのサーバーの設定（今回は同じサーバー内なのでそのまま）、設定ファイルの保存（特に何も操作していない状態では書き込めない旨のエラーが出るので、適当に指定のパスに保存してください）を行うと設定は完了です！

ログインページが表示され、ユーザー名に「Admin」パスワードに「zabbix」を入力すると、やっとコンソールを確認できるようになります！パスワードは忘れないうちにさっさと変えてしまいましょう。

### 設定ファイルの変更
うまいことWEBページが表示できたとしても、Zabbixサーバーおよびクライアントが正常に動作しているとは限りません。例えば、下記の正常動作している状態とは異なり、Zabbix サーバーの起動状態が「No」、ホストステータスに何も表示されない場合があります。

<img width="528" alt="スクリーンショット 2017-07-16 10.48.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/28193/64270d28-d4a4-19a6-a753-b0cb13a2b4a2.png">

<img width="533" alt="スクリーンショット 2017-07-16 10.51.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/28193/27f6ac25-a81b-7270-1391-e94a0244d550.png">

これは、```/usr/local/etc/zabbix_server.conf```および```/usr/local/etc/zabbix_agentd.conf```設定と、上記のWEBコンソール上での設定が食い違っている場合に発生します。
それぞれ主なパラメーターを以下のように変更する必要があります。場合によってはさらにパラメーターを変更する必要があることもあるかと思います。

```bash:/usr/local/etc/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=設定したパスワード
```

```bash:/usr/local/etc/zabbix_agentd.conf
Server=127.0.0.1  # 今回はlocalhostのみ
Hostname=Zabbix server  # WEBコンソールの「設定」→「ホスト」に設定されている一覧から「有効」になっているホスト名を設定
```

## 監視を行う
### 監視データの閲覧
監視設定まで完了すると、あとはZabbixがデータの収集を自動で行ってくれています。
「監視データ」→「最新データ」から登録したホストの最新のデータを下記のような感じで確認することができます。

<img width="1214" alt="スクリーンショット 2017-07-16 11.13.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/28193/b7148922-e8ef-7175-0066-7271764724fa.png">

「監視データ」→「グラフ」では過去の状態を含めて、グラフで各ホストのシステム状態を確認することができます。

例えば、Linux OSのテンプレートを設定したホストでは、CPU使用率やメモリ使用率など一般的な指標を簡単に確認することができます。

<img width="1216" alt="スクリーンショット 2017-07-16 11.17.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/28193/aed9254b-6d3a-63ca-e42e-1a5ab50b322f.png">

### WEBページのパフォーマンスの測定
「設定」→「ホスト」→「WEBシナリオ」からWEBシナリオの作成を行うことができます。「シナリオ」で更新間隔や回数・プロキシの設定、「ステップ」でアクセスURLや変数・ステータスコードを設定することで、該当URLのパフォーマンスを確認することができます。

「監視データ」→「Web」から取得したデータを確認することができます。以下は、一時的にApacheを停止させた際のログになります。サーバーが止まっていた間ログが欠けていることを確認することができます。

<img width="1213" alt="スクリーンショット 2017-07-16 11.57.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/28193/882a5ccc-0723-83eb-8397-5fd947b5e5f5.png">

### トリガーの設定
「設定」→「ホスト」→「トリガー」からトリガーの作成を行うことができます。深刻度と「追加」から条件式をUIから設定し、有効にすることでトリガーを設定することができます。

トリガーを設定しておくと、WEBのトップページから障害状況を確認することができます。また、「監視データ」→「トリガー」より障害発生履歴を確認することができます。

<img width="1214" alt="スクリーンショット 2017-07-16 12.57.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/28193/31c720dc-6ca7-0c5d-e2e1-9aa5417923e6.png">

## おわりに
今回は、ZabbixのインストールとWEBコンソールから状態を確認してみました。数あるサーバーの状態監視を一箇所に集約できるのは当たり前ですが便利だなと感じました。
アラートをメールで送ることも可能ですので運用時も重宝しそうです。
次の機会にどんなデータが取得できるか、トリガーをどう使っていくのが良さそうかを調べてみたいと思います。