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

スポンサーリンク

はじめに

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

リラベル

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

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

Configuration | Prometheus
Anopen-sourcemonitoringsystemwithadimensionaldatamodel,flexiblequerylanguage,efficienttimeseriesdatabaseandmodernalertingapproach.

設定

設定内容は下記の通りです。

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

参考

タイトルとURLをコピーしました