Grafana Grafana

Docker Compose とプロビジョニングフォルダーで Grafana を実行する

すべての設定をファイルとしてマウントして、compose ファイルから Grafana を起動します。

10 min learn.level.初級

このガイドでは、Docker Compose を使って、ローカルで Grafana と Prometheus のデータソースを実行します。すべての設定は、ファイルと環境変数で提供されます。何かを設定するために UI を開くことは一度もありません。Compose プラグインを備えた Docker が必要です。

プロジェクトを構成する

grafana-as-code/
├── compose.yaml
├── .env                          # シークレットとバージョン。commit しない
├── grafana/
│   ├── grafana.ini
│   └── provisioning/
│       ├── datasources/
│       │   └── prometheus.yaml
│       ├── dashboards/
│       │   └── providers.yaml
│       ├── alerting/             # アラートのガイドで追加
│       └── plugins/
├── dashboards/
│   └── overview.json
└── prometheus/
    └── prometheus.yml

これを Git に保管します。.env を .gitignore に追加し、代わりに .env.example を commit します。

compose ファイル

compose.yaml:

services:
  grafana:
    image: grafana/grafana:13.1.0   # テスト済みのバージョンに固定する
    ports:
      - "3000:3000"
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD}
      GF_USERS_ALLOW_SIGN_UP: "false"
    volumes:
      - ./grafana/grafana.ini:/etc/grafana/grafana.ini:ro
      - ./grafana/provisioning:/etc/grafana/provisioning:ro
      - ./dashboards:/var/lib/grafana/dashboards:ro
      - grafana-data:/var/lib/grafana
    depends_on:
      - prometheus

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro

volumes:
  grafana-data:

重要なマウントは次のとおりです。

  • /etc/grafana/grafana.ini は、公式イメージ内のサーバー設定ファイルです。
  • /etc/grafana/provisioning は、Grafana が datasources、dashboards、alerting、plugins のフォルダーを探す場所です。
  • /var/lib/grafana/dashboards は、ダッシュボードの JSON のための任意のフォルダーです。パスは、下のダッシュボードプロバイダーで設定するものと一致する必要があります。
  • grafana-data は、Grafana の SQLite データベースとプラグインのための名前付きボリュームです。これがないと、コンテナが再作成されたときに状態が失われます。

設定のマウントは、意図的に読み取り専用にしています。Grafana はそれらに書き込む必要がないからです。

.env:

GRAFANA_ADMIN_PASSWORD=change-me-before-sharing

GF_SECURITY_ADMIN_PASSWORD は、Grafana が最初にデータベースを作成するときにだけ適用されることに注意してください。後で compose ファイルで変更しても、既存のボリュームには効果がありません。最初からやり直すにはボリュームを削除するか、CLI でパスワードをリセットしてください。

最小限の grafana.ini

[server]
http_port = 3000

[analytics]
reporting_enabled = false
check_for_updates = false

[log]
mode = console
level = info

[auth]
disable_login_form = false

省略したものは、Grafana のデフォルトに戻ります。次のガイドでは、grafana.ini と GF_* の上書きの完全なルールを説明します。

データソースをプロビジョニングする

grafana/provisioning/datasources/prometheus.yaml:

apiVersion: 1

datasources:
  - name: Prometheus
    uid: prometheus
    type: prometheus
    access: proxy
    url: http://prometheus:9090
    isDefault: true
    editable: false

uid は、ダッシュボードとアラートルールが参照すべきものなので、安定したものを選んでください。次のガイドで、各フィールドを説明します。

ダッシュボードプロバイダーと 1 つのダッシュボードをプロビジョニングする

grafana/provisioning/dashboards/providers.yaml:

apiVersion: 1

providers:
  - name: default
    type: file
    updateIntervalSeconds: 30
    allowUiUpdates: false
    options:
      path: /var/lib/grafana/dashboards

dashboards/overview.json(最小限のダッシュボード。詳細はダッシュボードのガイドを参照):

{
  "uid": "overview",
  "title": "Overview",
  "schemaVersion": 39,
  "panels": [
    {
      "id": 1,
      "type": "timeseries",
      "title": "Targets up",
      "gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 },
      "datasource": { "type": "prometheus", "uid": "prometheus" },
      "targets": [
        { "refId": "A", "expr": "up", "datasource": { "type": "prometheus", "uid": "prometheus" } }
      ]
    }
  ]
}

そして、表示するデータがあるように、小さな prometheus/prometheus.yml:

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ["localhost:9090"]

起動して、UI なしで確認する

docker compose up -d
docker compose logs grafana | grep -i provisioning
curl -s http://localhost:3000/api/health
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/datasources | jq '.[].name'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD "http://localhost:3000/api/search?type=dash-db" | jq '.[].title'

ヘルスのエンドポイントは ok を報告し、データソースの一覧には Prometheus が含まれ、検索は Overview を返すはずです。結果を見たければ http://localhost:3000 を開いてください。ただし、ここまで来るために、何もクリックしていません。

何かを変更して、適用されるのを観察する

  • dashboards/overview.json を編集します。updateIntervalSeconds 以内に、Grafana は再起動なしで変更を取り込みます。
  • データソースのファイルを編集して再起動します。docker compose restart grafana。データソースは起動時に読み込まれます。
  • ダッシュボードのファイルを削除します。プロバイダーが disableDeletion: true を設定していない限り、ダッシュボードは削除されます。

設定からプラグインをインストールする

プラグインは、環境変数によってコンテナの起動時にインストールできるため、compose ファイルの中に残ります。

    environment:
      GF_PLUGINS_PREINSTALL: grafana-clock-panel

古いバージョンでは、代わりに GF_INSTALL_PLUGINS を使います。お使いのバージョンのドキュメントを確認してください。また、プロビジョニングは、すでにインストールされているプラグインを設定するだけであることにも注意してください。

クリーンアップ

docker compose down        # データボリュームを保持
docker compose down -v     # Grafana のデータベースも削除

人気のガイド