とほほのPrometheus入門

目次

Prometheusとは

Prometheusをインストールする

https://github.com/prometheus/prometheus/releases/ からシステムに応じたファイルをダウンロード・解凍します。

wget https://github.com/prometheus/prometheus/releases/download/v2.41.0/prometheus-2.41.0.linux-amd64.tar.gz
tar zxvf ./prometheus-2.41.0.linux-amd64.tar.gz
cd ./prometheus-2.41.0.linux-amd64
./prometheus --version

Prometeusを起動する

prometheus.yml を下記の様に編集します。IPアドレスには Prometheus を動かすサーバーのIPアドレスを指定してください。localhost や 127.0.0.1 ではうまく動かないことがあるようです。

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["192.168.100.200:9090"]

prometeus コマンドを起動します。

./prometheus

ブラウザから http://{サーバアドレス}:9090/ にアクセスしてWeb画面にアクセスできれば成功です。

Web画面

ターゲット一覧を表示する

Web画面から [Status]-[Targets] でターゲットの一覧が表示されます。エンドポイントをクリックすると、そのターゲットで参照可能なメトリクスの一覧が表示されます。Prometeus でデフォルトで収集されるメトリクスには下記などがあります。

メトリクス名説明
process_cpu_seconds_totalトータルメモリ使用量
process_resident_memory_bytes使用メモリ

テーブル表示する

[Graph]-[Table] で Expression にメトリクス名を入力すると指定したメトリクスの最新値をテーブル形式で表示します。

グラフ表示する

[Graph]-[Graph] で Expression にメトリクス名を入力すると指定したメトリクスを時系列にグラフ表示します。process_cpu_seconds_total の場合は累値が表示されますが、下記の様に指定すると 1分毎の変動値が表示されます。

rate(process_cpu_seconds_total[1m])

Node Exporterを起動する

Prometheus では様々な Exporters がサポートされています。

上記の中からオフィシャルな exporter である Linux系OS のメトリクス情報を収集する Node/system metrics exporter をダウンロードして起動してみます。

wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar zxvf ./node_exporter-1.5.0.linux-amd64.tar.gz
cd ./node_exporter-1.5.0.linux-amd64
./node_exporter --web.listen-address=:9100

prometheus.yml に下記を追記して prometheus を再起動します。

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["192.168.100.200:9090"]
  - job_name: "node"
    static_configs:
      - targets: ["192.168.100.200:9100"]

下記などのメトリクスをグラフ化できるようになります。

# システムが使用するCPU使用量
rate(node_cpu_seconds_total{mode="system"}[1m])

# ネットワーク受信量(バイト)
rate(node_network_receive_bytes_total[1m])

PromQL

PromQL は Prometheus のデータを参照するための検索言語です。最もシンプルなものはメトリクス名のみを指定します。

node_cpu_seconds_total

値は四則演算することができます。下記の例は総メモリ量から未使用量を引いた、メモリ使用量を取得します。

node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes

下記の様にしてデータを絞り込むことができます。比較演算子には 等しい(=)、等しくない(!=)、正規表現マッチ(=~)、正規表現アンマッチ(!~)を使用できます。

node_cpu_seconds_total{mode="system"}

下記の様にすると、node_cpu で始まるメトリクスをすべて検索します。

{__name__=~"node_cpu.*"}

rate() は累計値から差分値を求めます。

rate(node_cpu_seconds_total{mode="system"}[1m])

sum() は合計値を求めます。下記は mode が idle 以外の値の合計値を求めます。

sum without(mode) (rate(node_cpu_seconds_total{mode!="idle"}[1m]))

avg() は平均値を求めます。下記は CPU=0, CPU=1, ... の複数CPUの平均値を求めます。

avg without(cpu) (rate(node_cpu_seconds_total{mode="system"}[1m]))

組み合わせることで、それぞれのインスタンスについて、平均CPU使用量を求めることができます。

avg without(cpu) (sum without(mode) (rate(node_cpu_seconds_total{mode!="idle"}[1m])))

Prometheus API

メトリクスの一覧を表示します。

curl http://{サーバアドレス}:9090/metrics

PromQL を指定してクエリを行います。

curl http://{サーバアドレス}:9090/api/v1/query?query=node_cpu_seconds_total

POST で呼び出すこともできます。

curl -X POST http://{サーバアドレス}:9090/api/v1/query -d 'query=node_cpu_seconds_total'

時系列データを取得するには query_range を使用します。

curl -s -X POST http://{サーバアドレス}:9090/api/v1/query_range \
    -d query=node_cpu_seconds_total \
    -d start=2022-12-28T00:00:00Z \
    -d end=2023-01-01T00:00:00Z \
    -d step=10m

Grafanaと連携する

Grafana から Prometheus のデータを可視化することができます。

  1. [Configuration]-[Data sources]-[Add data source] で Prometheus を選択する。
  2. [URL] に http://{サーバアドレス}:9090/ などのURLを指定して [Save & test]。
  3. ダッシュボードのパネル編集画面で [Data source] に Prometheus を選択する。
  4. [Builder] 入力モードと [Code] 入力モードを選択できるが、[Code] を選択して PromQL を入力して [Apply]。