関連記事 :
(ベアメタル / Kubernetes Pod 環境フル対応、Agent2 プラグイン基盤)
Zabbix 7.4 では、MongoDB モニタリングのためにユーザー独自スクリプトを追加する必要はない。Zabbix Agent2 に内蔵された MongoDB プラグインだけで、WiredTiger、Replication、Connection など主要な指標を自動取得できる。ただし実際の運用環境は次の2つに分かれる。
① MongoDB がベアメタル(物理 / VM)サーバーで稼働
② MongoDB が Kubernetes Pod 内で動作し、Service で公開されている環境
この2つはネットワーク構造が大きく異なるため、Agent2 の設定方式も変わる。本稿は Zabbix 7.4 を基準とした実務ガイドである。
1. 対応バージョン
Zabbix
- Zabbix Server/Proxy 7.4 以上(6.x でも動作可能だがプラグイン互換性を考慮)
- Zabbix Agent2 MongoDB プラグイン有効化
MongoDB エンジン
- MongoDB 4.x ~ 7.x
ReplicaSet モニタリング(Node セッション基盤)
ReplicaSet を正確に監視するには、以下2つの要素が必須となる。
- 各ノードの性能指標(WiredTiger、Cursor、Connections など)
- ReplicaSet 全体の状態(rs.status ベースの集約情報)
しかし、この2つを単一ホストに統合することは不可能である。
そのため ReplicaSet = 各ノードを独立したホストとして登録し、個別に性能指標を収集する方式が正解となる。
※ 注意点
Zabbix は ReplicaSet 専用の「Cluster テンプレート」を提供していない。
(MongoDB cluster by Zabbix agent 2 テンプレートは sharded cluster mongos 専用であり、ReplicaSet とは無関係)
ReplicaSet を監視する場合は、以下のガイドが最も正確な方法となる。
▶ Kubernetes 環境 vs ベアメタル環境の構造的違い
■ Kubernetes 環境で可能な理由
Kubernetes では MongoDB Pod がどのノードで稼働していても、
Zabbix Agent2 がインストールされたノード OS から Service(ClusterIP / LoadBalancer IP)を通して全 Pod にアクセスできる。
まとめると:
- Agent2 = ホストノード
- MongoDB = Pod
- 通信 = CNI ネットワークが自動保証
→ そのため ReplicaSet であっても Agent2 内で複数セッションを構成してモニタリングできる。
■ ベアメタル環境ではノードごとに Agent2 を設置するのが基本
物理サーバー(または VM)の ReplicaSet 構成では次のような関係となる。
mongo01 サーバー ↔ mongo01 の Agent2
mongo02 サーバー ↔ mongo02 の Agent2
mongo03 サーバー ↔ mongo03 の Agent2
各 MongoDB はそのサーバー上の Agent2 と 1:1 である必要がある。
他ノードへセッションを構成しても、完全な性能取得ができない場合がある。
→ よってベアメタル ReplicaSet では、全ノードに Agent2 を設置することが正しい方法となる。
▶ Agent2 の mongodb.conf — セッション (Name Session) 定義
ReplicaSet の各ノードへアクセスするため、以下のようにセッションを構成する。
■ ReplicaSet(3ノード)の例
Plugins.Mongodb.Sessions.rs01.Uri=tcp://mongo01_IP:27017
Plugins.Mongodb.Sessions.rs01.User=zbx_monitor
Plugins.Mongodb.Sessions.rs01.Password=<password>
Plugins.Mongodb.Sessions.rs02.Uri=tcp://mongo02_IP:27017
Plugins.Mongodb.Sessions.rs02.User=zbx_monitor
Plugins.Mongodb.Sessions.rs02.Password=<password>
Plugins.Mongodb.Sessions.rs03.Uri=tcp://mongo03_IP:27017
Plugins.Mongodb.Sessions.rs03.User=zbx_monitor
Plugins.Mongodb.Sessions.rs03.Password=<password>
→ ReplicaSet で必要なのはこれだけである。
▶ Zabbix Web UI — Host 構成
■ 各 ReplicaSet ノードを個別ホストとして登録(3ホスト)
ホスト設定例:
| Host | Macro 値 |
|---|---|
| mongo01 | {$MONGODB.CONNSTRING}=rs01 |
| mongo02 | {$MONGODB.CONNSTRING}=rs02 |
| mongo03 | {$MONGODB.CONNSTRING}=rs03 |
各ホストに適用するテンプレート:
MongoDB node by Zabbix agent 2
→ WiredTiger, Cursor, Cache, Connection など、ノード単位の性能を正確に収集。
注意点
- ベアメタル: 各物理サーバーに Agent2 必須
- Kubernetes: Node OS 側の Agent2 一つで複数 Pod にアクセス可能
▶ Cluster テンプレートはどんな時に使うのか?
ReplicaSet では 使用しない。
Cluster テンプレートの用途は sharded cluster(mongos ベース)のみ。
- mongos に適用
- mongos が get_shards によりシャードノードを検出
- 検出された mongod ノードに Node テンプレートを自動適用
→ ReplicaSet には mongos が存在しないため使用不可。
まとめ:
- ReplicaSet = Node テンプレートのみ
- Sharded Cluster = Cluster + Node テンプレートの組み合わせ
▶ 全体構成まとめ
[mongo01] —— Node テンプレート —— rs01
[mongo02] —— Node テンプレート —— rs02
[mongo03] —— Node テンプレート —— rs03
ReplicaSet のポイント:
- Node テンプレート = 個別ノードの性能監視
- Kubernetes = Agent2 一つで複数セッション可能
- ベアメタル = ノードごとに Agent2 必須
- Cluster テンプレート = sharding 専用
▶ 次のガイド(Standalone 基準)
以降の実践ガイドでは ReplicaSet ではなく単一 MongoDB ノードを基準に説明する。
複数ノードでも基本は同じで、少し応用すればよい。
- テンプレート:MongoDB Node by Zabbix agent 2
- URI:単一ノード
- Session:1つだけ構成
2. MongoDB モニタリング用アカウント作成(共通)
MongoDB 認証利用時はモニタリング専用ユーザーを作成する。
use admin
db.createUser({
user: "zbx_monitor",
pwd: "<password>",
roles: [
{ role: "clusterMonitor", db: "admin" },
{ role: "read", db: "local" }
]
})
db.getUser("zbx_monitor")
- clusterMonitor:状態情報の取得に必要
- local DB read:レプリケーション遅延情報に必要

3. Agent2 プラグインのインストールパス確認
MongoDB プラグインが正常にインストールされていれば、以下に配置される。

4. テンプレートマクロ方式 vs Agent2 セッション方式
どちらも動作するが性質が異なる。
✔ テンプレートマクロ方式
Zabbix UI のマクロで Agent2 設定を上書きする方式。
{$MONGODB.CONNSTRING} = tcp://192.168.117.5:27017
{$MONGODB.USER} = zbx_monitor
{$MONGODB.PASSWORD} = <password>
- 利点: UI だけで素早く修正可能
- 欠点: パスワードが UI に露出する
✔ Agent2 セッション方式(推奨)
# デフォルト値
Plugins.Mongodb.Sessions.*.Uri=
Plugins.Mongodb.Sessions.*.User=
Plugins.Mongodb.Sessions.*.Password=
# 変更値
Plugins.Mongodb.Sessions.example_mongodb.Uri=tcp://192.168.117.5:27017
Plugins.Mongodb.Sessions.example_mongodb.User=zbx_monitor
Plugins.Mongodb.Sessions.example_mongodb.Password=<password>

Zabbix 側では:
{$MONGODB.CONNSTRING} = example_mongodb



プラグイン構成のヒント
(A) Default のみ使用する単一 MongoDB の場合
Plugins.Mongodb.Default.Uri=tcp://...
Plugins.Mongodb.Default.User=...
Plugins.Mongodb.Default.Password=...
(B) Sessions 構造で複数インスタンスを監視する場合
セッション名を変えて複数定義するだけでよい。
5. Kubernetes Pod MongoDB モニタリング
Agent2 はホスト OS 側で実行され、MongoDB は Pod 内で動作する。
ClusterIP は外部からアクセスできないため、Service(NodePort または LoadBalancer)経由が必須。
最も実務的なのは LoadBalancer External IP 方式。
例:
Agent2 → Service External IP → MongoDB Pod
192.168.117.90:27017
Plugins.Mongodb.Sessions.K8s.Uri=tcp://192.168.117.90:27017
Plugins.Mongodb.Sessions.K8s.User=zbx_monitor
Plugins.Mongodb.Sessions.K8s.Password=<password>
Zabbix:
{$MONGODB.CONNSTRING} = K8s
6. 主要監視指標
MongoDB プラグインは以下を取得する。
Connections
- 現在接続数
- 最大接続数に対する使用率
- トリガーマクロ:{$MONGODB.CONNS.PCT.USED.MAX.WARN}
Cursors
- オープンカーソル数
- タイムアウト比率
- トリガー:{$MONGODB.CURSOR.TIMEOUT.MAX.WARN} 等
WiredTiger
- 読み書きチケットの利用可能数
- {$MONGODB.WIRED_TIGER.TICKETS.AVAILABLE.MIN.WARN}

7. トラブルシューティング
1) ベアメタル環境
- URI ミス(tcp:// の欠落、ポート誤り)
- mongod.conf の bindIp が 127.0.0.1 → 外部アクセス不可
- Firewall による 27017 ポート遮断
- SELinux / AppArmor が Agent2 の接続をブロック
2) Kubernetes 環境
- NetworkPolicy が Agent2 からのアクセスを拒否している
- LoadBalancer External IP の変更
- Readiness Probe が失敗し Service から除外されている
8. 結論
Zabbix 7.4 での MongoDB モニタリングは、次の一文に要約される。
「Agent2 が MongoDB に接続できる URI を正しく指定すれば、残りはすべて自動で完了する。」
- プラグインパス:
/etc/zabbix/zabbix_agent2.d/plugins.d/ - 6.0 以降、UserParameter は不要
- Kubernetes では External IP を利用
- 最も安定・安全・拡張性が高いのはセッション方式
ベアメタルでも Pod でも、URI が正確であれば Zabbix は環境に左右されない強力な MongoDB 監視基盤となる。
🛠 마지막 수정일: 2025.12.09
💡 お困りですか?
Zabbix、Kubernetes、各種オープンソースインフラの構築・運用・最適化・障害解析が必要であれば、いつでもご連絡ください。
📧 メール: jikimy75@gmail.com
💼 サービス: 導入支援 | 性能チューニング | 障害解析コンサルティング
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.