【Prometheus】PromQLのand/or/unlessを理解する
2023.03.10
2024.03.24
監視
Docker ComposePrometheusPromQL
はじめに
Prometheusで使うPromQLのand/or/unlessについて紹介していきます。
論理演算子(and/or/unless)
PromQLで使える論理演算子は下記の3種類になります。
演算子 | 式 | 結果 |
---|---|---|
and (積集合) | vector1 and vector2 | vector1の要素のうちvector2にもある要素 |
or (和集合) | vector1 or vector2 | vector1の要素とvector1にないvector2の要素 |
unless (差集合) | vector1 unless vector2 | vector1の要素からvector2の要素が削除された要素 |
試してみる
Docker ComposeでPrometheusを起動し、それぞれの演算子を試してみます。
Docker Composeで起動するのに必要なdocker-compose.yml
とprometheus.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
1global:
2 scrape_interval: 15s
3 external_labels:
4 monitor: 'codelab-monitor'
5scrape_configs:
6 - job_name: 'node'
7 scrape_interval: 5s
8 static_configs:
9 - targets: ['<PCのIPアドレス>:9100']
docker-compose.yml
とprometheus.yml
を作成したら、Docker Composeで起動します。
1docker compose up -d
下記のメトリクスを使って、and/or/unlessを試してみます。
1sum(node_cpu_seconds_total) by(mode)
1sum(node_cpu_guest_seconds_total) by(mode)
and
and
を使うと下記のように、and
の右側のグループに要素があるものから、左側のグループの要素が返されています。
1sum(node_cpu_seconds_total) by(mode) and sum(node_cpu_guest_seconds_total) by(mode)
or
or
を使うと下記のように、or
の左側のグループにある要素と、右側のグループの要素から左側のグループになかった要素が返されています。今回の例だと、左側のグループにある要素は全て右側のグループにも要素があるので、左側のグループの要素のみ表示されています。
1sum(node_cpu_seconds_total) by(mode) or sum(node_cpu_guest_seconds_total) by(mode)
unless
unless
を使うと下記のように、unless
の左側のグループにある要素から、右側のグループの要素が引かれたものが返されています。
1sum(node_cpu_seconds_total) by(mode) unless sum(node_cpu_guest_seconds_total) by(mode)
参考
Share
関連記事
【Prometheus】Alertmanagerをローカルで使ってみる
2021.12.28
PrometheusからIstioのメトリクスを確認する
2022.10.29
【Elastic Stack】Logstash設定のきほん
2022.05.24
【Prometheus】ローカルでPromxyを動かしながら理解する
2022.12.25