この記事について
これは2025年1月に AlmaLinux 9 で zabbix サーバを立てたとき悩んだポイントをまとめた備忘録である。
この記事は試行錯誤してなんとか動かした記録であり、ハマらないように構築するならおそらく(すべての組み合わせを試したわけではないため、おそらく)「まとめ」の構成にするのが早い。
ただし2025年3月にまとめたものなので、将来においてはこの記事に書かれている問題が解決している可能性がある。
サーバ構成
サーバ OS は AlmaLinux OS 9.5
ウェブサーバは nginx
データベースには PostgreSQL を使うことにした。
また、PostgreSQL の TimescaleDB extension なるものが高速処理に適しているそうなので、これも使ってみることにした。
悩んだポイント
どこからパッケージを入れ、どのバージョンにするか決めなければならない。
zabbix-server
どこから入れるかは、2つの選択肢がある
- EPEL リポジトリ
- zabbix リポジトリ
リポジトリにより、入れられる zabbix-server のバージョンが異なる
-
EPEL リポジトリ
- zabbix (6.0) from epel
- zabbix7 (7.0) from epel
-
zabbix リポジトリ(https://www.zabbix.com/download 2025年3月時点の選択肢)
- zabbix (7.2) from zabbix
- zabbix (7.0 LTS) from zabbix
- zabbix (6.0 LTS) from zabbix
- zabbix (5.0 LTS) from zabbix
- (選択したバージョンのリポジトリが入るが、どれを入れてもリポジトリ名は同じになる)
zabbix-server の DB に使う PostgreSQL Server
どこから入れるかは、2つの選択肢がある
- AlmaLinux OS の appstream リポジトリ
- PGDG リポジトリ
リポジトリにより、入れられる PostgreSQL Server のバージョンが異なる
- AlmaLinux OS の appstream リポジトリ(9.0, 9.2, 9.4)
- postgresql(13) from appstream
- postgresql:15 from appstream (AlmaLinux 9.2 以降)
- postgresql:16 from appstream (AlmaLinux 9.4 以降)
- (dnf module で切り替える)
-
PGDG リポジトリ(https://download.postgresql.org/pub/repos/yum/ 2025年3月時点の選択肢)
- postgresql12 from pgdg12
- postgresql13 from pgdg13
- postgresql14 from pgdg14
- postgresql15 from pgdg15
- postgresql16 from pgdg16
- postgresql17 from pgdg17
- (pgdg-redhat-repo-latest.noarch.rpm をインストールすると、バージョン違いのリポジトリが複数入る)
PostgreSQL Server に導入する TimescaleDB
どこから入れるかは、3つの選択肢があるようだ
- EPEL リポジトリ
- TimescaleDB リポジトリ
- PGDB リポジトリ
インストールされている PostgreSQL Server のパッケージに適合した TimescaleDB をインストールする
- EPEL リポジトリ
- timescaeldb from epel
-
TimescaleDB リポジトリ
- timescaledb-2-postgresql-12 from timescale_timescaledb
- timescaledb-2-postgresql-13 from timescale_timescaledb
- timescaledb-2-postgresql-14 from timescale_timescaledb
- timescaledb-2-postgresql-15 from timescale_timescaledb
- timescaledb-2-postgresql-16 from timescale_timescaledb
- timescaledb-2-postgresql-17 from timescale_timescaledb
- PGDB リポジトリ
- timescaledb_12 from pgdg12
- timescaledb_13 from pgdg13
- timescaledb_14 from pgdg14
- timescaledb_15 from pgdg15
- timescaledb_16 from pgdg16
- timescaledb_17 from pgdg17
どんな問題が起きたか
appstream の PostgreSQL Server と EPEL の TimescaleDB
EPEL の TimescaleDB でサポートされているのは appstream の postgresql(13) である。
postgresql:15 や postgresql:16 はサポートされておらず、組み込んで起動するとこのようなエラーになる。
FATAL: incompatible library "/usr/lib64/pgsql/timescaledb.so": version mismatch
DETAIL: Server is version 16, library is version 13.
LOG: database system is shut down
postgresql:15 や postgresql:16 は 9.0 のときには存在しなかったバージョンなので、EPEL はそれらに対応するパッケージは作らないつもりなのかもしれない。
EPEL の zabbix7 と nginx
EPEL の zabbix7-web パッケージには Apache 用の設定ファイルが含まれているものの、nginx 用の設定ファイルが含まれていない。
一方 zabbix リポジトリ の zabbix には zabbix-nginx-conf というパッケージがあり、nginx 用の設定ファイルが含まれている。
EPEL の zabbix7-web パッケージを使うには、zabbix リポジトリの srpm を解凍して、zabbix-nginx.conf を持ってくるとよい。
EPEL の zabbix7 と TimescaleDB
EPEL の zabbix7-dbfiles-pgsql には zabbix 用のスキーマファイルが含まれているものの、TimescaleDB 用のスキーマファイルが含まれていない。
一方 zabbix リポジトリ の zabbix には zabbix-sql-scripts というパッケージがあり、TimescaleDB 用のスキーマファイルが含まれている。
EPEL の zabbix7-web パッケージを使うには、zabbix リポジトリの srpm を解凍して、database/postgresql/timescaledb/schema.sql を実行するとよい。
監視対象としての PostgreSQL Server 17
bgwriter と checkpoints の値が取れない。おそらくまだ postgresql_agent が PostgreSQL 17 に対応していない。
この件についての(agent2 についてのものだが)バグレポート
- PostgreSQL 17 で統計用テーブルの構造が変わった
- zabbix-agent の postgresql テンプレートは従来の構造を想定して統計を拾いに行っているため
TimescaleDB 2.16, 2,17 での問題
"Last 1 day" のグラフは表示されるが、"Last 30 days" にすると "aggregated compressed column not found" という文字が表示されてグラフが表示されない。
これは TimescaleDB のバグ の影響らしい。
TimescaleDB はバグを直した 2.18 をリリースしたが、2.18 になっても解決しないっぽい。
この workaround を設定すると問題は出なくなる。
EPEL の TimescaleDB は 2.10 なので、この問題には遭遇しないと思われる。
私が最終的にどの組み合わせで構築したか
稼働させる必要があり、一からの構築し直しを繰り返せなかったため、おすすめの構成とは若干異なる。
- zabbix-server
- zabbix リポジトリ から zabbix 7.0
最も新しい LTS なので 7.0 にした - PostgreSQL
- PGDG から postgresql17
TimescaleDB のインストールガイドが PGDG を案内していたので
また、新しいのがよかったので最新の 17 にした - TimescaleDB
- TimescaleDB リポジトリ から timescaledb-2-postgresql-17
TimescaleDB のインストールガイドが TimescaleDB リポジトリを案内していたので
バージョンは PostgreSQL Server にあわせたもの - 監視対象の PostgreSQL 17
- bgwriter と checkpoints のアイテムを無効にした
まとめ
監視対象の PostgreSQL 17 からは取得できない監視アイテムがある
おそらく zabbix-agent が未対応なため、PostgreSQL 17 ではすべての監視アイテムを取得できない。
エラーが出続けるので特定の監視アイテムを無効にするか、サービスへの採用バージョンを選べるなら PostgreSQL 16 までにしておくとよいかもしれない。
おすすめサーバ構成1
リポジトリを追加しない構成
- web サーバ
- Apache を用いる
- zabbix-server
- EPEL リポジトリの zabbix 7.0 を使う
最も新しい LTS である。
web サーバは Apache でなければならない - PostgreSQL + TimescaleDB
- AlmaLinux OS の appstream リポジトリから postgresql:16 を使い、TimescaleDB を使わない。
比較的新しい PostgreSQL を使える。
おすすめサーバ構成2
zabbix リポジトリだけ追加した構成
- web サーバ
- Apache でも nginx でもよい
- zabbix-server
- zabbix リポジトリの zabbix 7.0 を使う
最も新しい LTS である。
Apache でも nginx でも大丈夫だし、TimescaleDB 用のスキーマファイルもある。 - PostgreSQL + TimescaleDB パターン1
- AlmaLinux OS の appstream リポジトリから postgresql:16 を使い、TimescaleDB を使わない。
比較的新しい PostgreSQL を使える。 - PostgreSQL + TimescaleDB パターン2
- AlmaLinux OS の appstream リポジトリから postgresql(13) を使い、TimescaleDB を使う。
TimescaleDB を使える。
おすすめサーバ構成3
zabbix リポジトリと PGDG リポジトリを追加した構成
- web サーバ
- Apache でも nginx でもよい
- zabbix-server
- zabbix リポジトリの zabbix 7.0 を使う
最も新しい LTS である。
Apache でも nginx でも大丈夫だし、TimescaleDB 用のスキーマファイルもある。 - PostgreSQL + TimescaleDB
- PGDG の postgresql-16 を使い、PGDG の TimescaleDB を使う。
比較的新しい PostgreSQL と TimescaleDB を使える。
監視対象に PostreSQL Server 17 が入ってしまうので postgresql-17 は使わない。
TimescaleDB の workaround を適用する。
おすすめサーバ構成4
- PostgreSQL を使わない
- 試していないがこのほうが楽かもしれない。身もフタもない話であるが、そう言いたくなるくらい色々あった(で、この記事を書いた)。
MySQL のほうは MariaDB もあり、それはそれで何かあるかもしれないが、試していないのでわからない。