KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

(参考)RockyLinuxにZabbix4.0をインストールしてみるがうまくいかない。

登録日 :2024/03/23 17:51
カテゴリ :Linux

現在運用しているZabbixのバージョン4.0LTSであり、OSはCentOS7であるのでバージョンアップを進めている。RockyLinuxでZabbix6.0LTSをインストール構築するところまでは確認できた。

一方で、Zabbix4.0のデータをZabbix6.0に移行することが課題となっている。数百台のスイッチのホストデータやトポロジー(マップ)情報はもちろんのこと、これまでの監視ログもデータ移行して見える化しておきたいと考えている。
ホストデータはAPIを使って再度登録したり、MAPはXMLをエクスポートして新しい方にインポートすれば移行できるのではと考えている。
しかし、これまでの監視ログ、トラフィックの過去データが見えなくなってしまうのは少々困ると考えている。このデータも含めて新しいZabbixに移行したいが、データ形式の変換などでうまくいくか、すぐにうまくいくわからない。

そこで、Zabbix4.0LTSは、延長サポートとして2025年まであることを拠り所として、RockyLinuxに行ったんZabbix4.0を構築し、4.0から4.0でデータ移行してすこし延命して、6.0への移行を検討しようかと考えている。

しかし、RockyLinux8のmariadbは10.x以上となっており、Zabbix4.0のデータベース(スキーマ)を構築することができなかった。これはZabbix4.0時点ではmariadb5.5が前提となっており、バージョン間の不整合が発生しているようである。
Zabbix4.0からZabbix6.0にデータベースを移行するのと同じ課題が発生してしまうようだ。
結論としては、簡単にはいかないようなので、Zabbix6.0用にデータベース変換する手順を探った方がよいと感じた。

0. Zabbixのサポート状況及びインストール手順に関して

2024年現在、Zabbix公式としては通常サポートを終了しており、公式サイトからのインストール手順としても普通には表示されていない。
Zabbixサポート期限
Zabbix公式インストール手順 

アーカイブとして、RHL8のZabbix4.0もダウンロード、インストールはできそうである。
Zabbix Official Repository

また、英語版の手順についてもアーカイブもあるようだ。
Zabbix Documentation

Zabbix4.0のインストール手順の参考
参考)ZABBIX 4.0 Server インストール手順

1. Zabbixのインストール

1-1 リポジトリのダウンロード

RockyLinux8のため、rhel/8からリポジトリをダウンロードする

# wget https://repo.zabbix.com/zabbix/4.0/rhel/8/x86_64/zabbix-release-4.0-2.el8.noarch.rpm 
# rpm -ivh zabbix-release-4.0-2.el8.noarch.rpm 
1-2 Zabbixインストール
# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-sender zabbix-get zabbix-web-japanese
### yum -y install mariadb mariadb-server mariadb-libs
1-3. Zabbixデータベースの作成

mariadbのインストール

dnf install mariadb-server --nobest

mariadbのスタート

[root@localhost zabbix]# systemctl enable mariadb
Created symlink /etc/systemd/system/mysql.service  /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service  /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service  /usr/lib/systemd/system/mariadb.service.
[root@localhost zabbix]# systemctl start mariadb

Zabbix用のデータベースの作成

# mysql -u root -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
mysql> quit;

データベースにスキーマ投入

# cd /usr/share/doc/zabbix-server-mysql*/
# zcat create.sql.gz | mysql -u zabbix -p zabbix

残念ながら、スキーマのインポートでエラー

[root@localhost zabbix-server-mysql]# zcat create.sql.gz | mysql -u zabbix -p zabbix
Enter password:
ERROR 1118 (42000) at line 1278: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

これはどうやら、mariadbが10.xにUpgradeしているため。
Zabbix4.0では、mariadb5.xだったこともあり、Upgradeによってキャッシュやバッファサイズなどが大きくなっていることなどが不整合の原因となっている可能性がある。
参考)https://www.zabbix.com/forum/zabbix-troubleshooting-and-problems/405341-performance-issues-after-zabbix-5-0-and-mariadb-upgrade
参考)https://www.zabbix.com/forum/zabbix-help/406355-error-1118-42000-at-line-1278-row-size-too-large-8126

1.4 Zabbix Serverの設定

Zabbixの設定ファイルでデータベースへのアクセスを設定する。
/etc/zabbix/zabbix_server.conf

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<password>
1.5 Zabbixの起動

とりあえず、データベースのエラーを無視して、Zabbixを起動する。

# systemctl restart zabbix-server zabbix-agent httpd
# systemctl enable zabbix-server zabbix-agent httpd

SELinuxの機能でZabbixサーバの起動に失敗した。

[root@localhost zabbix]# systemctl restart zabbix-server zabbix-agent httpd
Job for zabbix-server.service failed because the control process exited with error code.
See "systemctl status zabbix-server.service" and "journalctl -xe" for details.
[root@localhost zabbix]# journalctl -xe
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The unit zabbix-server.service has entered the 'failed' state with result 'exit-code'.
 3 23 20:51:14 localhost.localdomain systemd[1]: Failed to start Zabbix Server.
-- Subject: Unit zabbix-server.service has failed
-- Defined-By: systemd
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit zabbix-server.service has failed.
--
-- The result is failed.
 3 23 20:51:17 localhost.localdomain setroubleshoot[68835]: AnalyzeThread.run(): Cancel pending alarm
 3 23 20:51:17 localhost.localdomain setroubleshoot[68835]: SELinux により/usr/sbin/zabbix_server_mysql  dac_override 能力を使用できません 完全な SELinux メッセージを見るにはseal>
 3 23 20:51:17 localhost.localdomain setroubleshoot[68835]: SELinux により/usr/sbin/zabbix_server_mysql  dac_override 能力を使用できません

*****  プラグイン dac_override (91.4 信頼性) による示唆   *********************************

ドメインがこのアクセスを必要とするかまたは使用しているシステムにおけるパーミッションに誤りがあるファイルを所有しているかを >
このようにします: 全面的な監査を開始し違反しているファイルに関するパス情報を取得し 再度エラーを生成します
そして以下を実行します:

全面的な監査を開始します
# auditctl -w /etc/shadow -p w
AVC の再作成を試みますその後に以下を実行します
# ausearch -m avc -ts recent
PATH 記録を確認できる場合はファイルの所有権/許可をチェックして修正し確認できない場合はバグとして報告します

 *****  プラグイン catchall (9.59 信頼性) による示唆   *************************************
zabbix_server_mysql にはdac_override 機能をデフォルトで持たせるべきと考える場合このようにします: バグとして報告してください ローカルのポリシーモジュールを生成するとこのアクセスを許可することができます
そして以下を実行します: 以下を実行してこのアクセスを許可します:
 # ausearch -c 'zabbix_server' --raw | audit2allow -M my-zabbixserver
# semodule -X 300 -i my-zabbixserver.pp

言われたり通りに、コマンドを実行してみる

[root@localhost zabbix]# ausearch -c 'zabbix_server' --raw | audit2allow -M my-zabbixserver
******************** 重要 ***********************
このポリシーパッケージを有効にするには以下を実行して下さい:

semodule -i my-zabbixserver.pp

[root@localhost zabbix]# semodule -X 300 -i my-zabbixserver.pp
[root@localhost zabbix]#

もう一度、Zabbixサーバの再起動をする。

[root@localhost zabbix]# systemctl restart zabbix-server zabbix-agent httpd
[root@localhost zabbix]#

Zabbixサーバは起動できなかった。

 zabbix-server.service - Zabbix Server
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; vendor preset: disabled)
   Active: activating (auto-restart) (Result: exit-code) since Sat 2024-03-23 20:57:38 JST; 1s ago
  Process: 69448 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
 Main PID: 69450 (code=exited, status=1/FAILURE)

 3 23 20:57:38 localhost.localdomain systemd[1]: Started Zabbix Server.
 3 23 20:57:38 localhost.localdomain systemd[1]: zabbix-server.service: Main process exited, code=e>
 3 23 20:57:38 localhost.localdomain systemd[1]: zabbix-server.service: Failed with result 'exit-co>
~

今のところうまくいかない。。
/var/log/zabbix/zabbix_server.log
を確認したところ、データベースでusersテーブルが空だと怒られている。やはり、データベースの作成に失敗していることが問題かと思われる。

 69505:20240323:205844.255 using configuration file: /etc/zabbix/zabbix_server.conf
 69505:20240323:205844.259 cannot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?)

データベースをみるおとzabbix usersは作成されているので、ここにデータが入らなかったようである。

[root@localhost zabbix-server-mysql]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Y
[root@localhost zabbix-server-mysql]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.3.39-MariaDB MariaDB Server

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

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

MariaDB [(none)]> show global variables like 'innodb_file%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_format    |       |
| innodb_file_per_table | ON    |
+-----------------------+-------+
2 rows in set (0.009 sec)

MariaDB [(none)]> show global variables like 'innodb%prefix';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| innodb_large_prefix |       |
+---------------------+-------+
1 row in set (0.002 sec)

MariaDB [(none)]> SELECT name,row_format FROM INFORMATION_SCHEMA.INNODB_SYS_TABL              like 'zabbix%';
+------------------------------+------------+
| name                         | row_format |
+------------------------------+------------+
| zabbix/acknowledges          | Dynamic    |
| zabbix/actions               | Dynamic    |
| zabbix/alerts                | Dynamic    |
| zabbix/applications          | Dynamic    |
| zabbix/auditlog              | Dynamic    |
| zabbix/auditlog_details      | Dynamic    |
| zabbix/autoreg_host          | Dynamic    |
| zabbix/conditions            | Dynamic    |
| zabbix/config                | Dynamic    |
| zabbix/dchecks               | Dynamic    |
| zabbix/dhosts                | Dynamic    |
| zabbix/drules                | Dynamic    |
| zabbix/dservices             | Dynamic    |
| zabbix/escalations           | Dynamic    |
| zabbix/events                | Dynamic    |
| zabbix/expressions           | Dynamic    |
| zabbix/functions             | Dynamic    |
| zabbix/globalmacro           | Dynamic    |
| zabbix/globalvars            | Dynamic    |
| zabbix/graph_discovery       | Dynamic    |
| zabbix/graph_theme           | Dynamic    |
| zabbix/graphs                | Dynamic    |
| zabbix/graphs_items          | Dynamic    |
| zabbix/group_discovery       | Dynamic    |
| zabbix/group_prototype       | Dynamic    |
| zabbix/history               | Dynamic    |
| zabbix/history_log           | Dynamic    |
| zabbix/history_str           | Dynamic    |
| zabbix/history_text          | Dynamic    |
| zabbix/history_uint          | Dynamic    |
| zabbix/hostmacro             | Dynamic    |
| zabbix/hosts                 | Dynamic    |
| zabbix/hosts_groups          | Dynamic    |
| zabbix/hosts_templates       | Dynamic    |
| zabbix/hstgrp                | Dynamic    |
| zabbix/httpstep              | Dynamic    |
| zabbix/httpstepitem          | Dynamic    |
| zabbix/httptest              | Dynamic    |
| zabbix/httptestitem          | Dynamic    |
| zabbix/icon_map              | Dynamic    |
| zabbix/icon_mapping          | Dynamic    |
| zabbix/ids                   | Dynamic    |
| zabbix/interface             | Dynamic    |
| zabbix/items                 | Dynamic    |
| zabbix/items_applications    | Dynamic    |
| zabbix/maintenances          | Dynamic    |
| zabbix/maintenances_groups   | Dynamic    |
| zabbix/maintenances_hosts    | Dynamic    |
| zabbix/maintenances_windows  | Dynamic    |
| zabbix/mappings              | Dynamic    |
| zabbix/media                 | Dynamic    |
| zabbix/media_type            | Dynamic    |
| zabbix/opcommand             | Dynamic    |
| zabbix/opcommand_grp         | Dynamic    |
| zabbix/opcommand_hst         | Dynamic    |
| zabbix/opconditions          | Dynamic    |
| zabbix/operations            | Dynamic    |
| zabbix/opgroup               | Dynamic    |
| zabbix/opmessage             | Dynamic    |
| zabbix/opmessage_grp         | Dynamic    |
| zabbix/opmessage_usr         | Dynamic    |
| zabbix/optemplate            | Dynamic    |
| zabbix/proxy_autoreg_host    | Dynamic    |
| zabbix/proxy_dhistory        | Dynamic    |
| zabbix/proxy_history         | Dynamic    |
| zabbix/regexps               | Dynamic    |
| zabbix/rights                | Dynamic    |
| zabbix/screen_user           | Dynamic    |
| zabbix/screen_usrgrp         | Dynamic    |
| zabbix/screens               | Dynamic    |
| zabbix/screens_items         | Dynamic    |
| zabbix/scripts               | Dynamic    |
| zabbix/service_alarms        | Dynamic    |
| zabbix/services              | Dynamic    |
| zabbix/services_links        | Dynamic    |
| zabbix/services_times        | Dynamic    |
| zabbix/slides                | Dynamic    |
| zabbix/slideshow_user        | Dynamic    |
| zabbix/slideshow_usrgrp      | Dynamic    |
| zabbix/slideshows            | Dynamic    |
| zabbix/sysmap_element_url    | Dynamic    |
| zabbix/sysmap_url            | Dynamic    |
| zabbix/sysmap_user           | Dynamic    |
| zabbix/sysmap_usrgrp         | Dynamic    |
| zabbix/sysmaps               | Dynamic    |
| zabbix/sysmaps_elements      | Dynamic    |
| zabbix/sysmaps_link_triggers | Dynamic    |
| zabbix/sysmaps_links         | Dynamic    |
| zabbix/timeperiods           | Dynamic    |
| zabbix/trends                | Dynamic    |
| zabbix/trends_uint           | Dynamic    |
| zabbix/trigger_depends       | Dynamic    |
| zabbix/triggers              | Dynamic    |
| zabbix/users                 | Dynamic    |
| zabbix/users_groups          | Dynamic    |
| zabbix/usrgrp                | Dynamic    |
| zabbix/valuemaps             | Dynamic    |
+------------------------------+------------+
97 rows in set (0.009 sec)

MariaDB [(none)]> set global log_bin_trust_function_creators = 0;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> quit;
Bye

以下の手順でZabbixデータベースとusersをいったん削除してやり直してみる。

[root@localhost zabbix]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 53
Server version: 10.3.39-MariaDB MariaDB Server

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

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

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| zabbix             |
+--------------------+
4 rows in set (0.005 sec)

MariaDB [(none)]> drop database zabbix;
Query OK, 97 rows affected (1.314 sec)

MariaDB [(none)]> select user, host from mysql.user;
+--------+-----------------------+
| user   | host                  |
+--------+-----------------------+
| root   | 127.0.0.1             |
| root   | ::1                   |
| root   | localhost             |
| zabbix | localhost             |
| root   | localhost.localdomain |
+--------+-----------------------+
5 rows in set (0.001 sec)

MariaDB [(none)]> drop user zabbix@localhost;
Query OK, 0 rows affected (0.012 sec)

MariaDB [(none)]>
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.001 sec)

MariaDB [(none)]>
MariaDB [(none)]> select user, host from mysql.user;
+------+-----------------------+
| user | host                  |
+------+-----------------------+
| root | 127.0.0.1             |
| root | ::1                   |
| root | localhost             |
| root | localhost.localdomain |
+------+-----------------------+
4 rows in set (0.001 sec)

MariaDB [(none)]>

データベースを削除して、やり直してみたが同じ部分のエラーは解消できない。

[root@localhost zabbix-server-mysql]# zcat create.sql.gz | mysql -u zabbix -p za
Enter password:
ERROR 1118 (42000) at line 1278: Row size too large (> 8126). Changing some colu             r BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
[root@localhost zabbix-server-mysql]#

RockyLinux8で、Zabbix4.0の構築は難しいかもしれない。mariadbのバージョン差の影響が大きい印象である。
また、mariadb10.3で仮にZabbix4.0を起動できたとしても、既存のZabbix4.0(mariadb5.5)からのデータ移行は同じ理由から難しい可能性がある。

そこで、mariadb5.5をRockyLinux8にインストールする方法を模索したが、今のところ解決策が見つかっていない。

1.6 Zabbixにアクセス

もしZabbixサーバを起動できたら、以下の手順でWebからZabbixサーバにアクセスして初期設定を行う。
http://localhost/zabbix
にアクセスして、Zabbixが起動すればOK
初期のログインは

ID:Admin
pass:zabbix

となる

Appendix

mariadbのデータバックアップ及びリストアについてメモ(試してはいない)

$ mysqldump -u root -p[パスワード] --all-databases > /var/tmp/alldb.sql

参考)https://ex1.m-yabe.com/archives/7080

mariadbのデータインポート

mariadb -h EXTERNAL_HOSTNAME -u USERNAME -P PORT -p DATABASE_NAME < export.sql

参考)https://kinsta.com/jp/docs/import-export-mariadb-database-command-line/