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

スポンサーリンク

はじめに

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は下記の通りです。

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
global:
  scrape_interval: 15s
  external_labels:
    monitor: 'codelab-monitor'
scrape_configs:
  - job_name: 'node'
    scrape_interval: 5s
    static_configs:
      - targets: ['<PCのIPアドレス>:9100']

docker-compose.ymlprometheus.ymlを作成したら、Docker Composeで起動します。

docker compose up -d

下記のメトリクスを使って、and/or/unlessを試してみます。

sum(node_cpu_seconds_total) by(mode)

sum(node_cpu_guest_seconds_total) by(mode)

and

andを使うと下記のように、andの右側のグループに要素があるものから、左側のグループの要素が返されています。

sum(node_cpu_seconds_total) by(mode) and sum(node_cpu_guest_seconds_total) by(mode)

or

orを使うと下記のように、orの左側のグループにある要素と、右側のグループの要素から左側のグループになかった要素が返されています。今回の例だと、左側のグループにある要素は全て右側のグループにも要素があるので、左側のグループの要素のみ表示されています。

sum(node_cpu_seconds_total) by(mode) or sum(node_cpu_guest_seconds_total) by(mode)

unless

unlessを使うと下記のように、unlessの左側のグループにある要素から、右側のグループの要素が引かれたものが返されています。

sum(node_cpu_seconds_total) by(mode) unless sum(node_cpu_guest_seconds_total) by(mode)

参考

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