LoginSignup
2

More than 3 years have passed since last update.

prometheusをデータソースにしたgrafanaのgroups/tagsの使い方

Posted at

モチベーション

grafanaのtemplatingを使ってでprometheusのラベルをガチャガチャやっていると項目が増えてきてポチポチ選ぶのが面倒な場面が出てくると思います。
これを(ある程度)解消できる groups/tags という機能があるということで使ってみたのですが思ったより直感的にパパっと使えなかったので理解するためのメモです。

ゴール

prometheusのlabelの値の一部をtagにして使えるようにする

言葉で説明するの難しい…最終的にできたものを見るのが早い

tag.gif
こんなのを作る

やってみよう

環境

prometheus 2.10.0
grafana 6.2.2

使用するメトリクス

sample_metrics{label="hoge-1"} 1
sample_metrics{label="hoge-2"} 1
sample_metrics{label="hoge-3"} 1
sample_metrics{label="hoge-ex1"} 1
sample_metrics{label="hoge-ex2"} 1
sample_metrics{label="fuga-11"} 1
sample_metrics{label="fuga-12"} 1
sample_metrics{label="fuga-13"} 1
sample_metrics{label="piyo-xxx"} 1
sample_metrics{label="peko-vvv"} 1

今回はこの label の値の - の前の文字列をtagとして利用したいと思います
hoge fuga piyo peko をtagにする想定ですね

grafanaで前もって元になるvariableを設定しておきます
スクリーンショット 2019-06-13 19.03.31.png

経過

なにはともあれドキュメントを見てみたのですが
https://grafana.com/docs/reference/templating/#value-groups-tags
すごいあっさりしてる…
実験的な機能らしいので仕方ないか

Tags query でtagになる項目の一覧を出して
Tag values query で出したtagの項目を使ってどうするか
のような感じみたいです。

Tagを得る

なにはともあれ欲しいtagを得る必要があります。
直書きで列挙したいのですが、そういうのはできずクエリで得る必要があるようです。
prometheusだとこれらを使います
https://grafana.com/docs/features/datasources/prometheus/#templating

これはprometheusのlabel_replaceを使えば多少強引だけどイケる…と思ったらダメみたい。
https://github.com/grafana/grafana/issues/11674
variablesと同じようにregexがあればできるのですがtagはquery一発で出す必要があります。

どうやら前もってtag用のlabelをメトリクスに付与しておく必要があるみたい

のでprometheusのconfigで metric_relabel_config を使います。
上記のメトリクスに対してこのような感じでrelabelしていきます

prometheus.yaml(抜粋)
  - job_name: 'sample'
    static_configs:
      - targets: ['target-host']
    metric_relabel_configs:
      - source_labels: ["label"]
        target_label: tag
        regex: "(.+)-.+"

名前 tag で対象ラベルの - の前の文字列を値にしたラベルが作られます

で、改めて Tags query
label_values(tag)
として、今回の目的のtagが得られました

スクリーンショット 2019-06-13 19.04.41.png

Tagを使う

ようやくTagを得ることができましたが、これだけではもちろん動作しません。
スクリーンショット 2019-06-13 19.16.02.png
動作を Tag values query で設定する必要があります。
これはドキュメントに書いてあるように、
Tagをポチッとやった時に連動させたい値の一覧を得る
といった感じです。
Tagの値は$tagで使うことができます。
今回ですと例えば、
tag fuga から fuga-11 fuga-12 fuga-13 を得たい
というようなことになりますので、
label_values({label=~"$tag.*"},label)
大体こんな感じです。
スクリーンショット 2019-06-13 20.24.22.png

これで今回の目的を達成することができ、冒頭のgifのような動作をすることができるようになりました。

雑感やら

あくまで実験的な機能なので多くを期待するのはよくないです。
でもこの先機能が充実していくような雰囲気もあまり感じられないような。

とにかくtagを得るのが面倒すぎではと思うんですけど、他のdatasourceだとこれが使いやすかったりするんでしょうか。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2