【Prometheus】リラベルを試してみる

2023.03.20
2024.03.24
監視
Prometheus

はじめに

Prometheusでのリラベルについて、どんな風に設定するのか、何ができるのかをざっくり紹介していきます。

リラベル

リラベルとは、モニタリングのターゲットのラベルを書き換えることができる設定です。

ターゲットをスクレイピングする前に、そのラベルを書き換えます。

Configuration | 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でマッチしたラベルのみが削除されているのが確認できます。

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee