【実務・中級編】ZabbixのPrometheusエグスポーター連携:PrometheusメトリクスをZabbixに直接スクレイピングして一元監視する方法 – 運用監視・オブザーバビリティ活用バイブル

Zabbixを「Prometheusの司令塔」に変える:クラウドネイティブ時代の統合監視戦略

エンジニア諸君。君たちの現場では、GrafanaダッシュボードとZabbixの管理画面を往復する「監視の分断」に疲弊していないか?

「モダンな環境だからPrometheus一択」という思考停止は捨てろ。Zabbixは、その堅牢な通知エンジンとヒストリカルデータの管理能力において、依然として監視基盤の王だ。PrometheusのメトリクスをZabbixに取り込み、「異常検知はZabbix、可視化はGrafana」というハイブリッドな最強の監視スタックを構築する。これが本記事の核心だ。

—

1. ZabbixでPrometheusメトリクスを叩く:HTTPエージェントの極意

Zabbix 4.2以降の「HTTPエージェント」を使えば、外部スクリプトなど不要だ。Prometheusの `/metrics` エンドポイントを直接叩き、Zabbixがネイティブでパースする。

実践:HTTPエージェントの設定

アイテムキーには `web.test.get[…]` ではなく、シンプルに `web.page.get` や `zabbix[host,discovery,interfaces]` を使いたくなるが、ここではHTTPエージェントアイテムを使用する。

キーの設定例:

prom.scrape[“{$PROMETHEUS.URL}”]

プリプロセス(ここが魂だ):
Prometheusのテキスト形式は行指向だ。これをZabbixが扱えるデータに変えるには「正規表現」と「JSONPath/XPath」の組み合わせが肝になる。

1. 正規表現: `^my_metric_name{.} ([0-9.]+)$` で対象行を抽出
2. 出力: `\1` で値のみをキャプチャ

【プロの知見】
膨大なメトリクスを一度に取得すると、Zabbixサーバーの `Preprocessing Manager` がパンクする。`prometheus.to.json` という変換関数をZabbix標準のプリプロセスで賢く使い、特定のラベル(`{env=”prod”}`など)でフィルタリングして、必要なデータだけをDBに流し込め。

—

2. 開発スピードを加速させる:Zabbixの「隠れた神テクニック」

毎日Zabbixを触るなら、マウス操作は捨てろ。

爆速ショートカット&生産性ハック

  • 「G」+「H」: ホスト一覧へ即時遷移。
  • 「G」+「R」: 直近の最新データへダイブ。
  • Dashboardの「Edit」をスキップ: URL末尾に `&action=dashboard.view` ではなく `&action=dashboard.edit` を直打ちしてショートカットキーに登録せよ。

絶対入れるべき「神」設定

  • メディアタイプのスクリプト化: SlackやDiscordへの通知は、標準のWebhookテンプレートをそのまま使うな。必ず`JSON.stringify()`でペイロードを整形し、`message_templates`で「障害発生時」と「復旧時」のUIを統一しろ。

—

3. チーム開発のベストプラクティス:テンプレート管理の「規律」

「誰かが勝手に設定を変更して通知が飛ばなくなった」という悲劇を避けるための構成管理ルールだ。

設定の共有化ルール(YAML/JSON)

ZabbixのGUIでポチポチ設定するのは卒業だ。全てXML/YAMLとしてGit管理せよ。

ベストプラクティス構成例 (`zbx_prometheus_template.yaml`):

チームで共有すべき、Prometheusスクレイピング用テンプレートの断片
zabbix_export:
version: ‘6.0’
templates:

  • template: ‘Prometheus_Generic_Scraper’

items:

  • name: ‘App Request Rate’

type: HTTP_AGENT
key: ‘app.request.rate’
url: ‘{$PROMETHEUS.URL}/metrics’
# プリプロセスでprometheus形式を数値に変換
preprocessing:

  • type: PROMETHEUS_TO_JSON

parameters:

  • ‘http_requests_total{status=”200″}’
  • type: JSONPATH

parameters:

  • ‘$[0].value’

—

4. テックリードからの提言:監視の「ノイズ」を消し去れ

Prometheusから数千のメトリクスを吸い上げると、Zabbixのデータベースが悲鳴を上げる。以下の「監視の断捨離」を徹底せよ。

1. 死活監視とメトリクス監視の分離: サーバーの死活(ICMP/Agent)はZabbixに任せ、アプリケーションのメトリクスはPrometheus経由で「必要なものだけ」をLTV(Long Term Value)に基づいて抽出する。
2. LLD(低レベルディスカバリ)の活用: 手動でアイテムを作るのは悪だ。Prometheusのターゲット情報から、ZabbixのLLDルールで自動的にアイテムを作成せよ。`{#METRIC_NAME}` をマクロとして活用するだけで、管理コストは1/10になる。

最後に

オブザーバビリティとは、ツールを増やすことではない。「何が起きているか」を最短距離でエンジニアに伝えることだ。ZabbixをPrometheusのゲートウェイとして活用し、その圧倒的な信頼性を武器に、君たちのプロダクトをより堅牢なものへ昇華させてほしい。

何かあれば、CLIから `zabbix_get` を叩く前に、もう一度設計を見直せ。現場からは以上だ。

タイトルとURLをコピーしました