Prometheus + Grafana + Docker Composeインストール
Prometheus、GrafanaをDockerにインストールして動作させる方法について説明する。

概要
Prometheus、GrafanaをDocker Composeでインストールし、動作させてみる。
Docker設定
Prometheus
PrometheusをDockerにインストールするためのファイルとディレクトリを構成する。
- まずインストールディレクトリを適当な場所に作成する。
mkdir prometheus-grafana
cd prometheus-grafana
- Dockerを実行するために
docker-compose.ymlファイルを作成する。 prometheus-grafana/docker-compose.yml
version: '3.7' # ファイル規格バージョン
services: # この項目の下に実行するコンテナを定義
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus/config:/etc/prometheus
- ./prometheus/volume:/prometheus
ports:
- 9090:9090 # アクセスポート設定(コンテナ外部:コンテナ内部)
command: # web.enable-lifecycleはAPI再起動なしで設定ファイルをreloadできるようにする
- '--web.enable-lifecycle'
- '--config.file=/etc/prometheus/prometheus.yml'
restart: always
networks:
- promnet
networks:
promnet:
driver: bridge
- Prometheus DockerHub image
- Prometheusの保存ディレクトリは
./prometheus/volumeに指定した。 - Prometheusの設定ディレクトリは
./prometheus/configに指定した。
- Prometheus関連設定ファイルを配置するディレクトリを作成する。
mkdir prometheus
mkdir prometheus/config
/prometheus/configディレクトリ内に設定ファイル(prometheus.yml、rule.yml)を作成する。
prometheus-grafana/prometheus/config/prometheus.yml
global:
scrape_interval: 15s # scrape targetの基本intervalを15秒に変更 / default = 1m
scrape_timeout: 15s # scrape requestがtimeoutする長さ / default = 10s
evaluation_interval: 2m # ruleをどれくらい頻繁に検証するか / default = 1m
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor' # 基本的に付けるラベル
query_log_file: query_log_file.log # prometheusのクエリログを記録。なければ記録しない
# ルールをロードし、evaluation_interval設定に従って定期的に評価する。
rule_files:
- "rule.yml" # ファイル位置はprometheus.ymlと同じ場所
- "rule2.yml" # 複数指定可能
# メトリクスを収集するエンドポイント。ここではPrometheusサーバー自身を指す。
scrape_configs:
# この設定で収集した時系列に`job=<job_name>`としてジョブ名を設定する。
# metrics_pathの基本パスは'/metrics'で、schemeの基本値は`http`。
- job_name: 'monitoring-item' # job_nameはすべてのscrape内で一意でなければならない
scrape_interval: 10s # globalでdefault値を定義しているため省略可能
scrape_timeout: 10s # globalでdefault値を定義しているため省略可能
metrics_path: '/asdf' # オプション - prometheusがmetrics取得時に参照するURIを変更できる | default = /metrics
honor_labels: false # オプション - ラベル衝突がある場合にラベルを変更するか設定 | default = false
honor_timestamps: false # オプション - honor_labelsがtrueの場合、metrics timestampが露出する | default = false
scheme: 'http' # オプション - request送信時のscheme設定 | default = http
params: # オプション - request送信時のparam
user-id: ['myemail@email.com']
# その他authorization設定
# service discovery設定(sd)
# 実際にscrapeするターゲットに関する設定
static_configs:
- targets: ['localhost:9090', 'localhost:9100', 'localhost:80'] ## prometheus, node-exporter, cadvisor
labels: # オプション - scrapeして取得するmetricsすべてに付けるラベル
service : 'monitor-1'
# relabel_config - scrape前のlabelを修正
# metric_relabel_configs - 取得対象のラベルを動的に書き換える設定(drop, replace, labeldrop)
prometheus-grafana/prometheus/config/rule.yml
groups:
- name: example # ファイル内でuniqueでなければならない
rules:
# Alert for any instance that is unreachable for >5 minutes.
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
# Alert for any instance that has a median request latency >1s.
- alert: APIHighRequestLatency
expr: api_http_request_latencies_second{quantile="0.5"} > 1
for: 10m
annotations:
summary: "High request latency on {{ $labels.instance }}"
description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"
- Dockerが修正できるように
/prometheusディレクトリの権限を変更する。
sudo chmod -R 777 ./prometheus
最終的なファイルをすべて作成すると、次のような構造になる。
.
├── docker-compose.yml
└── prometheus
└── config
├── prometheus.yml
└── rule.yml
Grafana
Grafanaはデータ可視化、監視、分析のためのオープンソースプラットフォームである。
docker-compose.ymlでservices:の下にGrafana設定を追加する。
grafana:
image: grafana/grafana
container_name: grafana
# user: "$GRA_UID:$GRA_GID"
ports:
- 3000:3000 # アクセスポート設定(コンテナ外部:コンテナ内部)
volumes:
- ./grafana/volume:/var/lib/grafana
restart: always
networks:
- promnet
- Grafana DockerHub Image
- ここではGrafanaの保存ディレクトリを
./grafana/volumeに指定した。
Docker実行
Dockerイメージを作成し、コンテナの起動をまとめて処理するコマンドを実行する。
docker compose up -d
コンテナを停止するには次のコマンドを実行する。
docker compose stop
コンテナを再起動するには次のコマンドを実行する。
docker compose start
実行後には、以下のようなvolumeディレクトリが作成されることを確認できる。
.
├── docker-compose.yml
├── grafana
│ └── volume
│ ├── grafana.db
│ ├── grafana.db-journal
│ └── plugins
└── prometheus
├── config
│ ├── prometheus.yml
│ ├── query_log_file.log
│ └── rule.yml
└── volume
└── data
├── chunks_head
├── lock
├── queries.active
└── wal
└── 00000000
接続確認
- Prometheus
- http://localhost:9090
- Grafana
- http://localhost:3000
- 基本アカウントID/PW: admin/admin
- http://localhost:3000
参考
設定ファイルはGitHubに置いてある。