【Prometheus】リラベルを試してみる
はじめに
Prometheusでのリラベルについて、どんな風に設定するのか、何ができるのかをざっくり紹介していきます。
リラベル
リラベルとは、モニタリングのターゲットのラベルを書き換えることができる設定です。
ターゲットをスクレイピングする前に、そのラベルを書き換えます。
Configuration | Prometheus
An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.
設定
設定内容は下記の通りです。
1...
2 relabel_configs:
3 - source_labels: [labelname1;labelname2] # 元になるラベル
4 separator: ';' # ラベルを分割している文字
5 target_label: labelname # 書き換えられたラベル
6 regex: (.*) # source_labelsにマッチさせる正規表現
7 modulus: 10 # source_labelsのハッシュを計算するための値
8 replacement: $1 # 置換される値(正規表現でマッチしたグループも使える)
9 action: replace # リラベルアクション
10...
デフォルトで設定されるラベル
デフォルトでターゲットに設定されているラベルには下記のようなものがあります。
ターゲットラベル | 値 |
---|---|
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
は下記の通りです。
1version: '3'
2services:
3 prometheus:
4 image: prom/prometheus
5 volumes:
6 - ./prometheus.yml:/etc/prometheus/prometheus.yml
7 ports:
8 - '9090:9090'
9 node-exporter:
10 image: quay.io/prometheus/node-exporter
11 ports:
12 - 9100:9100
13 volumes:
14 - ./proc:/host/proc
15 - ./sys:/host/sys
16 - ./rootfs:/rootfs
ベースとなる設定ファイルのprometheus.yml
は下記の通りです。
1global:
2 scrape_interval: 15s
3scrape_configs:
4 - job_name: 'node'
5 static_configs:
6 - targets: ['<PCのIPアドレス>:9100']
7 labels:
8 app: prometheus
9 env: dev
Docker Composeでコンテナを起動します。
1docker compose up -d
初期の状態のラベルは下記のようになっています。Discovered Labels側がリラベルされる前のラベルとTarget Labelsにあるのがリラベル後のラベルになります。
replace
まずはreplace
を試してみます。
prometheus.yml
を下記のように変更します。
1global:
2 scrape_interval: 15s
3scrape_configs:
4 - job_name: 'node'
5 static_configs:
6 - targets: ['<PCのIPアドレス>:9100']
7 labels:
8 app: prometheus
9 env: dev
10 relabel_configs:
11 - source_labels: [job]
12 regex: '(.*)'
13 replacement: '${1}-job'
14 target_label: new_job_name
15 action: replace
16 - source_labels: [__address__]
17 regex: '(.*)'
18 target_label: target_ip_address
19 action: replace
20 - source_labels: [app, env]
21 regex: '((.*);(.*))'
22 replacement: '${2}_${3}'
23 target_label: app
24 action: replace
コンテナを再起動して、設定を読み込みます。
1docker compose restart
Target Labelsは下記のようになります。source_labels
をもとに新しいラベルが作成されたり、元のラベルを書き換えたりできています。
drop
次は、drop
を試します。
prometheus.yml
を下記のように変更します。
1global:
2 scrape_interval: 15s
3scrape_configs:
4 - job_name: 'node'
5 static_configs:
6 - targets: ['<PCのIPアドレス>:9100']
7 labels:
8 app: prometheus
9 env: dev
10 relabel_configs:
11 - source_labels: [env]
12 regex: dev
13 action: drop
コンテナを再起動して、設定を読み込みます。
1docker compose restart
env=dev
のラベルがついているターゲットが削除(Drop)されています。
labelmap
次は、labelmap
を試します。
prometheus.yml
を下記のように変更します。
1global:
2 scrape_interval: 15s
3scrape_configs:
4 - job_name: 'node'
5 static_configs:
6 - targets: ['<PCのIPアドレス>:9100']
7 labels:
8 app: prometheus
9 env: dev
10 relabel_configs:
11 - regex: '(app|env)'
12 replacement: 'prom_${1}'
13 action: labelmap
コンテナを再起動して、設定を読み込みます。
1docker compose restart
regex
でマッチしたラベル名から新しいラベルが作られているのがわかります。
labeldrop
最後は、labeldrop
を試します。
prometheus.yml
を下記のように変更します。
1global:
2 scrape_interval: 15s
3scrape_configs:
4 - job_name: 'node'
5 static_configs:
6 - targets: ['<PCのIPアドレス>:9100']
7 labels:
8 app: prometheus
9 env: dev
10 relabel_configs:
11 - regex: env
12 action: labeldrop
コンテナを再起動して、設定を読み込みます。
1docker compose restart
regex
でマッチしたラベルのみが削除されているのが確認できます。