4.2のPrometheusからの値取得について
お世話になります。
Zabbix4.2のPrometheusから取得した値によるLLDを試していますが、仕様上困った点があります。
本家サイトのマニュアルによると、保存前処理でPrometheus to JSONを行った後で
そのJSONに対してLLDなどの処理を行うとなっています。(以下)
https://zabbix.com/documentation/4.2/manual/discovery/low_level_discover...
が、おそらくはこのPrometheus to JSONの仕様で、
「Prometheus側でのメトリクス名=JSON側ではname:という変数名」に決め打ちされてしまいます。
(上のURLで言うところの"name": "wmi_logical_disk_free_bytes"です)
これで何が困るかというと、元のPrometheus側でnameというラベルを既に使っていた場合です。
JSONに変換すると、メトリクス名もラベル名も同じname:変数にされてしまい、その後の処理が進みません。
Zabbix側の正規表現で置換等できないかとも思ったんですが、最初に一致した1つだけなら置換できたものの
一致した全ての項目を置換する方法が見つけられませんでした。
何かうまいやり方はありませんでしょうか。
nakaring - 投稿数: 27
自己解決しました。
例え同じラベル名であっても、ディスカバリルール→LLDマクロ→JSONPathの書き方だけで回避できる話でした。
(そもそもJSONの階層構造を正しく理解できていませんでした)
これだけだと何なので、今回の目的であった
「Prometheus(というかcAdvisor)からDockerコンテナをLLDした手順」を残しておきます。
今回は以下のようにテンプレートを作りました。
・HTTPエージェントアイテムを URL:http://{HOST.IP}:8080/metrics で作成。名前やキーは任意。
・ディスカバリルールを、上のアイテムの依存アイテムとして作成。
保存前処理→PrometheusからJSON→パラメータ:container_cpu_user_seconds_total{name=~".+"}
LLDマクロ→LLDマクロ:{#CONTAINER} JSONPath:$.labels['name']
あとはアイテムのプロトタイプで依存アイテムを作成、キー名を例えば container_cpu_user_seconds_total[{#CONTAINER}]
とかすれば、コンテナ毎のCPU使用時間を取ってくるようになりました。
板汚し失礼しました。