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
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画面から [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])
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 は 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])))
メトリクスの一覧を表示します。
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 から Prometheus のデータを可視化することができます。