AWSのRHEL環境とRDSでZabbixを構築

# 状況

現状使用しているZabbixサーバとZabbix用RDSを東京リージョンにリプレースする。
EC2とRDSを引っ越しするだけならAMIやスナップショットのコピーで済むが、
折角だからEC2, RDSをスペックアップする。

既存のZabbixサーバを構築した前任者の方はもういらっしゃらず、設定内容の詳細がありませんでした。
備忘録＋同じような事をしようとしている方の助けになればと思い投稿します。

※ **この記事では監視先サーバの zabbix agent や fluentd の設定には触れません**

# 作成する環境

* OS ： AWS Red Hat Enterprise Linux Server release 7.5 (Maipo)
* DB ： AWS RDS MySQL 5.6.40
* Zabbixサーバ：3.0 LTS

# EC2インスタンスの作成手順

##### yumのアップデート

```none:EC2
$ sudo yum update
$ sudo reboot
```

##### 言語設定

```none:EC2
$ sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime
$ sudo vi /etc/locale.conf
LANG=ja_JP.UTF-8

// サーバーを再起動
$ sudo reboot
```

##### インストールするZabbixのリポジトリを登録

```none:EC2
$ sudo yum install https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
$ sudo yum install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
```

##### 登録したリポジトリを有効化

```none:EC2
sudo yum-config-manager --enable rhui-REGION-rhel-server-optional
```

##### Zibbix関連のパッケージをインストール

```none:EC2
$ sudo yum install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent php-mbstring mysql mysql-devel mysql-server mysql-utilities zabbix-get
```

##### Zabbixサーバ上のMySQLの設定

```none:EC2
// MySQLサーバを起動
$ sudo systemctl enable mysqld
$ sudo systemctl start mysqld

// 自動生成されたパスワードを確認 (末尾に表示される文字列が自動生成されたパスワード)
$ cat /var/log/mysqld.log | grep 'password is generated'
2018-09-16T11:09:09.021670Z 1 [Note] A temporary password is generated for root@localhost: >s7%da.rdq5U

// ローカルのMySQLにログイン
$ mysql -uroot --password='>s7%da.rdq5U'
```
```none:Mysql
// 新規パスワードを登録
SET PASSWORD = 'Password@1';

// データベースを作成
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'Password@1';
flush privileges;
quit
```
```none:EC2
// Zabbix用のテーブル作成
$ zcat /usr/share/doc/zabbix-server-mysql-3.0.22/create.sql.gz | mysql -uroot --password='Password@1' zabbix
```

##### SELinuxの制限を解除

```none:EC2
$ sudo setsebool -P httpd_can_connect_zabbix on
$ sudo setsebool -P zabbix_can_network on
```

##### PHPのタイムゾーン設定

```none:EC2
$ sudo vi /etc/httpd/conf.d/zabbix.conf

// コメントアウトを外して値を東京に変更
php_value date.timezone Asia/Tokyo
```

##### yumのアップデートが掛からないようにリポジトリを無効化

```none:EC2
$ sudo vi /etc/yum.repos.d/zabbix.repo

[zabbix]
enabled=0
[zabbix-non-supported]
enabled=0
```

##### 各サービスの開始・自動起動デーモンを有効化

```none:EC2
// zabbix-server
$ sudo systemctl enable zabbix-server
$ sudo systemctl start zabbix-server

// zabbix-agent
$ sudo systemctl enable zabbix-agent
$ sudo systemctl start zabbix-agent

// httpd
$ sudo systemctl enable httpd
$ sudo systemctl start httpd
```

# 管理画面にアクセス

http://13.xxx.43.xxx/zabbix/
インスタンスのグローバルIPの末尾に「/zabbix」を追加しアクセスする
アクセスできない場合はセキュリティグループを確認してみましょう
<img width="865" alt="スクリーンショット 2018-09-16 20.31.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/227620/d88b33eb-3959-a328-e37b-33bbf656e1ba.png">
「Next Step」で次の画面へ
<img width="867" alt="スクリーンショット 2018-09-16 20.41.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/227620/478af8a9-eb15-f536-22d6-5caf4cf3757d.png">
全ての項目が「OK」になっている事を確認して「Next Step」で次の画面へ
<img width="866" alt="スクリーンショット 2018-09-16 20.47.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/227620/247b3a90-55c1-c47a-23d1-e21f51d27975.png">
ローカルDBに設定した下記の内容を入力し「Next Step」

| 項目 | 値 |
|:--|:--|
| Database host | localhost |
| Database port | 0 |
| Database name | zabbix |
| User | zabbix |
| Password | Password@1 |

<img width="867" alt="スクリーンショット 2018-09-16 20.50.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/227620/bd937f98-0145-e1ad-982d-6d8c7c84a059.png">
「Name」は管理画面上でのZabbixサーバの呼び方のため空白でもOK
<img width="869" alt="スクリーンショット 2018-09-16 20.52.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/227620/7d7de32c-b166-0c23-d91d-1af4600b4539.png">
最後に入力内容の確認画面が表示される
問題なければ「Next Step」
<img width="867" alt="スクリーンショット 2018-09-16 20.53.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/227620/364787d2-3403-b99a-0bba-105387ce3f82.png">
「Finish」でログイン画面に遷移する
<img width="841" alt="スクリーンショット 2018-09-16 21.00.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/227620/ebd3815f-a4c7-67fd-8ab5-59d4fccab35e.png">
初期Username：Admin
初期Password：zabbix

設定が完了するとZabbixサーバが参照するDBの情報を設定する /etc/zabbix/zabbix_server.conf が生成される

##### Zabbix管理画面ログイン後
下部に 「 **Zabbixサーバーが起動していません（画面のリフレッシュを行ってステータスを再確認してください）** 」と表示される場合
→ /etc/zabbix/web/zabbix.conf.php の$ZBX_SERVERの値が'localhost'になっている
→ IPアドレスで記載する必要がある
参考：https://www.codelab.jp/blog/?p=1149

# RDSを作成

| 項目 | 値 |
|:--|:--|
| インスタンス名 | zabbixrds |
| エンドポイント | zabbixrds.xxxxx.ap-northeast-1.rds.amazonaws.com |
| DB名 | zabbix |
| ユーザ名 | zabbix_master |
| PASS | PASSWORD |

##### EC2経由で新RDSへログインし初期設定

```none:EC2
// RDSのMySQLにログイン
$ mysql -h zabbixrds.xxxxx.ap-northeast-1.rds.amazonaws.com -P 3306 -u zabbix_master -p
```

```none:MySQL
// DB情報を登録
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix_master@localhost identified by 'PASSWORD';
flush privileges;
quit
```

##### 旧RDSからデータをエクスポートする

EC2経由で旧RDSのMySQLへログインし下記コマンドを実行

```none:EC2
// エクスポート
$ mysqldump -u 旧RDSのユーザ名 -p -h old_rds.xxxxx.ap-southeast-1.rds.amazonaws.com -P 3306 --single-transaction --routines zabbixdb > /tmp/dump.sql
```
##### 新RDSに上記のデータをインポート
EC2経由で実行

```none:EC2
// 新RDSのMySQLにログイン
$ mysql -u zabbix_master -p -h zabbixrds.xxxxx.ap-northeast-1.rds.amazonaws.com -P 3306 zabbix
```

```none:MySQL
// データをインポート
source /tmp/dump.sql
```

# 参照するDBをRDSへ変更

##### Zabbixサーバが参照するDBの設定

```none:EC2
$sudo vi /etc/zabbix/zabbix_server.conf

DBHost=zabbixrds.xxxxx.ap-northeast-1.rds.amazonaws.com
DBName=zabbix
DBUser=zabbix_master
DBPassword=PASSWORD
```

##### WEB(管理画面)が参照するDBの設定

```none:EC2
$ sudo vi /etc/zabbix/web/zabbix.conf.php

$DB['SERVER']   = 'zabbixrds.xxxxx.ap-northeast-1.rds.amazonaws.com';
$DB['PORT']     = '3306';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix_master';
$DB['PASSWORD'] = 'PASSWORD';
```

##### SELinuxを無効化する (無効化しないとRDSとの接続ができない)

```none:EC2
$ vi /etc/selinux/config
SELINUX=disabled

$ reboot
```

##### EC2のセキュリティグループにRDSからの接続を追加

| タイプ | プロトコル | ポート範囲 | ソース | 備考 |
|:--|:--|:--|:--|:--|
| HTTP | TCP | 80 | 54.xxx.220.xxx/32(EC2のグローバルIP) | EC2用 |
| カスタムTCPルール | TCP | 10050 | 54.xxx.220.xxx/32(EC2のグローバルIP) | zabbixポート用 |
| MYSQL/Aurora | TCP | 3306 | 54.xxx.220.xxx/32(EC2のグローバルIP) | RDS用 |
| カスタムTCPルール | TCP | 24224 | (監視先サーバのグローバルIP) | fluentd用 |

# 参考ページ

* RHELサーバ設定
http://miz.blue/linux_first_configration/

* Zabbixインストール手順
https://qiita.com/130cmWolf/items/ef9f172e3cca6f38d584
https://go-journey.club/archives/5062
http://ichibariki.hatenablog.com/entry/2018/02/25/133059
http://blog.serverworks.co.jp/tech/2016/12/10/zabbixinstall/

* 管理画面の設定
https://usado.jp/spdsk/2017/11/03/post-2551/