【Prometheus】PromQLのand/or/unlessを理解する

2023.03.10
2024.03.24
監視
Docker ComposePrometheusPromQL

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

Prometheusで使うPromQLのand/or/unlessについて紹介していきます。

論理演算子(and/or/unless)

PromQLで使える論理演算子は下記の3種類になります。

演算子結果
and (積集合)vector1 and vector2vector1の要素のうちvector2にもある要素
or (和集合)vector1 or vector2vector1の要素とvector1にないvector2の要素
unless (差集合)vector1 unless vector2vector1の要素からvector2の要素が削除された要素

試してみる

Docker ComposeでPrometheusを起動し、それぞれの演算子を試してみます。

Docker Composeで起動するのに必要なdocker-compose.ymlprometheus.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.ymlprometheus.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)

参考

Support

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

buy me a coffee
Share

Profile

author

Masa

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

buy me a coffee