Zabbix 6.0をAlmaLinux 8にインストール(MySQL編)

Zabbix 6.0が[リリース](https://www.zabbix.com/jp/whats_new_6_0)されました。
Zabbix 6.0は、LTSと呼ばれるバージョンですので、通常のバージョンよりも[長期間のサポート](https://www.zabbix.com/jp/life_cycle_and_release_policy)が提供されます。

Zabbix 6.0がリリースされたので手順を公開します。基本的な手順はZabbix 5.0や5.4と同様ですが、一部異なる部分があるのでご注意ください。

# システム構成

AlmaLinux 8上に標準のパッケージで用意されているMySQLサーバーを使用してZabbixサーバーを構築します。Zabbixエージェントもインストールすることで、そのZabbixサーバーの状態も監視できるような環境を構築します。

利用する主なソフトウェアとそのバージョンは以下の通りです。

- Zabbix : Zabbix 6.0.0
- OS : AlmaLinux 8.5
- Webサーバー : Apache HTTP Server 2.4.37(httpd, AlmaLinux 8標準)
- PHP : PHP 7.2.24 (AlmaLinux 8標準)
- DBMS : MySQL 8.0.26 (AlmaLinux 8標準)

# １．OSのインストール
最初にAlmaLinux 8をインストールします。

OSをインストールする際、「ソフトウェアの選択」は、「サーバー」にしておきます。
各種パッケージのインストールを行うために、インターネットへの接続とdnfコマンドが利用できるような環境を用意します。
AlmaLinux 8をインストールし終えたら、必ずdnf updateでOSを最新の状態にしてください。

```shell-session
# dnf update
```

今回の説明では、SELinuxは有効なままの手順を紹介します。
SELinuxを無効にしたい方は、ここで/etc/selinux/configを編集してdisabledに設定してください。


# ２．OS再起動

dnfで更新したパッケージやカーネルなどを反映させるためにOSを再起動しておきます。

```shell-session
# reboot
```


# ３．Zabbix LLCのリポジトリ登録
Zabbix LLCが、RHEL 8用のyumのリポジトリを公開しているので、それを登録します。

6.0系用のリポジトリ登録は以下のように行います。

```shell-session
# dnf install https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
```

新しいバージョンがリリースされている場合もありますので、公式のダウンロードサイトやリポジトリのディレクトリ内を確認し、より新しいバージョンのパッケージを使用してください。


# ４．Zabbix関連のパッケージインストール
Zabbixサーバーの本体と自分自身を監視するためのZabbixエージェントをインストールします。エージェントは折角なのでZabbixエージェント2を使用することとします。(ZabbixサーバーのWebインターフェース用のパッケージは別途インストールします。)
ここでインストールするのは、MySQLまたはMariaDB用です。

```shell-session
# dnf install zabbix-server-mysql zabbix-web-service zabbix-sql-scripts zabbix-agent2
```

zabbix-web-serviceというのは、5.4で追加された定期レポート生成で使用します。zabbix-sql-scriptsというのは、5.4からデータベース作成用のSQL文が別パッケージとなったものです。

定期レポート生成を行う場合には、Google Chromwのインストールも忘れずに行ってください。
Linux用のパッケージは、以下のURLからダウンロードできます。

https://www.google.com/chrome/?platform=linux

ダウンロードしたパッケージをインストールします。

```shell-session
# dnf install ./google-chrome-stable_current_x86_64.rpm
```


# ５．MySQLサーバーのインストール
MySQLサーバーをインストールします。

```shell-session
# dnf install mysql-server
```

インストールしたら、rootのパスワード設定や不要な設定削除のため、セキュリティの初期設定を行いましょう。
設定には、mysql_secure_installationを使用します。

```shell-session
# systemctl start mysqld
# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: n
Please set the password for root here.

New password:

Re-enter new password:
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!
#
```

MySQL用の設定を行っておきます。

```shell-session
# vi /etc/my.cnf.d/mysql-server.cnf
```

変更内容は以下の通りです。

```
[mysqld]
character-set-server = utf8mb4
collation-server     = utf8mb4_bin
skip-character-set-client-handshake
innodb_file_per_table
```

Zabbix 6.0からutf8mb4にも対応したので、utf8mb4を使用することとします。
メモリに余裕がある場合は、メモリの割り当てなどの設定も行うようにしてください。
設定を追加したら、データベースの起動と自動起動の設定を行います。

```shell-session
# systemctl restart mysqld
# systemctl enable mysqld
```


# ６．初期データベースの作成
DBMS上にデータベースとそれにアクセスするためのユーザを作成します。
以下のzabbixユーザーのパスワードはサンプルですので、適宜きちんと変更して設定してください。

```shell-session
# mysql -uroot -p
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user 'zabbix'@'localhost' identified with mysql_native_password by 'password';
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost';
mysql> exit
#
```

上記の例では、MySQL上のzabbixユーザーのパスワードを「password」としていますが、パスワードは、それぞれの環境に合わせて適宜設定してください。
続いて、テーブルの作成と初期データの投入を行います。

```shell-session
# zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
```

上記のデータベース作成用のファイルは、ソースからも取得できます。
ソースのtarball(zabbix-6.0.0.tar.gz)の方には、schema.sql、images.sql、data.sqlがありますので、それぞれのファイルを確認されたい場合は、tarballを展開してご確認ください。
tarballのダウンロードは[ここ](http://www.zabbix.com/download.php)からできます。

データベース作成用のファイルのパス名は、バージョンごとにバージョン番号をパスに含むなど異なる場合がありますので、インストールしたバージョンに合わせてパスを確認して変更してください。

# ７．Zabbixの設定ファイルの更新
ここまでの設定のままであれば、最低限の設定としては、DBPasswordを設定するだけです。
DB作成時のパスワードをDBPasswordに設定してください。

```shell-session
# vi /etc/zabbix/zabbix_server.conf
```

設定内容は以下の通りです。

```shell-session
DBPassword=password
StartReportWriters=3
WebServiceURL=http://127.0.0.1:10053/report
```

StartReportWritersとWebServiceURLの設定は、定期レポート生成用の設定です。
StartReportWritersは、レポート処理用のプロセスをいくつ起動しておくかを指定します。WebServiceURLは、zabbix-web-serviceという新しいサービス呼び出し用のURLを指定します。デフォルトでは、「http://localhost:10053/report」のようなのですが、AlmaLinux 8のデフォルトの設定のままや環境によっては名前解決で問題が発生する場合があるようなので、127.0.0.1を指定しています。


# ８．ZabbixのWebインターフェースのインストール

WebサーバーとしてApache HTTP Server(httpd)を使用する場合は、Webインターフェースを以下のコマンドラインを実行してインストールします。

```shell-session
# dnf install zabbix-web-mysql zabbix-apache-conf zabbix-web-japanese
```

ZabbixのWebインターフェースも、利用するDBMSに合わせてパッケージを選択してください。
zabbix-apache-confというパッケージは、WebサーバーとしてApache HTTP Server(httpd)を使用する際にインストールするパッケージです。zabbix-web-japaneseというパッケージは、Webインターフェースで日本語のフォントを利用できるようにするための設定用パッケージです。
Zabbix 5.4など前のバージョンでは、PHPのtimezoneの設定が必要でしたが、Zabbix 6.0からは初期設定ウィザードの中で設定します。


# ９．firewalldとSELinuxの設定
デフォルトの設定では、Zabbixで使用するポート番号での接続が許可されていませんので、firewalldの設定を行います。
Zabbixサーバーが外部から接続を受けるのは、Zabbixエージェントからのアクセスと、Webインターフェースへのアクセスです。
SNMPトラップや他のアクセスを許可する場合は、それらも許可するようにしてください。

つまり、Zabbixサーバーには、以下のような設定を行います。

```shell-session
# firewall-cmd --add-port=10051/tcp --zone=public --permanent
# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --reload
```

そして、Zabbixエージェントをインストールしたサーバーがfirewalldを利用しているなら、以下のような設定を行います。

```shell-session
# firewall-cmd --add-port=10050/tcp --zone=public --permanent
# firewall-cmd --reload
```

Zabbixエージェントへのアクセスが、ローカルのループバックを利用するのであれば、10050をあける必要はありません。つまり、Zabbixエージェントが外部のIPアドレスからアクセスされる場合には、10050をあけます。
Zabbixサーバーが、各監視対象にインストールしたZabbixエージェントからのアクセスを外部から受ける時には、10051をあけます。

上記のコマンド実行例では、publicからならアクセスOKにしてしまっているので、セキュリティを重視する環境であれば、もっとアクセス可能なゾーンを特定するなど厳密に設定した方が良いでしょう。

SELinuxの設定に関しては、Zabbix 6.0からは基本的なポリシー設定をパッケージのインストールで行うことができるようになりました。
SELinuxの設定が必要な場合は、以下のようにzabbix-selinux-policyパッケージをインストールしてください。

```shell-session
# dnf install zabbix-selinux-policy
```


# １０．各種デーモン起動
以下のコマンドで、各サービスを起動して自動起動も設定します。

```shell-session
# systemctl enable --now zabbix-agent2 zabbix-server zabbix-web-service php-fpm httpd
```


# １１．Webインターフェースにアクセス

ブラウザを利用して、
http://ZabbixサーバーのIPアドレス/zabbix/
にアクセスします。

インストール直後ですと、英語の表示でセットアップウィザードを開始することになります。
最初の画面の「Default language」で日本語を選択すれば、日本語のウィザードでセットアップを行うことができます。

セットアップウィザード内で設定が必要なのは、「データベース接続設定」もしくは「Configure DB connection」です。この記事ではローカルにインストールしたデータベースを使用するので、データベース作成時に指定したユーザーとパスワードを必ず入力してください。

データベース接続設定の次の設定では、デフォルトのタイムゾーンを選択することが重要です。
日本時間で使用したい場合は、「(UTC+09:00) Asia/Tokyo」を選択することを忘れないようにしてください。

それ以外は、「次のステップ」もしくは「Next step」をクリックして次々の画面に進めてセットアップを終了させて構いません。

設定が終わるとログイン画面になります。アカウント「Admin」、パスワード「zabbix」でログインしてください。


# １２．定期レポート生成用の設定追加

定期レポート生成の為には、もう1つ設定を行っておく必要があります。

「管理」->「一般設定」->「その他」にある「WebインターフェースURL」に、Webインターフェースにアクセスする際のURLを指定してください。
例：「http://192.168.1.1/zabbix」

定期レポートの配信先のユーザーやグループに、Emailなどの送信用のメディアの設定しておくこともお忘れなく。


# １３．Zabbixサーバー自体の監視開始

ZabbixエージェントとZabbixサーバーのインストールと起動が成功すれば、自動的に「Zabbix server」というホストの名前でZabbixサーバー自体の監視が開始されます。

「監視データ」->「最新データ」と辿るとZabbixエージェントから取得した各値が見えると思いますので、どのような値が取得できているか確認してみてください。全くアイテムが表示されない場合は、ホストグループやホストを指定して「適用」ボタンをクリックしてみてください。


# 最後に

今後も同様に、メジャーバージョンごとにリポジトリが用意されると思うので、使用したいZabbixのバージョンに合わせてリポジトリを登録すれば、それぞれのバージョンのパッケージを簡単にインストールできます。

パッケージの構成が変更される場合もあるのですが、大きく変化する場合は、また手順をご紹介します。