はじめに
Prometheusでのリラベルについて、どんな風に設定するのか、何ができるのかをざっくり紹介していきます。
リラベル
リラベルとは、モニタリングのターゲットのラベルを書き換えることができる設定です。
ターゲットをスクレイピングする前に、そのラベルを書き換えます。

設定
設定内容は下記の通りです。
...
relabel_configs:
- source_labels: [labelname1;labelname2] # 元になるラベル
separator: ';' # ラベルを分割している文字
target_label: labelname # 書き換えられたラベル
regex: (.*) # source_labelsにマッチさせる正規表現
modulus: 10 # source_labelsのハッシュを計算するための値
replacement: $1 # 置換される値(正規表現でマッチしたグループも使える)
action: replace # リラベルアクション
...
デフォルトで設定されるラベル
デフォルトでターゲットに設定されているラベルには下記のようなものがあります。
ターゲットラベル | 値 |
---|---|
job | 設定のjob_name |
__adress__ | <host>:<port> |
instance | __adress__ |
__scheme__ | スキーマ |
__metrics_path__ | メトリクスのパス |
__param_<name> | <name> というURLパラメータ |
__scrape_interval__ | スクレイプするインターバル 実験的に追加されているため、削除される可能性もある |
__scrape_timeout__ | スクレイプ時のタイムアウト 実験的に追加されているため、削除される可能性もある |
先頭が__
のラベルはリラベル後に削除されます。
Relabel Action
replace
: 値を書き換えるlowercase
: 小文字に変換uppercase
: 大文字に変換keep
: マッチしたターゲットを残すdrop
: マッチしたターゲットを削除keepequal
: source_labelsとtarget_labelが同じなら残すdropequal
: source_labelsとtarget_labelが同じなら削除hashmod
: ハッシュをmodした値を計算labelmap
: ラベル名の変換labeldrop
: マッチしたラベルを削除labelkeep
: マッチしたラベルを残す
試してみる
それでは、実際にリラベルをいくつか試してみます。
今回はDocker Composeを使ってPrometheusとnode exporterを用意します。
docker-compose.yml
は下記の通りです。
version: '3'
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- '9090:9090'
node-exporter:
image: quay.io/prometheus/node-exporter
ports:
- 9100:9100
volumes:
- ./proc:/host/proc
- ./sys:/host/sys
- ./rootfs:/rootfs
ベースとなる設定ファイルのprometheus.yml
は下記の通りです。
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['<PCのIPアドレス>:9100']
labels:
app: prometheus
env: dev
Docker Composeでコンテナを起動します。
docker compose up -d
初期の状態のラベルは下記のようになっています。Discovered Labels側がリラベルされる前のラベルとTarget Labelsにあるのがリラベル後のラベルになります。
replace
まずはreplace
を試してみます。
prometheus.yml
を下記のように変更します。
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['<PCのIPアドレス>:9100']
labels:
app: prometheus
env: dev
relabel_configs:
- source_labels: [job]
regex: '(.*)'
replacement: '${1}-job'
target_label: new_job_name
action: replace
- source_labels: [__address__]
regex: '(.*)'
target_label: target_ip_address
action: replace
- source_labels: [app, env]
regex: '((.*);(.*))'
replacement: '${2}_${3}'
target_label: app
action: replace
コンテナを再起動して、設定を読み込みます。
docker compose restart
Target Labelsは下記のようになります。source_labels
をもとに新しいラベルが作成されたり、元のラベルを書き換えたりできています。
drop
次は、drop
を試します。
prometheus.yml
を下記のように変更します。
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['<PCのIPアドレス>:9100']
labels:
app: prometheus
env: dev
relabel_configs:
- source_labels: [env]
regex: dev
action: drop
コンテナを再起動して、設定を読み込みます。
docker compose restart
env=dev
のラベルがついているターゲットが削除(Drop)されています。
labelmap
次は、labelmap
を試します。
prometheus.yml
を下記のように変更します。
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['<PCのIPアドレス>:9100']
labels:
app: prometheus
env: dev
relabel_configs:
- regex: '(app|env)'
replacement: 'prom_${1}'
action: labelmap
コンテナを再起動して、設定を読み込みます。
docker compose restart
regex
でマッチしたラベル名から新しいラベルが作られているのがわかります。
labeldrop
最後は、labeldrop
を試します。
prometheus.yml
を下記のように変更します。
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['<PCのIPアドレス>:9100']
labels:
app: prometheus
env: dev
relabel_configs:
- regex: env
action: labeldrop
コンテナを再起動して、設定を読み込みます。
docker compose restart
regex
でマッチしたラベルのみが削除されているのが確認できます。