AWS上にZabbixサーバを構築(RHEL7.6+RDS(MySQL5.7.25)+Zabbix4.0)

# 環境

サーバとDBはAWSのサービスを使ってZabbixを構築します。
Zabbixサーバ自身にエージェントも入れます。

- EC2(AMI)：Red Hat Enterprise Linux 7.6 (HVM), SSD Volume Type - ami-08419d23bf91152e4
- RDS：MySQL 5.7.25
- Zabbix：4.0 LTS

# RDSの作成
ほぼデフォルトで作成しています。
サブネットグループはプライベートサブネットに配置させています。
セキュリティグループは3306をオープンです。
![RDS1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/5c7e073e-47ea-e317-d562-a71e88230c9b.png)
![RDS2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/4b031fa7-00f9-4695-cfb1-360c7f66ee03.png)

# EC2のセットアップ
EC2の作成もほぼデフォルトです。
セキュリティグループはSSHとHTTPのみオープンです。

EC2のセットアップ前に、まず、初期状態を確認。
あまり意味はありません。備忘録です。

##### カーネルバージョン確認

```bash
$ uname -r
3.10.0-957.el7.x86_64
```

##### OSバージョン確認

```bash
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.6 (Maipo)
```

それでは、セットアップしていきます。
まずはLinuxの初期設定から。

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

```bash
$ sudo yum update -y
```

##### 言語設定（タイムゾーン、ロケール、キーボード設定）

日本語に設定して反映確認。

```bash
$ sudo timedatectl set-timezone Asia/Tokyo
$ sudo localectl set-locale LANG=ja_JP.utf8
$ sudo localectl set-keymap jp106
$ source /etc/locale.conf

# タイムゾーン確認
$ timedatectl
      Local time: 水 2019-04-24 21:08:34 JST
  Universal time: 水 2019-04-24 12:08:34 UTC
        RTC time: 水 2019-04-24 12:08:33
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

# ロケール、キーボード設定確認
$ localectl
   System Locale: LANG=ja_JP.utf8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp
```

##### SELinuxの無効化

元の設定はコメントアウトして、`disabled`を追記。反映させるためにいったん再起動。

```bash
$ sudo vi /etc/selinux/config
:
#SELINUX=enforcing
SELINUX=disabled
:

$ sudo reboot
```
再起動したらZabbixをインストールしていきます。

##### リポジトリ登録

```bash
$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.BFVPGG: ヘッダー V4 RSA/SHA512 Signature、鍵 ID a14fe591: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:zabbix-release-4.0-1.el7         ################################# [100%]
```

##### Zabbix Serverインストール

`php-mbstring` `php-bcmath`がないと怒られます。

```bash
$ sudo yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent zabbix-get
:
エラー: パッケージ: zabbix-web-4.0.7-1.el7.noarch (zabbix)
             要求: php-mbstring
エラー: パッケージ: zabbix-web-4.0.7-1.el7.noarch (zabbix)
             要求: php-bcmath
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest
```

##### リポジトリ追加

PHP関連はOptionalリポジトリから取得できますので追加します。
リポジトリ一覧を見ると最初は無効になっているので、これを有効化します。

```bash
# リポジトリ一覧を検索
$ sudo yum repolist all | grep server-optional
rhui-REGION-rhel-server-optional/7Server/x86_64             Red Hat 無効

# Optionalリポジトリを有効化
$ sudo yum-config-manager --enable rhui-REGION-rhel-server-optional
(出力は省略)

# 確認
$ sudo yum repolist all | grep server-optional
rhui-REGION-rhel-server-optional/7Server/x86_64             Red Hat 有効: 17,684
```

##### Zabbix Serverインストール（やり直し）

気を取り直して、Zabbixのインストールをやり直してみましょう。

```bash
$ sudo yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent zabbix-get
：
インストール:
  zabbix-agent.x86_64 0:4.0.7-1.el7
  zabbix-get.x86_64 0:4.0.7-1.el7
  zabbix-server-mysql.x86_64 0:4.0.7-1.el7
  zabbix-web-japanese.noarch 0:4.0.7-1.el7
  zabbix-web-mysql.noarch 0:4.0.7-1.el7
  
依存性関連をインストールしました:
  OpenIPMI-libs.x86_64 0:2.0.23-2.el7
  OpenIPMI-modalias.x86_64 0:2.0.23-2.el7
　：
　：
完了しました!
```

##### MySQLクライアントのインストール

RDSに接続するためにMySQLをインストールします。
MySQL互換のMariaDBが入るみたいです。

```bash
$ sudo yum install -y mysql
:
インストール:
  mariadb.x86_64 1:5.5.60-1.el7_5

依存性関連をインストールしました:
  perl.x86_64 4:5.16.3-294.el7_6
  perl-Carp.noarch 0:1.26-244.el7
  :
  :
完了しました!

$ mysql --version
mysql  Ver 15.1 Distrib 5.5.60-MariaDB, for Linux (x86_64) using readline 5.1
```

##### データベースとユーザーの作成

Zabbix用のデータベースとユーザーを作成します。
RDSのエンドポイント、ユーザーのパスワードは各自読み替えてください。

```
# RDSに接続
mysql -u dbadmin -h xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 5.7.25 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

# データベースを作成(zabbix)
MySQL [(none)]>create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

# 確認
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| mysql              |
| performance_schema |
| sys                |
| zabbix             |
+--------------------+
6 rows in set (0.00 sec)

# ユーザーzabbixを作成し、データベースzabbixに対するすべての権限を許可
MySQL [(none)]>grant all on zabbix.* to zabbix@`%` identified by 'your password';
Query OK, 0 rows affected, 1 warning (0.00 sec)
```



むむ、`1 warning`と警告が出ている。気になるので調べてみました。
別に問題はないので、スルーして進めてもらっても構いません。

```
MySQL [(none)]> SHOW WARNINGS \G;
*************************** 1. row ***************************
  Level: Warning
   Code: 1287
Message: Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release. Use ALTER USER statement for this operation.
1 row in set (0.01 sec)
```

直訳するとこう。

> GRANTステートメントを使用して特権以外の既存のユーザーのプロパティーを変更することは非推奨であり、将来のリリースでは除去される予定です。 この操作にはALTER USER文を使用してください。



[こちらの記事](<http://create.anigameinfo.com/2018/03/14/post-772/>)を参考にさせて頂きました。
`identified by password`で指定するパスワードが生のパスワードだと警告が出るそうで、
`create user` でユーザー作成してから`grant`するといいそうです。

そもそもですが、`grant`を実行したユーザーが存在しない場合は合わせてユーザーも作成されるので最初から`grant`文のワンライナーでユーザー作成と権限付与までやってしまうことが多いようですね。

zabbixユーザーを削除してからやり直してみます。

```
MySQL [(none)]> drop user zabbix;
Query OK, 0 rows affected (0.00 sec)

MySQL [(none)]>create user zabbix identified by 'your passowrd';
Query OK, 0 rows affected (0.00 sec)

MySQL [(none)]> grant all on zabbix.* to zabbix;
Query OK, 0 rows affected (0.00 sec)
```
##### 初期データのインポート

```
# テーブルがまだ存在しない
MySQL [(none)]> show tables from zabbix;
Empty set (0.00 sec)

MySQL [(none)]> quit
Bye

# 初期データのインポート
$ zcat /usr/share/doc/zabbix-server-mysql-4.0.7/create.sql.gz | mysql -u dbadmin -h xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p zabbix
Enter password:

# RDSに接続
mysql -u dbadmin -h xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p
Enter password:

# テーブルが作成されていることを確認
MySQL [(none)]> show tables from zabbix;
+----------------------------+
| Tables_in_zabbix           |
+----------------------------+
| acknowledges               |
| actions                    |
| alerts                     |

| widget                     |
| widget_field               |
+----------------------------+
144 rows in set (0.00 sec)

MySQL [(none)]> quit
Bye
```



##### ZabbixのDB接続設定

データベースの接続先ホスト名（RDSエンドポイント）とパスワードを追記します。

```
$ sudo vi /etc/zabbix/zabbix_server.conf
:
# DBHost=localhost
DBHost=xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
:
# DBPassword=
DBPassword=your password
:
```

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

タイムゾーンを追記します。

```bash
$ sudo vi /etc/httpd/conf.d/zabbix.conf
:
        # php_value date.timezone Europe/Riga
        php_value date.timezone Asia/Tokyo
:
```

##### サービス起動

Zabbixサーバ、エージェント、Apacheを起動します。

```bash
# 初期は停止状態
$ sudo systemctl status zabbix-server zabbix-agent httpd | grep Active:
   Active: inactive (dead)
   Active: inactive (dead)
   Active: inactive (dead)

# サービス開始
$ sudo systemctl start zabbix-server zabbix-agent httpd

# 開始されたことを確認
$ sudo systemctl status zabbix-server zabbix-agent httpd | grep Active:
   Active: active (running) since 木 2019-04-25 22:18:15 JST; 2s ago
   Active: active (running) since 木 2019-04-25 22:18:15 JST; 2s ago
   Active: active (running) since 木 2019-04-25 22:18:15 JST; 2s ago
```

##### サービス自動起動

OS起動時に自動的にサービスが起動するようにします。

```bash
# 初期は無効
$ sudo systemctl is-enabled zabbix-server zabbix-agent httpd
disabled
disabled
disabled

# 自動起動設定
$ sudo systemctl enable zabbix-server zabbix-agent htt
pd
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

# 有効化されたことを確認
$ sudo systemctl is-enabled zabbix-server zabbix-agent httpd
enabled
enabled
enabled
```

# Zabbix管理画面へアクセス

`http://EC2のIPアドレス/zabbix` にアクセスします。
Welcom画面が表示されるので指示に従って進めていきます。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/d3362200-111f-de8d-65d1-f4d34d024343.png>

システムの前提条件チェック。すべて「OK」になっていることを確認して次へ。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/12a8f15f-255a-b4d2-cd71-df963439eb6c.png>

RDSのエンドポイント、接続パスワードを入力して次へ。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/bb90c222-53ec-0d2e-3d7c-6294214a5b61.png>

そのまま次へ。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/03205c15-6c8c-a466-62cf-98ac1e3bd37a.png>

サマリ。問題なければ次へ。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/81f963a0-be21-4d88-1bff-a0ea3bf5f4cb.png>

インストール成功。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/0add342f-8af2-81e6-6ac3-10504ff1b067.png>

早速ログインしてみましょう。初期のユーザー名とパスワードは「Admin / zabbix」です。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/17b5e96d-3e82-aec1-3b1a-8e398c38d1fb.png width=50%>

言語が英語になっているので日本語に変更します。右上の人のマークをクリック。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/5e7ef103-37de-2461-2266-d6a25418513a.png>

Languageを「Japanese」に変更してUpdate。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/0e8cb9e5-e78e-609d-24f1-137c6a5607c8.png>

日本語表示に変わればOK。Zabbixサーバの起動が「はい」となっているので問題なさそう。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/d3d7d55c-0513-14c9-6556-dc13f8395518.png>

「最新データ」からZabbixサーバ自身の監視データが取得できていることを確認できました。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402286/aa8a8533-8800-454d-5162-e9a4ed0bacdc.png>

# 参考にさせて頂いたページ

- [公式ダウンロードページ](https://www.zabbix.com/jp/download?zabbix=4.0&os_distribution=red_hat_enterprise_linux&os_version=7&db=mysql)

- [AWS上でCentOS 7にZabbix 3.2を構築してみた](https://dev.classmethod.jp/cloud/aws/aws-centos7-zabbix3_2-setup/)
- [AWSのRHEL環境とRDSでZabbixを構築](https://qiita.com/junk_H/items/cc47c214c3be183dc9b4)

- [【MySQL】ユーザーの権限付与](http://create.anigameinfo.com/2018/03/14/post-772/)