Help us understand the problem. What is going on with this article?

Prometheus + Grafana を Mac 上で docker-compose で起動

More than 3 years have passed since last update.

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')。

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'

grafana.env

grafana に渡す環境変数をまとめた設定ファイルです。
docker 経由で grafana を起動する際は、環境変数を渡すことで既存の設定を上書く、という手法を取っています。このファイルを docker-compose 経由で渡します。
実際のところこの記事ではこちらのファイルは使わないのでこのファイルはなくても起動しますが、設定ファイルの雛形として用意をしておきます。

grafana.env
# [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 は任意の場所に置き換えて構いません。

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

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 を確認することができます。

grafana の画面から任意の email address を入れて sign up をすると、アカウントの発行を行うことができます。

add Prometheus dashboard into Grafana

ここでは Prometheus と Grafana の連携例として、 Promehteus があらかじめ用意している Dashboard を Grafana に追加します。

1. organization の追加

image.png
Grafana の画面左上にあるメニューボタンより "New Organization" を追加します。

2. Data Sources の追加

image.png

画面左上にあるメニューボタンより "Data Sources" をクリックし、Data Sources 画面から "+Add data source" ボタンをクリックして Prometheus の設定を追加します。

image.png

3. Dashboard の追加

Prometheus Data Source の "Dashboards" タブをクリックすると、以下の画面が表示されます。

image.png

こちらの "import" ボタンをクリックすると、以下のような Prometheus の dashboard が Grafana に追加されます。

image.png

add node-exporter

ローカル Mac のシステムメトリクスを監視するために、メトリクス収集用の exporter である node-exporter の設定を行います。

https://github.com/prometheus/node_exporter

docker-compose.yml

node-exporter も doker image が提供されているため、先の docker-compose.yml の設定を以下のように変更します。

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

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 の中に含まれていることが確認できます。

http://localhost:9090/targets

image.png

表示が UP になっていれば、正しく Prometheus - exporter 間が疎通できています。

graph

exporter 追加後、Prometheus や Grafana の画面で追加した exporter の metrics が取得できるようになり、グラフなどでの可視化が可能になります。

image.png

このような形で、必要な metrics を収集する exporter を随時追加し、Prometheus に連携することで、Prometheus や Grafana の設定は行っていきます。

moaikids
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away