RHEL 8.5 にZabbix 6.0 で監視サーバを立てる

「Zabbix 立てたことある人いないの？」なんて会話がミーティングで出てきました。監視サーバーとしては大定番のものですね。私は立てたことない人なので立ててみます。
ついでに、Bicep での仮想マシンの立て方と、Linux の基本をお勉強。いつものことながら時系列で書いてます。失敗してます。

## 目標
RHEL 8.5 にZabbix 6.0をインストールする。できるだけ[Zabbix 公式サイト](https://www.zabbix.com/documentation/6.0/en/manual)の通りに進める。
Azure 上に立てたばかりのまっさらなRHEL を使う。


## 調べもの


### リポジトリとは（自分流理解）
私のLinux 力はリポジトリってなんや？です。
調べたことを自分の言葉でまとめる
* アプリケーション（と呼んでいいのか不明、今は「Zabbixとかそういうの」くらいの意味で書いてます）が動くには他のアプリケーションが必要＝「依存関係がある」と呼ぶ
* なんかその依存関係のあるアプリケーション同士を誰かがまとめてどっかに置いてくれていて、それをリポジトリと呼ぶ
* 当然、アプリケーションはダウンロード⇒インストールされる
* ダウンロードするにはリポジトリの位置をコマンドでOS に教える
* リポジトリにはたくさんの種類があり、一個のリポジトリにはたくさんのアプリケーションがある
* インストールしたいアプリケーションに必要なアプリケーションを全部持ってるリポジトリがわかれば、インストール作業が簡単になる

### Zabbix の要件
[公式のRequirements](https://www.zabbix.com/documentation/6.0/en/manual/installation/requirements)に書かれたSoftware要件。
* データベース用。MySQL を使うことにした
    * Optional はわからんので困ったら振り返る
* フロントエンド用。Apache とphp。
    * さらにphp の拡張機能がたくさん必要。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/2bfb9134-7654-60fd-19c7-fb4120ebb949.png)

Zabbix 本体は公式リポジトリから落とすようです。今回の検証ではエージェントとサーバーの両方を一個のRHEL に入れます。

## 作業
### RHEL 8.5 の仮想マシンをBicep で立てる
今回もBicep を使って立てます。自分の立て方を持っている人は飛ばしてください。
問題になったのは仮想マシンのイメージの指定方法です。
つまり、Bicep の構文におけるImageReference の部分です。Publisher, Offer, Sku ですね。
それらの記述方法は[公式DOC](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/cli-ps-findimage)に書いてあります。
今回使った値を先に抜き出しますと
* Publisher: RedHat
* Offer: RHEL
* Sku: 8.5

でした。
Publisher とOffer はすぐわかりますがSku に苦労しました（公式DOC ちゃんと読んでなかった）。
下記コマンドでSku の書き方を調べます。RHEL に限らず、いろんなOS に対しても使えるはずなので思い出せるようになっておきたい。

```
$skuName="<SKU>"
Get-AzVMImage -Location $locName -PublisherName $pubName -Offer $offerName -Sku $skuName | Select Version
```
適当に引数を渡すと今回は"8.5" でよいことがわかりました。
```
8.5       RHEL  RedHat        japaneast /Subscriptions/dxxxxxxxxxxxxx… 
```

ネットワークの方は省略します。

### RHEL の作業
[公式](https://www.zabbix.com/download?zabbix=6.0&os_distribution=centos&os_version=8&components=server_frontend_agent&db=mysql&ws=apache)が親切です！こんな感じで選択してスタート！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/84551a72-2483-0f3e-336a-78bc4e922edb.png)

#### Zabbix インストール（手順2-a, b）
公式リポジトリをインストールし、server とfrontend とagent をインストールします。
#### MySQL インストールと設定（手順2-c の前に）
手順2-c はMySQL をインストールしてからです。
[RedHat のページ](https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/assembly_using-mysql_using-databases)の通りやってみます。
```
# yum module install mysql:8.0/server
```
このままサービスを起動します。そしてOS 起動時に自動的にMySQL も起動されるように設定。
```
# systemctl start mysqld.service
# systemctl enable mysqld.service
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
```
先ほどのページに、mysql_secure_installation なる操作があります。軽く調べたところMySQL を使う上でのお作法のようです。とりあえずやっておきますがここでは省略。[このページの通りにしました](https://rin-ka.net/mysql8-init/)

#### やっと手順2-c
Zabbix 公式の手順に戻ります。
MySQL に入っていじります。ログインにはさっきのmysql_secure_installation で決めたroot のパスワードです。
公式のこの部分です。
```
# mysql -uroot -p
password
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.02 sec)

mysql> create user zabbix@localhost identified by 'password';
create user zabbix@localhost identified by xxxx

mysql> grant all privileges on zabbix.* to zabbix@localhost;
grant all privileges on zabbix.* to zabbix@localhost;

mysql> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> quit;
```
'password' のところは適当に埋めてくださいね。あとで使います。

続いて「初期スキーマとデータのインポート」なる操作。
```
# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
```

なにこれ、と思ったのでcopilot に聞いてみました。
>このコマンド全体としては、Zabbixの初期設定に必要なSQLスクリプトを解凍し、その内容をzabbixデータベースにインポートする処理を行っています。


なるほどわからん

次の手順では再度MySQL に入ります。
```
# mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
```
#### データベース設定編集（手順2-d）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/3c5a1a17-573f-acb8-9e3c-59aebb402e4d.png)
と書かれているので、vi コマンドでいじります
```
vi /etc/zabbix/zabbix_server.conf
```
で、下のようにいじりました。コメントアウトをはずしてパスワード入力。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/b329e407-2b66-eba7-131b-642dc49c4223.png)

#### zabbix 起動（手順2-e）
公式の手順のままです。
```
# systemctl restart zabbix-server zabbix-agent httpd php-fpm
# systemctl enable zabbix-server zabbix-agent httpd php-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-server.service  → /usr/lib/systemd/system/zabbix-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent.service → /usr/lib/systemd/system/zabbix-agent.service.
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
```



#### zabbix にアクセス（手順2-f）
:::note alert
php の拡張機能を入れ忘れてます。先にインストールすべきだと思います。どのタイミングならば大丈夫かは未検証。
:::
ブラウザで、http://<サーバのIPアドレス>/zabbix と打てばアクセスできるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/b71fcd94-ecfc-18dd-89f0-e90cdd8404ac.png)


....アクセスできません。通信を拒否られてるっぽい。

#### ファイアーウォール空ける
[この記事](https://densan-hoshigumi.com/server/zabbix60-rhel8-apache-mysql-install)どおりに設定しました。
ただし試しにhttp だけを空けてみましょう。
```
# firewall-cmd --add-service=http --zone=public --permanent
success
# firewall-cmd --reload
success
```
これではアクセスできなかったので他のポートも空けました。
※そのあとNSG の設定漏れと気づいて解消しました。http だけでいけるっぽいです。
#### ついにZabbix 画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/6cdc94ee-1268-5180-9c69-48da3c67fd91.png)
Next step を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/fd58c835-3dd3-c04e-12bf-fe3756bd991f.png)
ここまでの手順ではすべてOK でした。Next step
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/a31e3bca-ed33-8800-44f5-0d4482718639.png)
zabbixpass を入れたらエラーが出ました。

そういやphp の拡張機能のことを忘れていましたがそれが原因でしょうか。
#### php インストール
手順は次のようになるらしいです。
1. epel リポジトリインストール
1. remi リポジトリインストール
1. php インストール　ここで拡張機能入れる

それぞれ次のような感じです。
```
# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf module reset php
# dnf module enable php:remi-8.0
# dnf install -y php php-bcmath php-mbstring php-ldap php-gd php-xml php-mysqlnd php-json php-zip php-ctype php-session php-sockets php-gettext
```
最後のコマンドはcopilot にzabbix の要件ページのurl を渡して「拡張機能全部入れるコマンドを教えて」って言えば用意してくれました。きもちい

しかしこれでも同じエラーが出ます。パスワードを確認しても合ってるしなぁ
OS 再起動でもあかん
ここらでスナップショットとりました。
#### データベース作り直してみる
データベースを削除して作り直そうとしたところ、mysql> create user を打つとエラーが発生。
```
mysql> create user zabbix@localhost identified by 'zabbixpass';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql>
```
パスワードポリシーに引っかかってますね。同じパスワードで設定しようとしているのに
はて、最初はできたはず、、、予行で検証した時も通ったのになぁ

強いパスワードを用意して（12字で大文字小文字、記号アリ）、再度データベースを作り、/etc/zabbix/zabbix_server.conf で同じパスワードにしたのち、zcat までやり直したところ先に進めました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/37bf7518-be4b-ea69-0585-ca55ee9bba5d.png)
あとは適当に設定して、初期ID: Admin、pass: zabbix でログインするとダッシュボードが見えました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/ac44552b-1101-9728-d676-dac91dfd4e71.png)



今回はここまでにします。お疲れさまでした。

## 備忘録　パスワード変更で対処　（未解決）
:::note alert
以降の文章は、MySQL の理解が不十分で、ものすごく混乱しています。馬鹿なことやってんなぁという気持ちで読んでください。
:::
スナップショットを復元して、データベースとユーザーを作り直さずにパスワード変更で通るかを見てみましょう。

スナップショットを復元しました。
以下コマンドでパスワード変更。これはデータベースのパスワード。
```
# vi /etc/zabbix/zabbix_server.conf
```
これだけだとデータベースにアクセスできない同じエラーが発生。
ユーザーのパスワードも変更しないと。mysql で、これまでの手順で作成したzabbix データベースのパスワードを変更します。
```
mysql> set password for zabbix@localhost = 'new_password';
ERROR 1133 (42000): Can't find any matching row in the user table
```
は？zabbix おらんかったの？なんで？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/ae2d7cce-284f-b355-b45b-ee99f8a4923e.png)

では以下のコマンドで作ります。
```
mysql> create user zabbix@localhost identified by 'new_password';
Query OK, 0 rows affected (0.21 sec)
```
これだとまだアクセスエラーが出ます（同じやつ）。スキーマのインポートとやらもやり直しましょうか。

```
# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
```
なぜか新しく付けたパスワードが通らない。。。
ユーザーとDB には同じパスワードを使っているんですが。