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が表示されなくなった。)