YAML からデータソースをプロビジョニングする
UI の代わりにファイルで、データソース、認証情報、カスタムヘッダーを定義します。
データソースは、すべてのダッシュボードとアラートルールが最初に依存するものなので、最初にファイルに置くべきものです。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 のインデント、不明なフィールド、環境変数の欠落です)。
人気のガイド
-
Grafana をコードとして運用する:全体像 ファイルに置けるもの、API が必要なもの、そしてそれらがどう組み合わさるか。 -
grafana.ini と環境変数で Grafana サーバーを設定する 設定ファイルの場所、上書きの順序、設定を Git に保つ方法を理解します。 -
JSON ファイルからダッシュボードをプロビジョニングする ディスクからダッシュボードを読み込み、ディレクトリからフォルダーを対応付け、変更を失わずに作成します。 -
アラートルール、コンタクトポイント、通知ポリシーをプロビジョニングする アラートのパイプライン全体を YAML で定義し、コードのようにレビューしてバージョン管理します。 -
Helm とプロビジョニングの values で Grafana を Kubernetes にデプロイする データソース、ダッシュボード、設定のすべてが values ファイルから来る、Helm チャートで Grafana を実行します。 -
コマンドラインからプロビジョニングを再読み込み、確認、トラブルシューティングする Grafana が何を読み込んだかを調べ、再起動せずに再読み込みし、よくあるプロビジョニングのエラーを修正します。