Um plug-in de back-end do Grafana que processa a renderização de painéis e dashboards em PNGs usando um navegador headless (Chromium).
Este plugin é empacotado em um único executável com tempo de execução Node.js e navegador Chromium. Isso significa que você não precisa ter o Node.js e o Chromium instalados em seu sistema para que o plugin funcione.
No entanto, o navegador Chromium depende de certas bibliotecas. Se você não tiver todas essas bibliotecas instaladas em seu sistema, poderá ver alguns erros ao tentar renderizar uma imagem. Para obter mais informações, incluindo ajuda para solução de problemas, consulte a documentação do Grafana Image Rendering.
A renderização de imagens requer muita memória, principalmente porque o Grafana cria instâncias do navegador em segundo plano para a renderização real. Recomendamos um mínimo de 16 GB de memória livre nas imagens de renderização do sistema.
A renderização de múltiplas imagens em paralelo requer um consumo de memória ainda maior. Você pode usar o serviço de renderização remota para renderizar imagens em um sistema remoto, para que os recursos do sistema local não sejam afetados.
Você pode instalar o plugin usando Grafana CLI (forma recomendada) ou com imagem Grafana Docker.
grafana-cli plugins install grafana-image-renderer
Este plugin não é compatível com a imagem atual do Grafana Docker e requer dependências adicionais no nível do sistema. Recomendamos configurar outro contêiner Docker para renderização e usar renderização remota. Para obter instruções, consulte Executar no Docker.
Se você ainda deseja instalar o plugin com a imagem Grafana Docker, consulte as instruções sobre como construir uma imagem Grafana personalizada na documentação do Grafana Docker.
Nota: Requer uma conexão com a internet.
Você pode executar este plugin como um serviço de renderização HTTP remoto. Nesta configuração, o Grafana renderiza uma imagem fazendo uma solicitação HTTP ao serviço de renderização remota, que por sua vez renderiza a imagem e a retorna na resposta HTTP ao Grafana.
Você pode executar o serviço de renderização HTTP remoto usando Docker ou como um aplicativo Node.js independente.
As imagens do Grafana Docker são publicadas no Docker Hub.
O exemplo a seguir mostra como você pode executar o Grafana e o serviço de renderização HTTP remoto em dois contêineres Docker separados usando o Docker Compose.
Crie um docker-compose.yml
com o seguinte conteúdo:
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
Em seguida, execute o docker compose.
docker-compose up
O exemplo a seguir descreve como construir e executar o serviço de renderização HTTP remoto como um aplicativo Node.js independente e configurar o Grafana adequadamente.
Clone o repositório Git do plugin renderizador de imagem Grafana.
Instale dependências e construa:
yarn install --pure-lockfile
yarn run build
Execute o servidor:
node build/app.js server --port=8081
Atualize a configuração do Grafana:
[rendering]
server_url = http://localhost:8081/render
callback_url = http://localhost:3000/
Reinicie o Grafana.
O acesso aos endpoints de renderização é restrito a solicitações que fornecem um token de autenticação. Este token deve ser configurado no arquivo de configuração do Grafana e no arquivo de configuração do renderizador. Este token é importante quando você executa o plug-in no modo de renderização remota para evitar a divulgação não autorizada de arquivos (consulte CVE-2022-31176).
Consulte a documentação do Grafana Image Rendering para configurar esse token secreto. O valor padrão -
é configurado no Grafana e no renderizador de imagem quando você começa, mas recomendamos fortemente que você atualize para um valor mais seguro.
Para obter as configurações disponíveis, consulte a documentação do Grafana Image Rendering.
Para obter ajuda na solução de problemas, consulte a documentação de solução de problemas do Grafana Image Rendering.
Para executar os conjuntos de testes automatizados do renderizador de imagens, você precisa executar o seguinte comando na pasta raiz:
yarn test
Isso iniciará uma instância do Grafana no Docker e, em seguida, executará os conjuntos de testes.
Notas:
Se houver algumas alterações esperadas nos arquivos de imagem de referência (localizados em /tests/testdata
), execute yarn test-update
e envie as referências atualizadas.
Se os testes falharem e você quiser ver a diferença entre a imagem obtida e a imagem de referência, execute yarn test-diff
. Isso irá gerar imagens (chamadas diff_
) contendo as diferenças na pasta /tests/testdata
.
Se os testes forem bem-sucedidos em seu ambiente local, mas falharem no Drone. Você pode seguir estas etapas para executar os testes em um ambiente semelhante ao pipeline do Drone. Isso montará seus arquivos locais do repositório grafana-image-renderer
na imagem do Docker para que qualquer alteração que aconteça na imagem do Docker esteja disponível em seu ambiente local. Isso permite que você execute yarn test-diff
e yarn test-update
no Docker e veja os resultados localmente.
cd ./devenv/docker/drone
docker-compose up
drone-docker-puppeteer
e execute os seguintes comandos: 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
Notas: Os testes podem demorar mais no contêiner Docker. Se você tiver problemas de tempo limite, poderá executar o comando de teste com a --testTimeout option
:
PUPPETEER_CACHE_DIR=/drone/src/cache CI=true yarn test-ci --testTimeout=10000