Implementação do Grafana Image Renderer
Guia técnico de instalação e configuração do serviço de renderização remota para exportação de painéis via Docker.
O Grafana Image Renderer é um serviço que transforma dashboards e painéis do Grafana em imagens estáticas (PNG), essenciais para o envio de alertas via e-mail, Telegram ou Slack.
Historicamente, essa funcionalidade era integrada ao Grafana, mas devido ao alto consumo de recursos do Chromium, foi segregada em um microsserviço ou plugin separado. Para ambientes de produção, a execução via Docker (Remote Rendering) é a abordagem superior por isolar as dependências do navegador e não onerar o binário principal do Grafana.
1. Arquitetura e Decisão de Instalação
Existem duas formas principais de implementar o Renderer:
- Plugin (Local): Fácil instalação via CLI, mas instável em sistemas sem as bibliotecas do Chrome compartilhadas.
- Remote Rendering (Docker): Recomendado. O Grafana envia uma requisição HTTP para um container dedicado que processa a imagem e devolve o binário.
Nota de Performance: Renderizar imagens exige CPU e RAM significativos. Em instâncias com menos de 2GB de RAM, o processo frequentemente falha com erros de timeout.
2. Implementação via Docker Compose
Esta é a configuração estratégica para máxima alavancagem de recursos e isolamento.
Passo 1: Configurar o docker-compose.yml
Crie um serviço dedicado para o renderer. Ele deve compartilhar a mesma rede que o Grafana.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
services:
grafana:
image: grafana/grafana-enterprise:latest
container_name: grafana
ports:
- "3000:3000"
environment:
GF_RENDERING_SERVER_URL: http://renderer:8081/render
GF_RENDERING_CALLBACK_URL: http://grafana:3000/
GF_LOG_LEVEL: info
networks:
- monitoring
renderer:
image: grafana/grafana-image-renderer:latest
container_name: grafana-renderer
ports:
- "8081"
environment:
ENABLE_METRICS: "true"
BROWSER_TZ: "America/Sao_Paulo"
networks:
- monitoring
networks:
monitoring:
driver: bridge
Passo 2: Variáveis Críticas de Ambiente
GF_RENDERING_SERVER_URL: Endereço onde o Grafana encontra o serviço de renderização.GF_RENDERING_CALLBACK_URL: Essencial. É o endereço que o Renderer usa para acessar o Grafana e “tirar o print”. Se o Renderer não conseguir resolver este host, a imagem retornará em branco ou erro 500.
3. Configuração no grafana.ini (Caso não use Docker)
Se estiver operando em Bare Metal, edite o arquivo de configuração do Grafana (geralmente em /etc/grafana/grafana.ini):
1
2
3
4
[rendering]
server_url = http://localhost:8081/render
callback_url = http://localhost:3000/
concurrent_render_limit = 30
4. Validação e Uso
Após subir os serviços, a funcionalidade de “Share” será expandida.
Como gerar a imagem:
- Abra qualquer Panel no seu Dashboard.
- Clique no título do painel > Share.
- Uma nova aba/botão chamado Direct Link Rendered Image aparecerá.
- Ao clicar, o Grafana enviará a chamada para o Renderer, que abrirá uma instância headless do Chromium, carregará o painel e gerará o PNG.
Teste via URL direta:
Você pode forçar a renderização via parâmetro na URL:
http://<grafana-ip>:3000/render/d-solo/<dashboard-id>/<slug>?orgId=1&panelId=<id>&width=1000&height=500
5. Troubleshooting (Resolução de Problemas Reais)
| Problema | Causa Provável | Solução Técnica |
|---|---|---|
| Imagem com erro “Unauthorized” | O Renderer não tem acesso ao Dashboard. | Certifique-se de que a opção viewers_can_edit ou permissões de snapshot estão ativas. |
| Timeout ao renderizar | Falta de recursos (CPU/RAM). | Aumente o limite de memória do container ou incremente GF_RENDERING_RENDER_KEY_TIMEOUT. |
| Fontes quebradas/Quadrados | Ausência de fontes no container. | Utilize a imagem oficial grafana-image-renderer que já inclui fonts-noto. |
| Gráfico em branco | callback_url incorreta. |
O Renderer precisa “enxergar” o Grafana pelo IP/DNS definido nesta variável. |