Prometheus、流行ってますね。
pull 型で、metrics の収集を HTTP 経由で行えるので、テスト用の監視サーバーをローカルの作業マシンに立ち上げて動作確認をしたりするのが楽なのも良い点だと思います。
Prometheus 本体も exporter も docker image が提供されており、docker での環境構築が楽なのも今風の OSS だなという感じがします。
ここでは、docker-compose を用いてローカルの Mac で起動を試みてみようと思います。
How to install Prometheus and Grafana on local Mac
docker
https://docs.docker.com/docker-for-mac/install/
上記から Mac 用の dmg をダウンロードしてインストールしてください
docker-compose
$ sudo pip install docker-compose
configuration files
prometheus.yml
prometheus の設定ファイルです。
以下では、prometheus 自身の監視のみを有効にしています(job_name: 'prometheus')。
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'codelab-monitor'
rule_files:
# - "/var/app/prometheus/alert.rules"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets:
- 'localhost:9090'
grafana.env
grafana に渡す環境変数をまとめた設定ファイルです。
docker 経由で grafana を起動する際は、環境変数を渡すことで既存の設定を上書く、という手法を取っています。このファイルを docker-compose 経由で渡します。
実際のところこの記事ではこちらのファイルは使わないのでこのファイルはなくても起動しますが、設定ファイルの雛形として用意をしておきます。
# [server]
# GF_SERVER_DOMAIN=localhost
# GF_SERVER_HTTP_PORT=3000
# GF_SERVER_PROTOCOL=http
docker-compose.yml
prometheus と grafana を docker-compose 経由で起動するための設定ファイルです。
prometheus.yml と grafana.env は任意の場所に置き換えて構いません。
version: '3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- /var/app/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000
env_file:
- /var/app/prometheus/grafana.env
start
$ docker-compose -f docker-compose.yml up
Creating network "prometheus_default" with the default driver
Creating grafana
Creating prometheus
Attaching to prometheus, grafana
grafana | t=2017-05-29T04:57:48+0000 lvl=info msg="Starting Grafana" logger=main version=4.3.0-beta1 commit=3a89272 compiled=2017-05-12T09:45:26+0000
grafana | t=2017-05-29T04:57:48+0000 lvl=info msg="Config loaded from" logger=settings file=/usr/share/grafana/conf/defaults.ini
......
起動後、以下の URL に接続するとそれぞれ Web UI を確認することができます。
- Prometheus : http://localhost:9090/
- Grafana : http://localhost:3000/
grafana の画面から任意の email address を入れて sign up をすると、アカウントの発行を行うことができます。
add Prometheus dashboard into Grafana
ここでは Prometheus と Grafana の連携例として、 Promehteus があらかじめ用意している Dashboard を Grafana に追加します。
1. organization の追加
Grafana の画面左上にあるメニューボタンより "New Organization" を追加します。
2. Data Sources の追加
画面左上にあるメニューボタンより "Data Sources" をクリックし、Data Sources 画面から "+Add data source" ボタンをクリックして Prometheus の設定を追加します。
- Name : (任意)
- Type: Prometheus
- Url : http://localhost:9090
- Access: direct
3. Dashboard の追加
Prometheus Data Source の "Dashboards" タブをクリックすると、以下の画面が表示されます。
こちらの "import" ボタンをクリックすると、以下のような Prometheus の dashboard が Grafana に追加されます。
add node-exporter
ローカル Mac のシステムメトリクスを監視するために、メトリクス収集用の exporter である node-exporter の設定を行います。
https://github.com/prometheus/node_exporter
docker-compose.yml
node-exporter も doker image が提供されているため、先の docker-compose.yml の設定を以下のように変更します。
version: '3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- /var/app/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000
env_file:
- /var/app/prometheus/grafana.env
node-exporter:
image: quay.io/prometheus/node-exporter
container_name: node-exporter
ports:
- 9100:9100
volumes:
- /proc:/host/proc
- /sys:/host/sys
- /:/rootfs
node-exporter は今回は http://localhost:9100/ で起動させます。
prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'codelab-monitor'
rule_files:
# - "/var/app/prometheus/alert.rules"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets:
- 'localhost:9090'
- job_name: 'node-exporter'
static_configs:
- targets:
- '(host or ip address):9100'
node-exporter の設定を targets に追加します。
ここで localhost:9100
と記述したくなるところですが、Prometheus は docker container 内で起動しているため、localhost
アドレスは名前解決時に自分自身の container を指してしまいます。
なので、自分の Mac に割り当てられている localhost 以外の ip address や hostname を指定して上げる必要があります。
start
$ docker-compose -f docker-compose.yml up
起動後、以下の URL を開くと、追加した exporter が targets の中に含まれていることが確認できます。
表示が UP
になっていれば、正しく Prometheus - exporter 間が疎通できています。
graph
exporter 追加後、Prometheus や Grafana の画面で追加した exporter の metrics が取得できるようになり、グラフなどでの可視化が可能になります。
このような形で、必要な metrics を収集する exporter を随時追加し、Prometheus に連携することで、Prometheus や Grafana の設定は行っていきます。