g00ceyの技術ブログ

Prometheus Grafanaで死活監視

目次

prometheus grafana
今まで何度か目にしたことがあるけども、インフラ担当だったことがあまりなかったので触らなかったこの辺を触ってみようということでやってみました。

結論

  • Prometheusはデータを監視データを集める(描画もできるけど)
  • Grafanaはデータを描画(死活監視データじゃない)
  • docker-composeで組んでみたけど、思いのほか簡単でした。

所感なんだけど、Grafanaで読めるようにして小さなサービスの見える化って色々できる感じします。

方針・前提条件

  • Prometheusはコンテナで作成
  • ホストは、すべてPrometheus exporterをインストール
  • Grafanaはコンテナで作成

本当はホストの情報もコンテナから取得できるようにしたいのだけど、難しいそうなのでスキップ(出来たら、Prometheusをホスト側でインストールするっていう作業がないからいいよね)
ドメインについては、unboundでローカルネットワークでドメインを割り振っております。

環境

  • Raspberry Pi4 OS:RaspberryPiOS Debian GNU/Linux 10 (buster)
  • Docker 20.10.3

構築作業

Prometheusとgrafanaのインストール

docker-compose上で参照しているprometheus.yml

prometheus.yml

global:
  scrape_interval:     15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets:
        - '192.168.0.12:9100'
        - '192.168.0.13:9100'
        - '192.168.0.14:9100'
        - '192.168.0.15:9100'

docker-compose.yml

以下、docker-compose抜粋

  nginx:
    image: nginx:mainline-alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/site.conf:/etc/nginx/conf.d/site.conf
      - ./auth/registry.localdomain.cert.pem:/etc/ssl/certs/registry.localdomain.cert.pem
      - ./auth/registry.localdomain.key-nopass.pem:/etc/ssl/private/registry.localdomain.key-nopass.pem
    depends_on:
      - gitea
      - drone
      - registry-ui
    env_file:
      - .env
    networks:
      gitea:
  prometheus:
    image: prom/prometheus
    networks:
      gitea:
    container_name: prometheus
    volumes:
      - ./prometheus:/prometheus-data
    entrypoint: prometheus --config.file=/prometheus-data/prometheus.yml
    restart: always
    logging:
      driver: json-file
      options:
        max-file: '1'
        max-size: 3m
  grafana:
    image: grafana/grafana
    networks:
      gitea:
    container_name: grafana
    restart: always
    logging:
      driver: json-file
      options:
        max-file: '1'
        max-size: 3m

その後、

docker-compose up -d

なお、上では、特にポートを指定していませんが、下記のようにしてNginxでリバースプロキシを行っています。

site.conf(nginx)

#grafana
server {
    listen 80;

    root /usr/share/www/;

    server_name prometheus.localdomain;

    location / { # Note: Trailing slash
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;

        proxy_pass http://prometheus:9090;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_buffering off;

        chunked_transfer_encoding off;
    }
}

#grafana
server {
    listen 80;

    root /usr/share/www/;

    server_name grafana.localdomain;

    location / { # Note: Trailing slash
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;

        proxy_pass http://grafana:3000;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_buffering off;

        chunked_transfer_encoding off;
    }
}

ホストOS側

sudo apt install prometheus-node-exporter

設定作業

設定に使用する元のDashboardはNode Exporter Full
上記のNode Exporter Fullは情報量が多いので使いやすいように自分でカスタマイズしていく感じで使うのがいいかなと思います。

  1. http://prometheus.localdomain へアクセス

prometheus

  1. http://grafana.localdomain へアクセスし、パスワードはadmin/adminで指定し、変更
  2. http://grafana.localdomain/dashboard/import にアクセスし、Node Exporter Fullの「Get this dashboard:」のIDを「Import via grafana.com」に指定
  3. インポートしたdashboardで欲しいパネル(グラフとかですね) grafana-panel
    の上部のタイトルをクリック、「More => copy」を選択
  4. 別タブでhttp://grafana.localdomain を開いて、新しいダッシュボードを追加(このダッシュボードに上記のパネルを追加していく感じ)
  5. 新しいダッシュボードのgrafana-panel2を選択し、Paste copied panelをクリック
  6. 必要そうな個所を修正。(例えば、可変となっている個所は$node等の変数になっているので固定値にしたり、もしくは、DashboardにVariable定義を追加したり)

4~6を繰り返していくと死活監視用のダッシュボードは完成します。
各パネルはJSONで定義されているので、パネルをクリックして、Inspect=>Parse JSONとしてその中身を直コピーでもいいのですけども、システムでリンクするための情報もありますので、上記の手順のように必要な分はコピーして作成するのが一番の近道だと思います。

dashboard

私は、今回Pi4 4台分のCPUとメモリの情報を表示するものを作成しました。

最後に

PrometheusとGrafanaで作る死活監視はなんか小難しいなぁと思ってやっていなかったのですが、実際やってみるとすごい簡単です。
これを機に複数台のマシンが動いている、コンテナも色々と動いているというご家庭で導入を行ってみてはいかがでしょうか。


Share

comments powered by Disqus