Grafana Git SyncのDashboard previews in pull requestsを使ってみた

Grafana Git SyncのDashboard previews in pull requestsを使ってみた

2025.09.06

はじめに

先日ブログを書いたGrafana Git Sync機能の1つにDashboard previews in pull requestsという機能が含まれています。
機能の正式名称は無さそうなのでこの記事ではプルリクプレビュー機能と省略します。
この機能はGitHubのプルリクエストにダッシュボードの変更前後のプレビュー画像を自動的に添付する機能で、mainブランチのダッシュボードに適用する前に変更内容を確認できる素晴らしい機能です!

意外とセットアップに手こずってしまったので、今回はセットアップ手順と実際に使ってみた内容を書いていきます。

セットアップ

プルリクプレビュー機能を利用するにはいくつかステップを踏む必要があります。
全体の大まかな流れは

  • Git Syncの有効化
  • Grafana Image Rendererのインストール
  • Webhookの設定
    • ngrokの設定
    • GitHubのWebhookの設定

Git Syncの有効化

今回はDockerでGit Syncの有効化を行います。
コードの詳細は次の項目で紹介します。

ローカルインスタンスでのGit Syncの有効化方法は以前ブログを書きましたのでそちらをご参照ください。
https://dev.classmethod.jp/articles/grafana-v12-git-sync/

Grafana Image Rendererのインストール

Grafana Image Rendererは、GrafanaのパネルをPNG画像として自動レンダリングするためのプラグインです。
パネル画像を共有する場合やダッシュボードのレポート作成に利用されます。
Grafanaのプラグインの一覧にはありますが、そこからは有効化できず、別途インストールする必要があります。
インストール方法はプラグインのinstallセクションをご確認ください。
https://grafana.com/grafana/plugins/grafana-image-renderer/?tab=installation#installation

今回はGit Syncと合わせて環境を準備したかったのでDockerでまとめて構築します。
ディレクトリ構造は単純です。

├── config
│   └── grafana.ini
└── docker-compose.yml

docker-compose.ymlでGit SyncとImage Rendererに必要な設定を行います。

services:
  renderer:
    image: grafana/grafana-image-renderer:latest
    container_name: grafana-image-renderer
    restart: unless-stopped
    ports:
      - "8081:8081"
    networks:
      - grafana

  grafana:
    image: grafana/grafana:12.1.0-ubuntu
    container_name: grafana
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      # Git Sync feature toggles
      - GF_FEATURE_TOGGLES_PROVISIONING=true
      - GF_FEATURE_TOGGLES_KUBERNETESDASHBOARDS=true
      # Image Renderer configuration
      - GF_RENDERING_SERVER_URL=http://renderer:8081/render
      - GF_RENDERING_CALLBACK_URL=http://grafana:3000/
    volumes:
      - grafana-storage:/var/lib/grafana
      - grafana-logs:/var/log/grafana
      - ./config/grafana.ini:/etc/grafana/grafana.ini
    depends_on:
      - renderer
    networks:
      - grafana

volumes:
  grafana-storage:
    driver: local
  grafana-logs:
    driver: local

networks:
  grafana:
    driver: bridge

grafana.iniは後ほどngrockを設定する際に必要になります。

# ngrokのURL
root_url = https://xxxxxxxxxxxx.ngrok-free.app

Webhookの設定

プルリクプレビュー機能はプルリクエストをフックしてImage Rendererプラグインで画像を生成します。
GitHubのWebhookからImage Rendererプラグインで画像を生成する際、WebhookからローカルのGrafanaインスタンスにアクセスする必要がありますが、直接アクセスすることはできません。
そこで、ローカルのGrafanaインスタンにアクセスする方法としてWebhookとローカルのGrafanaインスタンスを繋ぐエンドポイントを作成します。
エンドポイントとして公式ドキュメントで紹介されているngrokを使います。

ngrokを利用することでローカルでホストしているGrafanaインスタンスに直接Webhookを受信するためのURLを発行することができます。

ngrokのアカウント登録

https://ngrok.com/
singupからアカウントを登録します。

auth token取得

Your Authtokenを選択して、表示されるトークンをコピーします。
CleanShot 2025-08-11 at 16.59.33@2x
以下のコマンドで認証トークンを設定します。

ngrok config add-authtoken $YOUR_AUTHTOKEN

ngrokを使って3000番ポートをパブリックからアクセスできるようにします。
以下のコマンドを実行するとhttp://localhost:3000に対応するURLが発行されます。
発行されたURLは後ほど利用するのでコピーしておきます。

$ ngrok http 3000

🤫 Decouple policy and sensitive data with vaults: https://ngrok.com/r/secrets
 Session Status                online
Account                       example@example.com (Plan: Free)
Version                       3.26.0
Region                        Japan (jp)
Latency                       66ms
Web Interface                 http://127.0.0.1:4040
Forwarding                    https://xxxxxxxxxxxxx.ngrok-free.app -> http://localhost:3000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

発行されたURLへアクセスしてみます。
CleanShot 2025-08-11 at 17.04.57@2x
「Visit Site」をクリックするとlocalhost:3000にフォワーディングされてGrafanaへ遷移します。
CleanShot 2025-08-12 at 09.45.49@2x
これでGrafanaへインターネットからアクセスできるようになりました。
では、先ほどコピーしたngrokのURLをgrafana.iniのroot_urlに追記します。

# ngrokのURL
root_url = https://xxxxxxxxxxxx.ngrok-free.app

root_urlはWebブラウザからGrafanaにアクセスする際に使用するURLです。

GitHubのWebhooks設定

ngrokでURLを発行したので、GitHubのWebhooksにURLをセットします。

GitSyncの機能で利用するGitHubリポジトリにアクセスします。
GitHubで対象のリポジトリを開いて、Settings > Webhooks を選択します。
CleanShot 2025-08-12 at 09.49.51@2x
以下の設定でWebhookを作成します。
Payload URLには <ngrok>で取得したURL/api/webhooks/git を入力します。
CleanShot 2025-09-06 at 23.16.54@2x
Webhookの作成は完了です。
CleanShot 2025-09-06 at 20.55.03@2x

プルリクプレビューを有効にする

Grafana > Administration > Provisioning の順に進み
Enable dashboard previews in pull requests にチェックを入れて保存します。
CleanShot 2025-08-12 at 09.59.39@2x
まずはテストデータでTime seriesのパネルを作成して、mainブランチを作成します。
CleanShot 2025-08-12 at 10.01.21@2x
次に可視化形式をBar chartに変更してダッシュボードを保存します。
保存時にブランチを切ってプルリクエストを出せるようにします。
CleanShot 2025-08-12 at 10.03.04@2x
保存が完了したので、Open pull request in GitHub をクリックしてプルリクエストを出します。
CleanShot 2025-08-12 at 10.04.10@2x
Pull requestの内容を確認するとBeforeとAfterのダッシュボードが表示されていますね!
これは便利ですね!
CleanShot 2025-08-12 at 10.07.11@2x

色々試してみた

プルリクプレビュー機能で気になったことをいくつか試してみました。

細かい修正

細かい変更を行なった場合、変更内容を見つけられるか試してみました。
この変更では折れ線グラフの線の太さやグラフ背景の枠線を透明に変更していますが、この画像だけで判断するのは至難の業ですね。
CleanShot 2025-09-06 at 22.18.39@2x
ダッシュボードをGitHubで管理する場合、一般的なコードのレビューと違いコードから編集箇所を判断するのはなかなか大変な作業です。
特に細かい修正を行なった場合は、どこを修正したかプルリクエストのコメントに書くように気をつけましょう。
レビューする側はコメント+プレビュー画像で確認するとレビュー作業がかなり捗ると思います。

変数

変数を必要とするパネルが存在する場合、どのような表示になるのか気になったので試してみました。
CleanShot 2025-09-06 at 22.30.59@2x
これは想定通りですが、値が何も入っていない状態で表示されました。
表示を確認したい場合はあらかじめ値を入れておくと良さそうです。

縦に長いダッシュボード

縦に長いダッシュボードを編集した場合、プルリクエストに表示される画像がどうなるのか試してみました。
CleanShot 2025-09-06 at 22.10.40@2x-min
縦長のダッシュボードも全て画像化されています。
CleanShot 2025-09-06 at 22.11.46@2x

まとめ

今回はGit Syncのプルリクプレビュー機能を使ってみました。
思っていた以上に設定に苦戦してしまいました。
Grafana Cloudで使えるようになればImage Rendererプラグインのインストールやgrokの設定が省略されることを期待したいですね。
機能自体は非常に使いやすいと感じました。GitHubと連携できるようになったことで開発のライフサイクルに導入する場合はダッシュボードに適用する前に必ずレビューが必要になります。
ダッシュボードのコードを人間が理解するのは難しいので、画像という形で表現することでレビュー時の認知負荷がかなり下がると思います。

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.