はじめに
本記事では、Promethesについてざっくり解説して、実際に簡単な監視をしてみたいと思います。
実際に試す際は、ローカルにDocker Composeで構築します。
Prometheusとは
Prometheusとは、メトリクスに基づいた監視とアラートができるツールキットです。
メトリクスとは、特定の対象を測定した数値です。(メモリの使用率とか)
Prometheusはメトリクス管理ソリューションとして広く使用されており、Kubernetesとも組み合わせて利用されます。

特徴
Prometheusには以下のような特徴があります。
- メトリクスとキー/バリューの組み合わせで識別する時系列データ(多次元データモデル)
- PromQLというクエリ言語でデータ抽出
- 分散ストレージに依存しない
- HTTPによるPull型の監視
- ゲートウェイを中継した時系列データのPush
- サービスディスカバリもしくは設定による監視対象の取得
- グラフ化やダッシュボードの作成
- メトリクス形式がさまざまなツールやサービスからサポートされている
グラフ化の部分はGrafanaなどが使われたりします。
アーキテクチャ
Prometheusはいくつかのコンポーネントから構成されています。
Prometheusのドキュメントより
Alertmanagerでアラートを出したり、exporterを利用してPrometheus形式のメトリクスを出力したりします。
exporterはさまざまな種類のものがあります。

Docker Composeで試す
Docker Composeを使ってローカルで動かしてみます。
Prometheusの設定ファイル
まずはPrometheusの設定ファイルを作成します。
今回監視するのは、Prometheus自身とnode-exporterのコンテナになります。
設定ファイルprometheus.yml
は以下の通りです。
global:
scrape_interval: 15s # デフォルトの監視対象にpullする間隔
external_labels: # 外部と通信するときのラベル
monitor: 'codelab-monitor'
scrape_configs: # 監視対象ごとの設定
- job_name: 'prometheus' # Prometheus自身の監視
scrape_interval: 5s # デフォルトの間隔を上書き
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets: ['<PCのIPアドレス>:9100']
node-exporter
のIPアドレスはローカルPCのIPアドレスになるので、ifconfig
などでIPアドレスを調べて追記してください。PrometheusからみるとlocalhostはPrometheus自身になるので、node-exporter
のIPアドレスをlocalhostにすると通信できないので注意してください。
docker-compose.yml
Prometheusとnode-exporterのコンテナをDocker Composeで構築します。
docker-compose.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
Docker Composeの実行
Docker Composeでコンテナを起動させます。
docker-compose up -d
http://localhost:9090/graph
にアクセスするとPrometheusのWeb UIが確認できます。
メトリクスの確認
Prometheusからメトリクを確認してみます。
PromQLというPrometheusのデータを取得・集約するクエリ言語を使用します。

まずはnode-exporterからCPUの使用時間を見てみます。
rate(node_cpu_seconds_total{mode="system"}[1m])
次にネットワークのトラフィックを見てみます。
rate(node_network_receive_bytes_total[1m])
まとめ
- Prometheusはメトリクス管理ツール
- exporterでメトリクスを取得