Zabbix で Kubernetes Pod の主要指標を可視化する(深掘りガイド)

— Grafana 連携による Pod CPU・Memory 使用量の動的ダッシュボード実装

📘 概要

以前にも関連内容を扱った記事があるが、より深いレベルでガイドをまとめる必要があると感じ、本記事を作成した。参考になれば幸いだ。

Zabbix で Kubernetes を監視するために Kubernetes Kubelet by HTTP テンプレートを適用すると、
マクロ {$KUBE.API.URL} に設定された IP を基準として、次のようなホストグループが自動生成される。

{$KUBE.API.URL} の IP : Kubernetes/Components: Kubelet

本記事では、そのデータをもとに Pod CPU と Pod Memory 使用量を Grafana で可視化する方法を解説する。
ダッシュボード作成や変数(variable)の基本操作は、以前のシリーズ
🧭 「Zabbixサーバー指標をGrafanaで可視化する」 を参照してほしい。


🧩 Pod Memory の可視化

対象グループ

  • Group: {$KUBE.API.URL} の IP : Kubernetes/Components: Kubelet
  • Item tag: namespace: 実際のネームスペース名
  • Item 例:
    Namespace [argocd] Pod [argocd-applicationset-controller-5867d7759-dksldk] Container [argocd-applicationset-controller]: Working set

このクエリから Pod Memory 使用量(Working set) を可視化できる。
これを変数として扱い、動的ダッシュボードとして構成する。


🧮 変数作成

1️⃣ Group フィルタリング

項目
NameGroup
HideVariable
Query TypeGroup
Group/Kubelet/i

2️⃣ Item tag フィルタリング(namespace)

項目
Namenamespace
Labelネームスペース [Memory]
Query Typeitem tag
Group$Group
Host/.*/
Item Tag/^namespace:\s*([^\s]+)\s*$/
Multi-value
Include All option

3️⃣ Item フィルタリング(Working set)

Working set は Pod の実効メモリ使用量 を示す。

項目
Namememory
LabelPOD別 Memory 使用量
Query Typeitem
Group$Group
Host/.*/
Item Tag$namespace
Item/:\s*Working set$/i
Multi-value
Include All option

💡 Tip

変数の Query Options で Item Tag の代わりに Application が表示されることがある。
その場合は次の手順で API キャッシュをクリアする。

Home → Connections → Data Sources → Zabbix Datasource → Save & Test

それでも解決しない場合はプラグイン更新後に Grafana を再起動:

# grafana-cli plugins update alexanderzobnin-zabbix-datasource
# systemctl restart grafana-server

⚙️ Pod CPU の可視化

対象グループ

  • Group: {$KUBE.API.URL} の IP : Kubernetes/Components: Kubelet
  • Item tag: component: pod
  • Item 例:
    Namespace [argocd] Pod [argocd-applicationset-controller-5867d7759-dksldk]: CPU: Usage seconds, total

このクエリから Pod CPU 使用量(Usage seconds, total) を可視化できる。
こちらも同様に、ネームスペース/Pod 単位の動的分析が可能となる。


🧮 変数作成

1️⃣ Group フィルタリング

(前の Group 変数を再利用)


2️⃣ Item tag フィルタリング(component: pod)

項目
Nameitemtag
HideVariable
Query Typeitem tag
Group$Group
Host/.*/
Item Tag/^\s*component\s*:\s*pod\s*$/

3️⃣ Item フィルタリング(ネームスペース分類用)

CPU データはネームスペース/Pod ごとに膨大となるため、
まずネームスペースラベルを抽出する変数を作成する。

項目
Namecpu_namespace
Labelネームスペース [CPU]
Query Typeitem
Group$Group
Host/.*/
Item Tag$itemtag
Item/^Namespace\s*\[([^\]]+)\].*CPU: Usage seconds, total$/
Regex^Namespace \[(?<text>[^\]]+)\].*
Multi-value
Include All option

4️⃣ Item フィルタリング(Usage seconds, total)

Usage seconds, total は Pod CPU の実使用量に 해당する。

項目
Namepod_cpu
LabelPOD別 CPU 使用量
Query Typeitem
Group$Group
Host/.*/
Item Tag$itemtag
Item/.*/
Regex^(Namespace \[(?:${cpu_namespace:regex})\]\s+Pod \[[^\]]+\]\s+CPU: Usage seconds, total)$
Multi-value
Include All option

📊 パネル作成

1️⃣ POD別 CPU 使用量

  • Visualization: Time series
  • Title: POD別 CPU 使用量
  • Mode: Table / Right(任意)
  • Values: Min / Mean / Max / Last*
  • Query Type: Metrics
  • Group: $Group
  • Host: /.*/
  • Item Tag: $cpu_namespace
  • Item: $pod_cpu

2️⃣ POD別 Memory 使用量

  • Visualization: Time series
  • Title: POD別 Memory 使用量
  • Mode: Table / Right(任意)
  • Values: Min / Mean / Max / Last*
  • Query Type: Metrics
  • Group: $Group
  • Host: /.*/
  • Item Tag: $namespace
  • Item: $memory

💡 Tip

ダッシュボードで Namespace や指標値を All または 複数選択した状態で
時間範囲を “Last 6 hours” など広く設定すると、
データ量(I/O)が多すぎて No data が表示される場合がある。

→ 時間範囲を短くするか、Namespace 単位で分けて分析することを推奨。


🔗 関連記事

🛠 마지막 수정일: 2025.11.14

💡 お困りですか?
Zabbix、Kubernetes、各種オープンソースインフラの構築・運用・最適化・障害解析が必要であれば、いつでもご連絡ください。

📧 メール: jikimy75@gmail.com
💼 サービス: 導入支援 | 性能チューニング | 障害解析コンサルティング