Prometheusのrelabel configの挙動がドキュメントからだと良くわからなかったのと、すぐ忘れそうなので実際に試してみた結果をざっとメモっておく。
1. scrape結果に含まれるlabelは弄くれない模様
例えばnode_exporterが公開しているメトリクスにnode_cpuというメトリクスがあり、このメトリクスにはcpuというラベルがあるがこれをrelabel configで弄るのは不可能だった。
2. action=replace
source_labels
で指定したラベルの値をseparator
でjoinした結果に対してregex
の正規表現でマッチした結果をreplacement
で置き換えて、target_label
にセットする。
設定例
relabel_configs:
- source_labels: [__address__, __metrics_path__]
separator: ;
target_label: relabel
regex: ([^:]+):(\d+);\/(.*)
replacement: ${1}_${2}_${3}
__address__
がlocalhost:9100
、__metrics__path__
が/metrics
の場合、relabel
の値としてlocalhost_9100_metrics
がセットされる。
また、target_label
でregexのマッチ結果の後方参照値をラベル名にセットすることも出来る。
target_label: relabel_${2}
とセットするとラベル名がrelabel_9100
になる。
3. action=keep
source_labels
で指定したラベルの値をseparator
でjoinした結果に対してregex
の正規表現でマッチした結果のみを残し、マッチしないケースを除外する。
設定例
relabel_configs:
- source_labels: [__address__, __metrics_path__]
separator: ;
regex: localhost:\d+;\/.*
action: keep
上記の場合__address__
にlocalhost
とそれ以外の値が設定される場合はlocalhost
以外は除外される。
4 action=drop
action=keep
のケースと逆にregex
にマッチする項目を除外して、マッチしない項目を残す。3の例でaction=drop
に変更すると__address__
がlocalhost
のもののみが除外される。
5 action=hashmod
source_labels
をseparator
でjoinした結果のハッシュ値をmodulus
で指定された値でmodした結果をtarbet_label
にセットする模様。
6 action=labelmap
regex
の正規表現にマッチするラベル名をreplacement
で置き換える。
設定例
relabel_configs:
- regex: __(address|metrics_path)__
replacement: ${1}_relabel
action: labelmap
上記の例だとaddress_relabel
とmetrics_path_relabel
というラベルが追加される。値はそれぞれ__address__
、__metrics_path__
のそれ。
7. action=labeldrop
regex
でマッチしたラベルを削除する。
設定例
relabel_configs:
- regex: job
action: labeldrop
上記の例ではjob
ラベルを削除する。
8. action=labelkeep
action=labeldrop
の逆で、regex
でマッチしたラベルのみを残す。7の例でaction: labelkeep
にするとjob
ラベル以外を削除する。
(但し、実際にこれをやると__scheme__
や__metrics_path__
等のラベルが削除されてmetricsが表示されなくなった。)