ヘッドレス ブラウザ (Chromium) を使用してパネルとダッシュボードを PNG にレンダリングする Grafana バックエンド プラグイン。
このプラグインは、Node.js ランタイムと Chromium ブラウザーを備えた単一の実行可能ファイルにパッケージ化されています。これは、プラグインが機能するためにシステムに Node.js と Chromium をインストールする必要がないことを意味します。
ただし、Chromium ブラウザは特定のライブラリに依存します。これらのライブラリがすべてシステムにインストールされていない場合、イメージをレンダリングしようとするとエラーが発生する可能性があります。トラブルシューティングのヘルプなどの詳細については、Grafana Image Rendering のドキュメントを参照してください。
画像のレンダリングには大量のメモリが必要です。これは主に、Grafana が実際のレンダリングのためにバックグラウンドでブラウザ インスタンスを作成するためです。システム レンダリング イメージには、少なくとも 16 GB の空きメモリを確保することをお勧めします。
複数の画像を並行してレンダリングすると、さらに大きなメモリ使用量が必要になります。リモート レンダリング サービスを使用すると、リモート システム上でイメージをレンダリングできるため、ローカル システム リソースは影響を受けません。
プラグインは、Grafana CLI (推奨される方法) を使用するか、Grafana Docker イメージを使用してインストールできます。
grafana-cli plugins install grafana-image-renderer
このプラグインは現在の Grafana Docker イメージと互換性がなく、追加のシステムレベルの依存関係が必要です。レンダリング用に別の Docker コンテナを設定し、代わりにリモート レンダリングを使用することをお勧めします。手順については、「Docker で実行」を参照してください。
Grafana Docker イメージを使用してプラグインをインストールする場合は、Grafana Docker ドキュメントのカスタム Grafana イメージの構築手順を参照してください。
注:インターネット接続が必要です。
このプラグインは、リモート HTTP レンダリング サービスとして実行できます。この設定では、Grafana はリモート レンダリング サービスに HTTP リクエストを行うことで画像をレンダリングし、リモート レンダリング サービスは画像をレンダリングし、それを HTTP 応答で Grafana に返します。
リモート HTTP レンダリング サービスは、Docker を使用して、またはスタンドアロン Node.js アプリケーションとして実行できます。
Grafana Docker イメージは Docker Hub で公開されています。
次の例は、Docker Compose を使用して 2 つの別個の Docker コンテナーで Grafana とリモート HTTP レンダリング サービスを実行する方法を示しています。
次の内容を含むdocker-compose.yml
を作成します。
version : ' 2 '
services :
grafana :
image : grafana/grafana:latest
ports :
- ' 3000:3000 '
environment :
GF_RENDERING_SERVER_URL : http://renderer:8081/render
GF_RENDERING_CALLBACK_URL : http://grafana:3000/
GF_LOG_FILTERS : rendering:debug
renderer :
image : grafana/grafana-image-renderer:latest
ports :
- 8081
次に、docker compose を実行します。
docker-compose up
次の例では、リモート HTTP レンダリング サービスをスタンドアロン Node.js アプリケーションとして構築して実行し、Grafana を適切に構成する方法を説明します。
Grafana イメージ レンダラー プラグインの Git リポジトリのクローンを作成します。
依存関係をインストールしてビルドします。
yarn install --pure-lockfile
yarn run build
サーバーを実行します。
node build/app.js server --port=8081
Grafana 構成を更新します。
[rendering]
server_url = http://localhost:8081/render
callback_url = http://localhost:3000/
グラファナを再起動します。
レンダリング エンドポイントへのアクセスは、認証トークンを提供するリクエストに制限されます。このトークンは、Grafana 構成ファイルとレンダラー構成ファイルで構成する必要があります。このトークンは、プラグインをリモート レンダリング モードで実行するときに、不正なファイル開示を避けるために重要です (CVE-2022-31176 を参照)。
このシークレット トークンを構成するには、Grafana Image Rendering のドキュメントを参照してください。デフォルト値-
開始時に Grafana とイメージ レンダラーの両方で設定されますが、これをより安全な値に更新することを強くお勧めします。
利用可能な構成設定については、Grafana Image Rendering のドキュメントを参照してください。
トラブルシューティングのヘルプについては、Grafana イメージ レンダリングのトラブルシューティング ドキュメントを参照してください。
イメージ レンダラー自動テスト スイートを実行するには、ルート フォルダーから次のコマンドを実行する必要があります。
yarn test
これにより、Docker で Grafana インスタンスが起動され、テスト スイートが実行されます。
注:
参照イメージ ファイル ( /tests/testdata
にあります) に予想される変更がある場合は、 yarn test-update
を実行して、更新された参照をプッシュします。
テストが失敗し、取得したイメージと参照イメージの違いを確認したい場合は、 yarn test-diff
を実行します。これにより、差分を含むイメージ ( diff_
という名前) が/tests/testdata
フォルダーに生成されます。
ローカル環境ではテストが成功したが、Drone では失敗した場合。次の手順に従って、Drone パイプラインと同様の環境でテストを実行できます。これにより、 grafana-image-renderer
リポジトリのローカル ファイルが Docker イメージにマウントされるため、Docker イメージで発生した変更はローカル環境でも利用できるようになります。これにより、Docker でyarn test-diff
とyarn test-update
を実行し、結果をローカルで確認できるようになります。
cd ./devenv/docker/drone
docker-compose up
drone-docker-puppeteer
コンテナー内でターミナルを開き、次のコマンドを実行します。 cd /drone/src
PUPPETEER_CACHE_DIR=/drone/src/cache yarn install --frozen-lockfile --no-progress
PUPPETEER_CACHE_DIR=/drone/src/cache CI=true yarn test-ci
注: Docker コンテナーではテストに時間がかかる場合があります。タイムアウトの問題が発生した場合は、 --testTimeout option
を使用してテスト コマンドを実行できます。
PUPPETEER_CACHE_DIR=/drone/src/cache CI=true yarn test-ci --testTimeout=10000