Check! はじめての Zabbix インストール on Debian x Amazon RDS

こんばんは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

Prologue - はじめに
====
Amazon RDS を使ったことがなかったので、使ってみます！
最近業務で使った [Zabbix](http://www.zabbix.com/ "Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution") の勉強環境を作ることも兼ねて、以下の構成で挑みました。

全体構成
====
- Zabbix
    - [Amazon EC2](http://aws.amazon.com/jp/ec2/ "Amazon EC2 (仮想クラウドサーバー) | アマゾン ウェブ サービス（AWS）")
    - OS: Debian wheezy (Community AMIs から利用)
- Zabbix用データベース
    - [Amazon RDS](http://aws.amazon.com/jp/rds/ "Amazon RDS（クラウドでのリレーショナルデータベースサービス） | アマゾン ウェブ サービス（AWS）")
    - インスタンスクラス: db.t2.micro
    - 割当てストレージ: 5GB
    - DBエンジン: mysql
    - DBエンジンバージョン: 5.6.22

流れ
====
1. データベースの準備
    1. Subnet Group を作成
    2. RDS DBインスタンスで日本語(UTF-8)を扱う準備
    3. Amazon RDS DBインスタンスを作成
2. Zabbixインストール
    1. Amazon EC2 インスタンスを Debian で作成
    2. Zabbix のインストール
    3. Zabbix の初期設定 (Webインタフェース)

1. データベースの準備
====
1.1. Subnet Group を作成
----

Amazon RDS DBインスタンスは、 **2つ以上の Availability Zone (以下、AZ) からなる Subnet Group を必要** とします。DBインスタンス作成の過程で自動で割り当てることもできますが、割り当てるVPCの中で AZが1つしか使用してない場合、Subnet Group を自動で割り当てることができないようです。（私はエラーが出ました）
ですので、先に作ってしまう魂胆です。

![20150428_zabbix-rds_subnet-group_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/cf9f5aaf-0416-a986-035a-d63df9298b23.png)
![20150428_zabbix-rds_subnet-group_002.png](https://qiita-image-store.s3.amazonaws.com/0/3812/0e283339-05af-8f03-189b-134f66758869.png)

Subnet Group は、EC2を扱うときには出てこない概念なので、良い勉強になりました。

1.2. RDS DBインスタンスで日本語(UTF-8)を扱う準備
----
<ins date="2015-04-29">2015/04/29 追記</ins>
しばらく見てるうちに、Webインタフェースは日本化できてるが保存データがどうも文字化けしてることにき気づきました…orz

調べたところ、DBインスタンス作成時に設定しなければならないようで、以下URLが参考になると思います。

- <a href="http://dotnsf.blog.jp/archives/2211314.html">Amazon RDS の MySQL で UTF-8 のデータベースを作る : まだプログラマーですが何か？</a>

1.3. Amazon RDS DBインスタンスを作成
----
それでは、AWSコンソールのRDSサービスページで、DBインスタンスの作成をします。

![20150428_zabbix-rds_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/cfa1cc5a-8810-afca-5162-64d8adc0c948.png)
![20150428_zabbix-rds_002.png](https://qiita-image-store.s3.amazonaws.com/0/3812/beff8d87-5f7a-c37c-5524-5fb433aa477a.png)
![20150428_zabbix-rds_003.png](https://qiita-image-store.s3.amazonaws.com/0/3812/d8b395c2-b341-9566-0e4f-89216276d64c.png)

データベースの容量については、こちらの書籍 [Zabbix統合監視実践入門](http://amzn.to/1DRS6sR "寺島広大さんの 改訂版 Zabbix統合監視実践入門──障害通知、傾向分析、可視化による省力運用") によると、この本で実践している範囲なら容量は 5GBでよいそうなので、そうしました。

![20150428_zabbix-rds_004.png](https://qiita-image-store.s3.amazonaws.com/0/3812/33df4379-2dc3-4ad3-f4b4-79f4b251653f.png)

セキュリティグループについては、DBインスタンスのmysql接続用ポート 3306 (デフォルトの場合) に対して、Zabbixをインストールするインスタンスがアクセスできるようにします。後からでも設定できます。

こうしてできたDBインスタンスはこのようになりました。
![20150428_zabbix-rds_005.png](https://qiita-image-store.s3.amazonaws.com/0/3812/d5946c8e-434f-d4e8-db9c-9e2e91a7ec4f.png)


2. Zabbixインストール
====

2.1. Amazon EC2 インスタンスを Debian で作成
----
Amazon EC2のインスタンス作成については割愛します。

2.2. Zabbix のインストール
----
## タイムゾーンをJSTに変更

```bash
cp /etc/localtime /etc/localtime.orig
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
date
```
`date` の結果が、 `JST` になっていれば変更完了です。

## 言語を ja_JP.UTF-8 に変更
[How to&#x2F;install locale](http://www.zabbix.org/wiki/How_to/install_locale "How to&#x2F;install locale - Zabbix.org") を参考に、Zabbix のWebインタフェースで日本語を利用できるように、言語を調整します。

```bash
dpkg-reconfigure locales
```
上記コマンドを打つと言語の選択画面が表示されます。 `ja_JP.UTF-8 UTF-8` にチェックを付けて、OKしてください。
![20150428_gpkg-reconfigure-locales_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/8a921313-99d7-272b-a898-83c0c17549cd.png)

すでにZabbix稼働中でも、上記を行い、 `service apache2 restart` すれば反映されます。


## Zabbixのインストール
[公式ドキュメント のインストレーション](https://www.zabbix.com/documentation/2.4/manual/installation/install_from_packages "3 Installation from packages [Zabbix Documentation 2.4]")を参考にZabbixインストールします。

Debian で使うリポジトリは以下でリンクを得ました。

http://repo.zabbix.com/zabbix/2.4/debian/pool/main/z/zabbix-release/
zabbix-release_2.4-1+wheezy_all.deb (2015/04/28時点)

```bash
# リポジトリを登録する
wget http://repo.zabbix.com/zabbix/2.4/debian/pool/main/z/zabbix-release/zabbix-release_2.4-1+wheezy_all.deb
dpkg -i zabbix-release_2.4-1+wheezy_all.deb
apt-get update
```

```bash
# mysql版zabbix-server とフロントエンドをインストールする
apt-get install zabbix-server-mysql zabbix-frontend-php
```
<del date="2015-05-01">このインストールの過程で、ローカルのmysqlに設定するような画面が現れますが、うまくやり過ごします。 後のWebインタフェースでの初期設定で、Amazon RDS DBインスタンスへの接続を設定しますので、ご安心を～。</del>

### zabbix_serve.conf の DBHostを修正
<ins date="2015-05-01">以下、2015/05/01追記</ins>
このインストールの過程で、ローカルのmysqlに設定するような画面が現れ、私はそのまま、localhost で設定してしまいました。

なので、 `zabbix_server.conf` の `DBHost` を修正しなければなりません。

```bash
vi /etc/zabbix/zabbix_server.conf
```

```:/etc/zabbix/zabbix_server.conf
...
DBHost=<DBインスタンスのendpint>
...
```
DBインスタンスのエンドポイントは、 *xxx.xxxxxx.ap-northeast-1.rds.amazonaws.com* というような文字列で、AWSマネジメントコンソールのDBインスタンスの画面に記載があります。

設定が終わったら次へ進みます。

2.3. Zabbix の初期設定 (Webインタフェース)
----
Zabbix の初期設定は、基本的には、Webインタフェースから行います。つまづいた点だけ対処を上げておきます。

さっ、 [http://zabbixサーバーのアドレス/zabbix](http://<zabbixサーバーのアドレス>/zabbix) にアクセスして初期設定を進めましょう！

### PHP設定
インストールの最初にPHPの設定のチェックがあり、デフォルトのままではタイムゾーンが `Fail` でした。そこで、一度ターミナルに戻り、以下のように設定ファイルを更新しました。

```bash
vi /etc/apache2/conf.d/zabbix 
```

```:/etc/apache2/conf.d/zabbix
    # php_value date.timezone Europe/Riga
    php_value date.timezone Asia/Tokyo
```

### データベース設定
<ins date="2015-05-01">2015/05/01追記</ins>
データベース設定では、Amazon RDS DBインスタンスを設定します。エンドポイントは上記画像のようにAWSマネジメントコンソールに記載されています。

その後 `Test Connection` をしてみたところ、以下のエラーが発生してしまいました。

> The frontend does not match Zabbix database.

パスワードなどを間違えた訳ではなく、どうやら必要なデータベースの初期化ができていないようです。
探してみると、[CentOSでも同じエラーの対処](http://d.hatena.ne.jp/pospome/20140116/1389849973 "【CentOS】The frontend does not match Zabbix database. - pospomeのプログラミング日記") をされている情報を見つけ参考にし、以下の対処を行いました。

```bash
# zabbix に関連した sql ファイルを探してみます
find / | grep "\.sql$" | grep zabbix
/usr/share/zabbix-server-mysql/images.sql
/usr/share/zabbix-server-mysql/schema.sql
/usr/share/zabbix-server-mysql/data.sql

# 見つかった schema.sql / images.sql / data.sql を実行します
mysql -h <DBインスタンスのendpoint> -P 3306 -u zabbix -p zabbix < /usr/share/zabbix-server-mysql/schema.sql 
mysql -h <DBインスタンスのendpoint> -P 3306 -u zabbix -p zabbix < /usr/share/zabbix-server-mysql/images.sql 
mysql -h <DBインスタンスのendpoint> -P 3306 -u zabbix -p zabbix < /usr/share/zabbix-server-mysql/data.sql 
```
これは、Zabbixに必要なデータベース構成を、上記で作成した Amazon RDS DBインスタンスのzabbixデータベースへ流してます。

この後、インストール作業は無事に終え、Zabbixのダッシュボードまでたどり着くことができました！

Epilogue - おわりに
====
今日はここまでです。
実は、当初は Debian ではなく Amazon Linux で環境作り始めたんですが、インストールの時点で依存関係でエラーがあり、Amazon Linux で環境作る意義を見いだせなかったので、変えました。普段は CentOS を比較的良く使うのですが、勉強も兼ねて Debian で作ってみたら、思いのほかスムーズに環境を作ることができました。ちょっとびっくり！

近況
===================================================

Phalcon関連
---------------------------------------

- [爆速フレームワーク!! Phalcon PHP Framework](
http://qiita.com/dz_/items/55ae18f7fe3a873bace1 "爆速フレームワーク!! Phalcon PHP Framework")
- [Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会](http://qiita.com/dz_/items/974a90b32ba6a6e38182 "Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会")
- [Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！](http://qiita.com/dz_/items/e70d61487224b854b971 "Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！")

fluentd関連
---------------------------------------
- [Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)](http://qiita.com/dz_/items/960319ffffa0d7355f8c "Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)")
- [Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに](http://qiita.com/dz_/items/224607c84112ccafa2d6 "Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに") ← :new: :sparkles:

Amazon ECS関連
---------------------------------------

- [Check! Amazon EC2 Container Service で Docker を学びたい！(準備編)][my-amazon-ecs-docker-vol1]
- [Check! Amazon EC2 Container Service で Docker を学びたい！ (IAMポリシー編)][my-amazon-ecs-docker-vol2]

[my-amazon-ecs-docker-vol1]:http://qiita.com/dz_/items/625f55bc5de371d15caa "Check! Amazon EC2 Container Service で Docker を学びたい！(準備編)"
[my-amazon-ecs-docker-vol2]:http://qiita.com/dz_/items/44388a0908f8d18fe42d "Check! Amazon EC2 Container Service で Docker を学びたい！(IAMポリシー編)"

技術ブログ寄稿
-----------------------------------------

[cloudpack技術ブログ][cloudpack-blog]でも、AWS Lambda や 運用ツール Serf に関して記事を書いています。ご興味あれば読んでいただけると嬉しいです！

- <a href="http://blog.cloudpack.jp/author/oohira/" title="大平 かづみ の記事一覧 | cloudpack技術情報サイト"　target="_blank" rel="nofollow">大平 かづみ の記事一覧</a>


[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[cloudpack-blog]:http://blog.cloudpack.jp/ "cloudpack技術情報サイト"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"