【AWS】EC2とRDSでZabbixサーバーを立ててみた

EC2とRDSでZabbixサーバー構築

自前サービスのWordPressを監視するためにZabbixを使ってみることにしました。

最近はオンプレ(自宅サーバー)の構成を練りながら日々を過ごしているのですが、時間がかかりそうなのでとりあえずクラウドを使ってAWSにZabbixサーバーを立ててテストをしていきます。

構成と概要

使う物↓

EC2とRDS。ともに無料枠。

ターゲットであるWordPressはAWSに構築済み

参考にさせていただいた資料はこちら。

・AWSのEC2とRDSを利用してZabbix4.2を導入する https://qiita.com/yuichi1992_west/items/6c81a0e69ea9e7e86d83

やったこと

EC2の作成と設定

任意のEC2を立ち上げ、Zabbixの10050、10051ポートを開放したセキュリティグループを作成して割り当てる。

EC2にZabbixを入れていきます。

先にyumのアップデートをしておきます。

$ sudo yum -y update

永続的にSELinuxを無効化します。

$ sudo vi /etc/selinux/config

SELINUX=disabled

※私が使用したLinux2のAMIではデフォルトでdisabledでした。

Zabbix4.2のリポジトリをインストールします。

$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-2.el7.noarch.rpm

zabbix-server-mysql,zabbix-web-mysql,zabbix-web-japanese,zabbix-agentをインストールします。

$ sudo yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent

RDSを触るためのMySQLのクライアント(EC2側)の設定をします。

$ sudo yum -y install mysql mysql-devel

RDSを作成し設定

RDSを作成します。今回はMySQL 5.7.26にしました。

さきほど設定したEC2からRDSに接続します。

$ sudo mysql -h RDSのエンドポイント -P 3306 -u RDSのユーザ名 -p

私の環境ではここでMySQLがエラーになりました。どうやらMySQLがインストールされていないっぽいので調べてみる。

$ yum list installed | grep mysql
php-mysqlnd.x86_64                    5.4.16-46.amzn2.0.2            @amzn2-core
zabbix-server-mysql.x86_64            4.2.8-1.el7                    @zabbix
zabbix-web-mysql.noarch               4.2.8-1.el7                    @zabbix

ということで、あらためてEC2にMySQLを入れていきます。

mysql8.0リポジトリの追加(このリポジトリに5.7も含まれています)

$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y

mysql8.0リポジトリの無効化

$ sudo yum-config-manager --disable mysql80-community

mysql5.7リポジトリの有効化

$ sudo yum-config-manager --enable mysql57-community

mysql5.7がインストールできるか確認

$ yum info mysql-community-server

入れられそうなのでmysqlインストール

$ sudo yum install mysql-community-server -y

再度確認。

$ mysqld --version

mysqld  Ver 5.7.30 for Linux on x86_64 (MySQL Community Server (GPL))

MySQLの自動起動設定をしてステータスを確認しておきます。

$ sudo systemctl start mysqld.service

$ sudo systemctl enable mysqld.service

$ systemctl status mysqld.service

● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since ● 2020-●-● ●:●:● UTC; 13s ago
     Docs: man:mysqld(8)

アクティブになりました。

念の為MySQLの初期設定をしておきます。

パスワードを確認。

$ sudo cat /var/log/mysqld.log | grep password

2020-●-●:●:●.● 1 [Note] A temporary password is generated for root@localhost: [パスワード]

↑のパスワードの部分を控えておきます。

下記の記事にわかりやすく書かれていますので、参考にしてみてください。

・MySQL5.7 にて root のパスワード変更などの初期設定をする(mysql_secure_installation 使用)
https://utano.jp/entry/2017/10/mysql57-mysql-secure-installation/

ここで先程の接続コマンドを試してみたら接続できました。

$ sudo mysql -h RDSのエンドポイント -P 3306 -u ユーザ名 -p

EC2からRDSへの接続でうまく接続出来ない場合のトラブルシューティング

Twitter等でEC2からRDSに接続できないという声を聞いたので私が実際に試した確認事項を書いておきます。

  • セキュリティグループに過去に接続成功済みのものをアタッチしてみた
  • RDSのパスワードを再設定した
  • パスワードを手打ちした
  • コマンドの確認
  • RDSの設定でVPCセキュリティグループが間違っていた。(EC2にあたっているセキュリティグループと同じものをRDSに指定する必要がある)

Zabbixのデータベースを作成する。

RDSに接続できたらZabbixのデータベースを作成していきます。

MySQLに入った状態でこちらのコマンドを入力。(※頭の「mysql>」は入力しません)

mysql> create database zabbix character set utf8 collate utf8_bin

Query OK, 1 row affected (0.01 sec)

Zabbixユーザを作成する。

mysql> grant all on zabbix.* to zabbix@`%` identified by 'パスワード';

MySQLからログアウトする。

mysql> quit;
Bye

Zabbixの初期データを登録する。

初期データを登録します。

$ sudo zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -h RDSのエンドポイント -P 3306 -u ユーザ名 -p zabbix

/etc/zabbix/zabbix_server.confにDB情報を登録する。

$ sudo vi /etc/zabbix/zabbix_server.conf

DBHost=RDSのエンドポイント
DBPassword=RDSのパスワード

zabbix-serverの起動・自動起動を設定する。

起動・自動起動を設定します。

$ sudo systemctl start httpd
$ sudo systemctl enable httpd
$ sudo systemctl start zabbix-server
$ sudo systemctl enable zabbix-server

Zabbixの設定

ブラウザにて「http://(インスタンスのパブリックIP)/zabbix」に接続する。

すると、こちらの画面が表示されます。

私の環境ではphpのエラーっぽいのがでてました。

「Time zone for PHP is not set (configuration parameter “date.timezone”).」と表示されてます。

PHPのタイムゾーンがセットされていないとのこと。

下記の記事を参考に修正したら解決しました。

・ZABBIX構築の際のPHPのタイムゾーン設定
https://teratail.com/questions/265535

こんな感じで/etc/httpd/conf.d/zabbix.confの内容を書き換えてあげます。

# php_value date.timezone Europe/Riga
↓
php_value date.timezone Asia/Tokyo

設定変更後、Zabbixサーバ再起動。

$ systemctl restart zabbix-server httpd zabbix-agent

$ systemctl enable zabbix-server httpd zabbix-agent

解決しました!

「Check of pre-requisites」にてすべての項目が「OK」と表示されていることを確認。その後「Next step」をクリックします。

「Configure DB connection」にて下記の項目を入力し「Next step」をクリックします。

  • Database host : (RDSのエンドポイント)
  • Password : (zabbixユーザのパスワード)

Zabbixのログイン画面が表示されました。

下記の初期ユーザ(Admin)・初期パスワード(zabbix)を入力し「Sign in」をクリックします。

無事ログイン完了です!

しかしまだ下部にこのようなエラーが出ています。

「Zabbix server is not running: the information displayed may not be current」

エラーログを見てみると、定期的にエラーを吐いています。

[1045] Access denied for user 'zabbix'@'●●●●' (using password: YES)
 18420:2020●:●.● database is down: reconnecting in 10 seconds
 18420:2020●:●.● [Z3001] connection to database 'zabbix' failed: 
[1045] Access denied for user 'zabbix'@'●●●●' (using password: YES)
 18420:2020●:●.● database is down: reconnecting in 10 seconds

Zabbixのパスワードを入力する部分を間違えてRDSのパスワードにしてしまっていました。zabbix_server.confを修正していきます。

sudo vi 
/etc/zabbix/zabbix_server.conf

変更前
DBPassword=(RDSのパスワード)

変更後
DBPassword=(Zabbixで設定したパスワード)

再起動する。

$ sudo systemctl restart zabbix-server httpd zabbix-agent
$ sudo systemctl enable zabbix-server httpd zabbix-agent

無事runnningになりました。