Grafana Grafana

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

UI の代わりにファイルで、データソース、認証情報、カスタムヘッダーを定義します。

10 min learn.level.初級

データソースは、すべてのダッシュボードとアラートルールが最初に依存するものなので、最初にファイルに置くべきものです。Grafana は、起動時に provisioning/datasources フォルダーから YAML を読み取り、見つかったデータソースを作成し、すでに存在するものを更新します。

基本的なファイル

provisioning/datasources/datasources.yaml:

apiVersion: 1

datasources:
  - name: Prometheus
    uid: prometheus
    type: prometheus
    access: proxy
    orgId: 1
    url: http://prometheus:9090
    isDefault: true
    editable: false
    jsonData:
      timeInterval: 15s

1 つのファイルに 1 つまたは多数のデータソースを置け、複数のファイルも使えます。Grafana は、フォルダー以下のすべてを読み込みます。

最も重要なフィールド:

  • name は表示名です。
  • uid は、ダッシュボードとアラートルールが参照する、安定した識別子です。省略すると Grafana が生成するため、それを参照するすべてのものが壊れやすくなります。常に設定してください。
  • type は、prometheus、loki、tempo、postgres、elasticsearch などのプラグイン ID です。
  • access: proxy は、Grafana のサーバーがリクエストを行うことを意味します。通常の選択で、認証情報をブラウザから遠ざけます。
  • isDefault は、新しいパネルが最初に使うデータソースをマークします。組織ごとに、デフォルトは 1 つだけであるべきです。
  • editable: false は、UI での変更をブロックするため、ファイルが引き続き権威を持ちます。
  • jsonData は、機密性のない設定を保持し、キーはプラグインによって異なります。
  • secureJsonData は、シークレットを保持し、Grafana がデータベースで暗号化します。
  • version は、更新時に比較されます。データベースを共有する複数の Grafana インスタンスでは、ファイルのバージョンが保存されているものと同じかそれ以上の場合にだけ、インスタンスがデータソースを更新するため、ファイルを変更したときは上げてください。

認証情報を commit せずに扱う

プロビジョニングのファイルは、値(キーではなく)で、$VAR または ${VAR} による環境変数の展開をサポートします。リテラルのドル記号には $$ を書きます。

apiVersion: 1

datasources:
  - name: Postgres
    uid: postgres-main
    type: postgres
    url: $POSTGRES_HOST:5432
    user: $POSTGRES_USER
    editable: false
    jsonData:
      database: app
      sslmode: require
    secureJsonData:
      password: $POSTGRES_PASSWORD

POSTGRES_PASSWORD を、シークレットストアからコンテナに渡します(シークレットのガイドを参照)。パスワードがリポジトリに現れることはなく、Grafana は読み込んだ後、暗号化して保存します。

カスタム HTTP ヘッダー

ヘッダー名は jsonData に、その値は secureJsonData に、一緒に番号を付けて置きます。

datasources:
  - name: Mimir
    uid: mimir
    type: prometheus
    access: proxy
    url: https://mimir.example.com/prometheus
    jsonData:
      httpHeaderName1: X-Scope-OrgID
    secureJsonData:
      httpHeaderValue1: tenant-a

Basic 認証と TLS

datasources:
  - name: Internal Prometheus
    uid: prom-internal
    type: prometheus
    access: proxy
    url: https://prometheus.internal:9090
    basicAuth: true
    basicAuthUser: grafana
    jsonData:
      tlsAuthWithCACert: true
    secureJsonData:
      basicAuthPassword: $PROM_PASSWORD
      tlsCACert: $PROM_CA_CERT

ログ、メトリクス、トレースを相関させる

いくつかのプラグインは、データソース同士を UID で結びつけます。これは、UID を手作業で設定するもう 1 つの理由です。たとえば Loki は、ログのフィールドを Tempo のトレースへのリンクに変換できます。

datasources:
  - name: Loki
    uid: loki
    type: loki
    access: proxy
    url: http://loki:3100
    jsonData:
      derivedFields:
        - name: TraceID
          matcherRegex: 'trace_id=(\w+)'
          url: '$${__value.raw}'
          datasourceUid: tempo

プラグイン固有の jsonData のキーは、バージョンによって異なるため、データソースのドキュメントで確認してください。発見する手早い方法は、テスト用のインスタンスで 1 度データソースを設定し、結果を API(GET /api/datasources/uid/<uid>)から読み取ることです。

削除と prune

deleteDatasources は、datasources が処理される前に、データソースを削除します。データソースを廃止するときに使います。

apiVersion: 1

deleteDatasources:
  - name: Old Graphite
    orgId: 1

フォルダーを完全な真実にするには、prune: true を追加します(Grafana 11.1 以降)。どのファイルにももう存在しない、あるいはファイルが削除された、プロビジョニングされたデータソースは、次の起動時に削除されます。

apiVersion: 1
prune: true

datasources:
  - name: Prometheus
    uid: prometheus
    type: prometheus
    url: http://prometheus:9090

プロビジョニングされたデータソースだけが prune されます。UI で手作業で作成されたものは、そのままにされます。

適用して確認する

データソースは起動時に読み込まれるため、Grafana を再起動するか、admin の Basic 認証で、再読み込みのエンドポイントを呼び出します。

curl -X POST -u admin:$GRAFANA_ADMIN_PASSWORD \
  http://localhost:3000/api/admin/provisioning/datasources/reload

curl -s -u admin:$GRAFANA_ADMIN_PASSWORD \
  http://localhost:3000/api/datasources | jq '.[] | {name, uid, type, readOnly}'

プロビジョニングされたデータソースは、readOnly: true を報告します。UI なしで接続性を確認するには、データソースのヘルスのエンドポイントを使います。

curl -s -u admin:$GRAFANA_ADMIN_PASSWORD \
  http://localhost:3000/api/datasources/uid/prometheus/health

データソースが読み込まれなかった場合は、Grafana の起動ログで、プロビジョニングのロガーからの行を確認してください。ファイルとエラーが表示されます(通常は、YAML のインデント、不明なフィールド、環境変数の欠落です)。

人気のガイド