zabbix-server建てるときに困ったときの対処法備忘録

最近久しくzabbix-server建ててなかったので、最新の7系を建ててみたのですが、色々詰まった部分があったので備忘録として書いておこうと思いました。

少しでも参考になれば幸いです。

## 環境
OS：AlmaLinux 9.4
Apache：2.4.62
PHP：8.3.14
MySQL：8.0.40
zabbix_server/zabbix_agentd：7.0.6

## 困ったことその1
zabbix-serverと関連モジュールをインストールして
```bash
$ zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -u zabbix-user -p zabbix_db
```
したら、以下エラーが出てきて怒られた。
```
ERROR 1419 (HY000) at line 2494: You do not have the SUPER privilege and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
```
なにこれ。

問題を調べてみると書いてある通りSUPER権限を持っていないかつ`log_bin_trust_function_creators`が0(無効)の設定になっていて、SUPER権限を持ったユーザーしかストアド関数を作成できないみたい。

対策として2つあり、zabbix-userに権限を与えるか、log_bin_trust_function_creatorsを有効化するかだけど、log_bin_trust_function_creatorsを有効化するで良さそう。

ということで以下で解決しました。
```sql
mysql> SET GLOBAL log_bin_trust_function_creators=1;
```
※恒久的に設定しておきたい場合はmy.cnfで以下設定をいれて再起動しておきましょう。
```bash
$ vi /etc/my.cnf
log_bin_trust_function_creators=1

$ systemctl restart mysqlnd.service
```

## 困ったことその2
あとはzabbix-serverをsystemctlで起動しようとしたら以下エラーが。
```
systemd[1]: zabbix-server.service: Can't open PID file /run/zabbix/zabbix_server.pid (yet?) after start: Operation not permitted
systemd[1]: zabbix-server.service: Failed with result 'protocol'.
```
心当たりがあるとすれば`/usr/lib/systemd/system/zabbix-server.service`
で指定している、PIDと、`/usr/local/etc/zabbix_server.conf`で指定している
PIDが食い違っていることがあるか、SELinuxのせいでPIDファイルが生成されていない。

原因はSELinuxっぽかったので無効化する。
```bash
$ vi /etc/selinux/config
```
SELINUX=Enabledをdisabledに変更する
```
SELINUX=disabled
```
※記述ミスには気を付けてください。

あとはreboot(システムの再起動)をして入りなおせばOK
```bash
$ reboot
$ getenforce
Disabled
```
disabledになりました。
やったね。

## 困ったことその3

あとはzabbix_serverを起動したときに以下エラーがコンソールに表示されていた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/dcbe3c34-0973-95b1-c369-182cc427478b.png)
```
テーブルacknowledges, actions, alerts, auditlog, autoreg_host, conditions, config, config_autoreg_tls, connector, connector_tag, corr_condition_tag, corr_condition_tagpair, corr_condition_tagvalue, correlation, dashboard, dashboard_page, dchecks, drules, dservices, event_tag, events, expressions, functions, globalmacro, globalvars, graph_theme, graphs, graphs_items, group_discovery, group_prototype, ha_node, hgset, history_log, history_str, history_text, host_discovery, host_inventory, host_proxy, host_tag, hostmacro, hosts, housekeeper, hstgrp, httpstep, httpstep_field, httptest, httptest_field, httptest_tag, icon_map, icon_mapping, ids, images, interface, interface_snmp, item_condition, item_discovery, item_parameter, item_preproc, item_rtdata, item_rtname, item_tag, items, lld_macro_path, lld_override, lld_override_condition, lld_override_operation, lld_override_ophistory, lld_override_opperiod, lld_override_optag, lld_override_optrends, maintenance_tag, maintenances, media, media_type, media_type_message, media_type_param, mfa, mfa_totp_secret, module, opconditions, operations, opmessage, optag, problem, problem_tag, profiles, proxy, proxy_autoreg_host, proxy_dhistory, proxy_group, proxy_history, regexps, report, report_param, role, role_rule, scim_group, script_param, scripts, service_problem_tag, service_tag, services, sessions, sla, sla_excluded_downtime, sla_service_tag, sysmap_element_url, sysmap_shape, sysmap_url, sysmaps, sysmaps_element_tag, sysmaps_elements, sysmaps_link_triggers, sysmaps_links, tag_filter, task_data, task_remote_command, task_remote_command_result, task_result, token, trigger_tag, triggers, ugset, userdirectory, userdirectory_idpgroup, userdirectory_ldap, userdirectory_media, userdirectory_saml, users, usrgrp, valuemap, valuemap_mapping, widget, widget_fieldがサポートしていない文字コードか照合順序です。
```
エラー内容に答えが書いてくれてる通りで、zabbix_dbの全テーブルで文字コードと照合順序がサポートされていないみたいです。
ログを見るとちゃんと書かれてますね。
```bash
$ less /var/log/zabbix/zabbix_server.log
Zabbix supports only "utf8_bin,utf8mb3_bin,utf8mb4_bin" collation(s). Database "zabbix_db" has default collation "utf8mb4_0900_ai_ci"
```
zabbixがサポートしてるのは`utf8_bin` `utf8mb3_bin` `utf8mb4_bin`ですが、
今回は`utf8mb4_0900_ai_ci`だったせいですね。
どうやら MySQL 8.0からcollationが`utf8mb4_0900_ai_ci`になってるからのようです。

https://qiita.com/seltzer/items/8b5d8a61591e72715d5b


DB内の全テーブルの設定変更していくのもいいですが、
設定段階であれば量も多く面倒なので、DBを作りなおしてしまうのがオススメです。

一旦DBをDROPしてから作り直します。
```sql
mysql> DROP DATABASE zabbix_db;
mysql> CREATE DATABASE `zabbix_db` character set utf8 collate utf8_bin;
```
あとは権限付与してmysqlから抜けます
```sql
mysql> GRANT ALL PRIVILEGES ON `zabbix_db`.* TO "zabbix-user"@"%";
mysql> exit
```
あとはもう一回流し込んであげます。
```bash
$ zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix-user -p zabbix_db
```

最後に各プロセスを再起動させておいて、コンソールを見てみるとエラーが無くなっている！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/f2d24046-6fe4-c69f-66c5-f9cf09c1761c.png)
ｷﾀ――(ﾟ∀ﾟ)――!!

## 困ったことその4
・Zabbix-ServerとZabbix-Agentの疎通が取れない
zabbix get で値は取れているのにグラフに反映されませんでした。
```bash
$ zabbix_get -s “監視ホストのIPアドレス” -k agent.version
```

10050番ポートを開けていて、疎通とれへんやんとなっていたのですが
どうやらシンプルに監視テンプレートで Active Check のものを選んでしまっていたのが原因でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/fcc7919b-f531-46d0-a73f-58cd264589f7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/76cbd962-2f16-4de1-ad51-c98dd2cce3a1.png)

また何かあれば記事にします！
ではでは！