AWSのEC2とRDS(MySQL8)を使ってZabbix4を構築

#AWSのEC2とRDS(MySQL8)を使ってZabbix4を構築
##構築目的と背景
AWSの初心者がAWSに触れる機会として何か構築しようと考えました。
前職の研修でZABBIXの構築経験があり、丁度ZABBIXとMySQLが新しいバージョンがリリースされ
話題になっていたので今回の内容となりました。
せっかくのAWSなので、RDSを使ったDB外だしをしてみようと思います。

※素人なので考慮漏れがあるかもしれませんのでご指摘いただけると幸いです。

##構築する構成
![構成.PNG](https://qiita-image-store.s3.amazonaws.com/0/316662/e541c6b2-7c9d-0c44-04a0-69697259da92.png)


##構築手順
AWS上にVPC、Elastic IP、EC2インスタンスの準備工程は省略します。

###* 1 EC2へZabbixインストール
　sshを用いてEC2へログイン頂き、root権限で以下を実行して下さい。

1 Install Repository with MySQL database
```rpm -i https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm ```
2 Install Zabbix server, frontend, agent
```yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent```

###* 2 RDSの準備　※失敗編

1 セキュリティグループにてDB用のものを作成。
MYSQLのサービスをZabbix構築するEC2のlocal IPもしくは
　EC2のセキュリティグループに対して許可。

2 RDSのメニューからインスタンスを作成、上記セキュリティグループと
　バージョンを8.0.11以外全部デフォルトで構築。

3 DBにログイン（EC2から以下のコマンド実行）
```mysql -uroot -p -h RDSのエンドポイント```
　PWを聞かれるのでRDS構築時に設定したPW入力
```mysql> create database zabbix character set utf8 collate utf8_bin;```

```mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';```
↑ここでエラー
MySQL8からgrantではユーザ作成ができないらしい・・・
・[MySQL8.0ではGRANT文でユーザを作らせない(代わりにロールがある)](http://next4us-ti.hatenablog.com/entry/2018/07/13/123322)

・[Zabbix4.0+MySQL8.0の構築](http://atata9019.hatenablog.com/entry/2018/10/07/224144)

仕方がないのでユーザ作成と権限付与を分けて実行
```create user 'zabbix'@'%' identified by 'password';```
```grant all privileges on zabbix.* to zabbix@'%';```
```Query OK, 0 rows affected (0.10 sec)```

mysql上での操作は完了したので、以下実行
```mysql> quit; ```

MySQL内にZABBIX用のDBは作成したけれど、中身が空っぽなので
必要なデータをDBに入力
```zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix -h RDSのエンドポイント```

###* 3 Zabbixのコンフィグ修正

1 zabbix_server.conf
バックアップをとっておき、
```cp -p /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.backup```

以下の項目を修正
・DBHost=RDSのエンドポイント
・DBPassword=password

2 zabbix.conf
バックアップをとっておき、
 ```cp -p /etc/httpd/conf.d/zabbix.conf /etc/httpd/conf.d/zabbix.conf.backup```
以下を追加
```php_value date.timezone Asia/Tokyo```

3　zabbixの起動と自動起動設定
```systemctl restart zabbix-server zabbix-agent httpd```
```systemctl enable zabbix-server zabbix-agent httpd```

4　ZABBIXをwebページから初期設定
URL:http://EC2のグローバルIPアドレス/zabbix 
![7.png](https://qiita-image-store.s3.amazonaws.com/0/316662/cd0d52b2-ee84-1cfd-4f12-706243b55ce4.png)

![8.png](https://qiita-image-store.s3.amazonaws.com/0/316662/77f6b63f-2371-1178-085e-cf66f983a287.png)
すべてOKになっているはず
![10.png](https://qiita-image-store.s3.amazonaws.com/0/316662/46ea6f51-30dc-dc6a-92a1-536202c99767.png)

database hostをRDSのエンドポイントへ
passwordもmysqlで設定したZABBIXのパスワード

すると・・・
![17-1.png](https://qiita-image-store.s3.amazonaws.com/0/316662/426006ec-88e2-2b02-fa94-3d65f5eb5d19.png)


###* 2 RDSの準備　※成功編

###エラーの原因

どうやらMySQL8からセキュリティやら文字コードまわりの変更が
あったらしく、MySQLのオプションを変更しないといけないらしい。
[MySQL 8.0にアップデート！注意すべき点](https://hit.hateblo.jp/entry/MYSQL/MYSQL8/SETTING)

AWSのRDSメニューからパラメータグループを選択し、
パラメータグループの作成。
作成された後、以下の項目を変更
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

1 RDSのメニューからインスタンスを作成。
失敗編で作成したDBのセキュリティグループとバージョンを8.0.11、DBのパラメータグループを上記で作成したものを選択して作成。

2 DBにログイン（EC2から以下のコマンド実行）
```mysql -uroot -p -h RDSのエンドポイント```
　PWを聞かれるのでRDS構築時に設定したPW入力
```mysql> create database zabbix character set utf8 collate utf8_bin;```

ユーザ作成と権限付与を分けて実行
```create user 'zabbix'@'%' identified by 'password';```
```grant all privileges on zabbix.* to zabbix@'%';```
```Query OK, 0 rows affected (0.10 sec)```

MySQL上での操作は完了したので、以下実行
```mysql> quit; ```

MySQL内にZABBIX用のDBは作成したけれど、中身が空っぽなので
必要なデータをDBに入力
```zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix -h RDSのエンドポイント```

###* 3 Zabbixのコンフィグを再度修正

1 zabbix_server.conf
以下の項目を修正
・DBHost=RDSのエンドポイント（二つ目のRDS）
・DBPassword=password

2 zabbix.conf.php
/etc/zabbix/web/zabbix.conf.phpが存在すれば
```rm /etc/zabbix/web/zabbix.conf.php```にて削除
存在しなければ、次へ。

3　ZABBIXをwebページから初期設定
URL:http://EC2のグローバルIPアドレス/zabbix 

4初期設定後、ログイン画面
ID:Admin
PW:zabbix

ログインし、Zabbix server is runningがYesになって入れば
構築は完了です。

##躓いたポイント
・MySQLのコマンドを叩く際に-h RDSのエンドポイントのオプションが
必要
・MySQLのユーザにDBの権限付与がzabbix公式手順でいけない
・MySQL8のオプション変更が必要
・MySQLのユーザ'%'の意味

##感想
躓きポイントをまとめたら、ZABBIX関係ありませんでした。
記事の入力に2時間超えていて、頭の整理とアウトプットに
こんなに時間を要するとは思ってませんでした。
AWSのサービスに限らず、今後も何かしら構築できればと考えています。