自宅ラボでは Cephadm を使ってラズパイに Ceph クラスタを構築して遊んでます。
今回は Ceph の Zabbix モジュールを使って Zabbix からラズパイ Ceph クラスタを監視できるようにします。 ただモジュールを有効化するだけでは Zabbix から監視できなかったので、手順を残します。
ちなみにラズパイ Ceph クラスタは CentOS/RockyLinux/AlmaLinux 各種 OS を使った混合環境です。 本当はクラスタ構築の話から投稿したかったのですが、モチベの関係で先にこのネタから投稿します。
Zabbix モジュール有効化
Ceph Manager Daemon (MGR) は、モジュールという形でダッシュボード機能や他製品との連携機能を提供しています。
Cephadm 自体も「Orchestrator モジュール」を使って Ceph を管理しているようです。
公式のモジュール一覧は ここ (でいいんですかねぇ…?)
MGR のモジュールの中に「Zabbix モジュール」があるので、このモジュールを有効化して使います。
ceph mgr module enable zabbix
Zabbix モジュールのパラメータのうち、以下の 2 つを設定します。
- zabbix_host: Zabbix サーバのホスト名
- identifier: Zabbix に登録する Ceph クラスタ名
ceph zabbix config-set zabbix_host zabbix.example.com
ceph zabbix config-set identifier raspi-ceph
今回はその他のパラメータはデフォルト値のまま使いました。 以下のコマンドでパラメータを確認します。
ceph zabbix config-show
または、ダッシュボードから直接有効にすることもできます。
Zabbix 設定
Ceph 用の Zabbix テンプレート ceph-mgr Zabbix module が公開されているので、Zabbix にインポートします。
Zabbix にラズパイ Ceph クラスタ監視用のホストを登録します。
このとき、ホスト名は Zabbix モジュールの identifier
パラメータと同じ文字列を設定する必要があります。
また、テンプレートに ceph-mgr Zabbix module
を指定します。
ここまで設定すれば Ceph の情報を Zabbix から見れるようになるはずですが、Zabbix には監視データが飛んできません。
Cephadm かつラズパイ (ARM) の場合は追加で対応が必要です。
Ceph コンテナでは Zabbix モジュールが使えない
Cephadm で Ceph を構築した場合、各ノードに Ceph コンテナがデプロイされます。
MON/MGR/OSD それぞれ別コンテナとして起動しますが、すべて同じイメージ quay.io/ceph/ceph が使われます。
この公式 Ceph コンテナイメージには、Zabbix モジュールが利用する zabbix_sender
コマンドが同梱されていません。
ceph/ceph-container の Issue によると、依存関係を懸念してサードパーティ製のパッケージは除外しているようです。 Issue にも書かれている通り、必要なパッケージがあれば自分でイメージに追加すれば Zabbix モジュールを使えるようになります。
ARM64 版 Ceph コンテナに zabbix_sender 追加
上述の通り、Cephadm で Zabbix モジュールを使うには zabbix_sender
コマンドをインストールした Ceph コンテナイメージを使う必要があります。
zabbix_sender
は zabbix-agent パッケージからインストールされます。
しかし残念ながら、 ARM64 向けの zabbix-agent パッケージは公開されていません。
そのため、ソースから zabbix_sender
をビルドして Ceph コンテナイメージに追加します。
以下は Dockerfile の例です。 (Dockerfile のうまい書き方があればツイッターでコメントください🙇)
ちなみにリポジトリの内容を書き換えてるのは CentOS 8: Failed to download metadata for repo ‘appstream’ の件があったからです。
FROM centos:centos8 AS builder
RUN sed -i 's/#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/' /etc/yum.repos.d/CentOS-Linux-AppStream.repo && \
sed -i 's/#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/' /etc/yum.repos.d/CentOS-Linux-BaseOS.repo && \
sed -i 's/#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/' /etc/yum.repos.d/CentOS-Linux-Extras.repo && \
yum install -y git zip automake pcre-devel gcc make && \
git clone https://git.zabbix.com/scm/zbx/zabbix.git -b 5.4.10 --depth 1
WORKDIR /zabbix/
RUN ./bootstrap.sh && \
./configure --enable-agent --disable-dependency-tracking && \
make && \
make install
FROM quay.io/ceph/ceph:v16.2.7
COPY --from=builder /usr/local/bin/zabbix_sender /usr/bin/zabbix_sender
この Dockerfile をラズパイなどの ARM64 上でビルドしたら zabbix_sender
入りの Ceph コンテナができます。
Ceph ノード内の設定ファイルを書き換えて、作成したイメージを使うように MGR の設定を変更します。 ここは正式な手順があるかもしれませんが、そこまで追えませんでした。
- /var/lib/ceph/[fsid]/mgr.ceph1.cxsytc/unit.image
- /var/lib/ceph/[fsid]/mgr.ceph1.cxsytc/unit.run
これで Zabbix に Ceph の監視データを飛ばせるようになりました。
Zabbix から見た Ceph
Zabbix モジュール & テンプレートを使った Ceph 監視データはこんな感じです。
苦労した割にあんまり使い勝手よく無さそうな…正直、Grafana のほうが見やすそう…。