
Grafana v12で発表されたGit Syncを使ってみた
はじめに
今年の5月にGrafanaのv12が発表されました。
その中にGrafanaインスタンスをGitHubリポジトリに接続し、Grafana UIから直接ダッシュボードをコードとして管理できるGit Syncという機能がプレビューリリースされました。
まだプレビュー版ではありますが、ダッシュボードをGitHubで管理できるのはアツいですね!
公式ドキュメントにも書かれていますが、これは実験的な機能なので、実稼働環境での使用はお勧めされていませんのでご注意を。
何がいいのか?
やはりGitHubで管理できるため、バージョン管理しつつ複数人で共同のダッシュボードを管理できるというのが最大のメリットだと思います。
以前、ダッシュボードのjsonファイルをAPI経由で操作するという記事を書きました。
これをわざわざAPIを経由する必要がなくなります。
個人レベルでダッシュボードを管理するレベルならAPI経由でもそこまで大きな支障はありませんが、やはり複数人で管理するとなると色々と支障が出てきます。
Git Sync機能であれば複数人での開発体験もよくなりそうなので期待が持てます。
セットアップ
セットアップ方法はセットアップガイドを見ながら進めます。
全体の流れとしては以下の流れで進みます。
- Grafana で機能トグルを有効にする
- GitHubのパーソナルアクセストークンを発行
- GitHubとの接続設定
環境
Grafana
前提としてGit Syncは現在OSS版またはEnterprise版のみサポートされています。
Grafana Cloudでは一般公開されていません。
今回は自身のMacにEnterprise版のGrafanaをインストールしています。
バージョンは12.1.0-preです。
$ grafana -v
grafana version 12.1.0-pre
Git Syncが実装された12.0.xでも試しましたが、私の環境で試した限りではバグがあり使えませんでした。
GitHub
GitHub側にはGrafanaのダッシュボードを同期するために適当なリポジトリを作成しておきます。既存のリポジトリでもokです。
機能トグルを有効にする
Git Syncを有効にするには、provisioning
とkubernetesDashboards
の機能トグルを有効にする必要があります。
機能トグルを有効にするには、grafana.ini
かcustom.ini
の設定ファイルに以下の設定を追記します。
[feature_toggles]
provisioning = true
kubernetesDashboards = true ; use k8s from browser
Grafanaを起動している場合は上記の変更後にGrafanaを再起動します。
GitHubのパーソナルアクセストークンを発行
GitHubにログインして
右上の自分のアイコン > Settings > Developer Settings
を選択します。
次にFien-grained tokensを開きます。
Generate new tokenをクリックして新しいトークンを作成します。
トークン名や有効期限、対象のリポジトリを適宜選択します。
PermissionsはGit Syncに必要な以下の権限を設定します。
Generate tokenをクリックして発行されたトークンをコピーしておきます。
GitHubとの接続設定
Grafanaにログインして、左メニューよりAdministration > Provisioning > Configure Git Syncの順にクリックします。
先ほど取得したGitHubのアクセストークンとリポジトリのURLを入力します。
次にデフォルトのブランチとリポジトリのパスを入力します。
リポジトリのパスは下の図のようにgrafana/
を指定した場合、ダッシュボードのjsonを保存する際にgrafanaというディレクトリが自動的に作成されます。
次に同期する対象を聞かれるので、今回は「Sync all resources with external storage」を選択して全てのダッシュボードが同期されるように設定します。
「Sync external storage to a new Grafana folder」を選択すると、新しいダッシュボードのフォルダが作成され、そのフォルダ配下のダッシュボードがGitHubと同期されるようです。
次にGrafanaとGitHubを同期します。
注意点に書かれていますが、「Begin synchronization」をクリックして同期を開始すると、一時的にダッシュボードが利用できなくなるので複数人で利用している場合は注意しましょう。
問題なく接続できればJob completed successfullyと表示されます。
最後にオプションの設定です。
今回は何も設定せず完了します。
Grafana↔︎GitHubの同期間隔や、Grafana側をRead onlyにしてコード上での管理のみとすることもできます。
「Enhance your GitHub experience」はプルリクエストの際にダッシュボードのどこが変更されるのかを画像プレビューで見ることができるようです。
これはアツいですね!
Grafana Image Rendererというプラグインが必要なので、今回は設定しませんがまた近いうちに試してみたいと思います。
接続が完了すると、Provisioningの画面に同期設定が追加され、リポジトリ名の右にUp-to-dateと表示されていれば設定完了です。
ダッシュボード作成
それではダッシュボードを1つ作ってみて、GitHubと連携されているか試してみましょう。
Demo Dashboardという名前でダッシュボードを作成します。
データソースは時系列のテストデータをTime series(折れ線)で表示しています。
Commentの部分がCommitメッセージにあたるので、First Commitと入力しておきます。
今回はmainブランチにPushしたいのでWorkflowの項目はPush to mainを選択して保存します。
GitHub側で同期されているか確認します。
新しいjsonファイルが作成されていますね!!
GitHub側でコードの変更
それではリポジトリに保存されたjsonファイルが変更された場合にGrafanaのダッシュボードにも自動的に反映されることを確認します。
より普段の開発環境に近い形でローカル環境からjsonの中身を変更しています。
変更点はテストデータをTime series(折れ線)で表示していたところをBar chart(棒グラフ)に変更しています。
- "type": "timeseries"
+ "type": "barchart"
それではダッシュボードを確認します。
Time seriesからBar chartに変更されていることが確認できました。
ここまででGit Syncの最も基本となる機能を試すことができました。
まとめ
Grafana v12で発表されたGit Sync機能を試してみました。
ダッシュボードのjsonをコードとしてGitHubで管理できるようになったので、以前書いたClaude Codeを使ったダッシュボード開発とも相性が良さそうです。
まだプレビュー版の機能ということで、うまくいかないなという機能がいくつかありました。
よりよい機能として正式リリースされることを願って、欲しい機能をIssueに上げていきたいと思います。