Grafana Git Sync: dashboards como código no Grafana 13

O Grafana Git Sync guarda seus dashboards como arquivos JSON em um repositório Git e mantém os dois lados sincronizados. Quem edita o painel na interface gera um commit ou um pull request. Quem altera o arquivo no Git vê o dashboard mudar no Grafana.

Isso resolve um problema clássico de NOC: o dashboard do plantão muda sem aviso, ninguém sabe quem mexeu e não existe versão anterior para voltar. Neste artigo você vê como o Grafana Git Sync funciona no Grafana 13, como configurá-lo com GitHub e quais limites aparecem em produção.

TL;DR

  • O Grafana Git Sync sincroniza dashboards e pastas com um repositório Git, com histórico, revisão por pull request e rollback.
  • O recurso chegou à disponibilidade geral no Grafana 13, com autenticação por GitHub App e suporte a GitLab, Bitbucket e Git puro.
  • Alertas e data sources ficam fora da sincronização. Use Terraform para eles.
  • A documentação recomenda no máximo 1.000 recursos por conexão de repositório.

Por que dashboards editados na interface viram risco

Dashboards editados direto na interface têm três problemas em operação: não deixam histórico confiável, não passam por revisão e não se copiam com segurança entre ambientes. Cada edição sobrescreve a anterior. Quando um painel quebra no meio de um incidente, ninguém consegue ver o que mudou.

A documentação do Grafana lista os ganhos de levar os dashboards para o Git: histórico de versões, rollback, trilha de auditoria, automação de CI/CD, consistência entre ambientes e backup a partir do repositório.

O Grafana 13 foi apresentado no GrafanaCON 2026, em abril, e colocou o Git Sync em disponibilidade geral. O anúncio do Grafana 13 diz ainda que os dashboards provisionados por API, Terraform ou Git Sync continuam funcionando com o novo schema dos dynamic dashboards.

Como o Grafana Git Sync funciona

O Grafana Git Sync liga um local do Git (repositório, branch e caminho) a uma instância do Grafana. O Grafana cria uma pasta em Dashboards, em geral com o nome do repositório, e coloca ali os dashboards daquele local. Uma instância pode conectar vários repositórios, branches ou caminhos.

A sincronização funciona nos dois sentidos. Em OSS e Enterprise, o Grafana consulta o repositório a cada 60 segundos por padrão, e no Grafana Cloud o padrão é 300 segundos. Com webhooks, a mudança aparece quase na hora.

O escopo é estreito de propósito: o Grafana Git Sync cuida de dashboards e pastas. Alertas, data sources e painéis avulsos não são sincronizados, segundo a documentação oficial do Git Sync.

Fluxo de edição do Grafana Git Sync

Ao editar um dashboard provisionado, você clica em Save dashboard e informa branch, pasta do repositório, nome do arquivo e comentário de commit. A aba Changes mostra o diff. Depois você escolhe Open a pull request in GitHub e faz o merge pelo fluxo normal do time.

Esse comportamento é configurável. Na conexão, você liga ou desliga a abertura de pull request ao salvar, o push direto na branch e o modo somente leitura.

Duas regras valem para o dia a dia. Para excluir um dashboard, apague o arquivo no repositório, porque a interface não exclui. Para restaurar, abra um pull request que devolva o arquivo, porque a restauração pela interface não existe hoje.

Provedores Git compatíveis

ProvedorAutenticaçãoEdições
Git puroPersonal Access TokenCloud, OSS, Enterprise
GitHubPersonal Access Token ou GitHub AppCloud, OSS, Enterprise
GitLabPersonal Access TokenCloud, Enterprise
BitbucketAPI token com escoposCloud, Enterprise

Git puro, GitLab e Bitbucket exigem o Grafana 12.4 ou superior, e GitLab e Bitbucket têm funcionalidade limitada por enquanto. O Git puro aceita só Smart HTTP v2, sem SSH.

Configuração com GitHub passo a passo

Antes de começar, confirme o que a documentação pede. Você precisa de uma instância do Grafana (Cloud, OSS ou Enterprise) com direitos de administrador e de um provedor Git compatível. Se for usar webhooks ou renderização de imagens, a instância precisa estar acessível pela internet.

O feature toggle provisioning vem ligado por padrão no Grafana Cloud e, a partir do Grafana 13, também em OSS e Enterprise. Você não precisa ativá-lo à mão. Os requisitos completos estão em Before you begin.

Crie o GitHub App

Prefira o GitHub App ao Personal Access Token. O token precisa vir de uma conta com papel de administrador no repositório e fica preso a uma pessoa. O app é uma instalação com permissões fixas nos repositórios que você escolher.

  1. Crie o app com um nome único e use a URL do seu Grafana como página inicial.
  2. Desative a opção Active do webhook.
  3. Defina as permissões do repositório: Administration (read-only), Contents (read and write), Metadata (read-only), Pull requests (read and write) e Webhooks (read and write).
  4. Limite a instalação à sua conta, gere a chave privada (arquivo PEM) e instale o app nos repositórios que serão sincronizados.
  5. Anote o App ID, o Installation ID (está na URL da página da instalação) e a chave privada.

Conecte o repositório no Grafana

Em Administration > General > Provisioning, escolha GitHub e selecione Connect to a new app. Informe App ID, Installation ID, chave privada e a URL do repositório. Em seguida, defina a branch (o padrão é main) e o caminho opcional dentro do repositório.

Em Choose what to synchronize, escolha entre uma pasta nova ou a raiz, dê um nome de exibição e selecione Synchronize with external storage. Você pode criar até 10 conexões.

As configurações finais reúnem o intervalo de sincronização, o modo somente leitura, as opções de pull request e push, as prévias de dashboard e os webhooks. Termine em Finish.

Para produção, deixe o pull request ligado e o push direto desligado, e proteja a branch main no GitHub com revisão obrigatória. Assim, nenhuma mudança chega ao painel do plantão sem revisão.

Defina o Path como dashboards e organize os arquivos por domínio:

dashboards/
├── aws/
│   ├── ec2-visao-geral.json
│   └── rds-saude.json
└── noc/
    └── plantao-resumo.json

Se o seu Git roda em rede privada, o Grafana auto-hospedado (13.0.4, 13.1.1 ou superior) bloqueia por padrão hosts que resolvem para endereços privados. Libere só o host necessário no grafana.ini, porque ele recebe o seu token Git a cada sincronização:

ini

[provisioning]
allowed_git_urls = git.interno.example.com

Validação no pull request com GitHub Actions

Como o Grafana Git Sync abre pull requests, o repositório é o lugar certo para barrar erro antes do merge. O workflow abaixo garante JSON válido e uid presente e único em todos os arquivos.

yaml

name: validar-dashboards
on:
  pull_request:
    paths:
      - "dashboards/**/*.json"

jobs:
  validar:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6

      - name: JSON válido
        run: find dashboards -name '*.json' -print0 | xargs -0 -n1 jq empty

      - name: uid presente e único
        run: |
          set -euo pipefail
          uids=$(find dashboards -name '*.json' -print0 | xargs -0 -n1 jq -r '(.uid // .metadata.name // "")')
          if echo "$uids" | grep -q '^$'; then echo "Há dashboard sem uid"; exit 1; fi
          dup=$(echo "$uids" | sort | uniq -d)
          if [ -n "$dup" ]; then echo "uid duplicado: $dup"; exit 1; fi

Mantive o fallback .metadata.name para o caso de seus arquivos usarem o schema v2 dos dynamic dashboards. Confira o formato real dos seus arquivos antes de ativar a regra.

Grafana Git Sync, Terraform ou API: qual usar

A página de opções de deploy do Grafana descreve três caminhos.

OpçãoIndicada paraCusto da escolha
Git SyncTimes que já trabalham com Git e não querem pipeline próprioMenos controle sobre o processo de deploy
TerraformTimes com fluxo de Terraform existenteAprender Terraform, se você ainda não usa
API do GrafanaQuem precisa de controle totalMais código para escrever e manter

A API é a base dos outros dois métodos, segundo o Grafana.

Minha recomendação: use o Grafana Git Sync para dashboards e pastas, e o Terraform para o que ele não cobre, como data sources e alertas. Cada ferramenta fica com um tipo de recurso, o que evita dois donos para o mesmo objeto.

Limites e armadilhas em produção

Estes são os pontos que mais surpreendem o time depois de migrar para o Grafana Git Sync:

  • Escala: a documentação recomenda no máximo 1.000 recursos por conexão. O Grafana Cloud Free permite 1 repositório e 20 recursos, e os demais planos, o OSS e o Enterprise permitem 10 repositórios. Para passar de 1.000, conecte o mesmo repositório várias vezes, cada uma com um caminho diferente, e use sincronização sem pasta.
  • UID duplicado: o Git Sync não assume um recurso enquanto existir no Grafana um dashboard não gerenciado com o mesmo UID. Remova o original manualmente antes.
  • Instância inteira: a sincronização de toda a instância é experimental, assim como a migração de recursos existentes. Teste fora de produção.
  • Rede: no Grafana Cloud, o servidor Git precisa aceitar tráfego dos IPs do Grafana, e os webhooks exigem que ele alcance *.grafana.net. Se a instância não é acessível pela internet, desative o webhook e use o intervalo de consulta.

Veja os limites de uso do Git Sync antes de planejar a migração, porque os números variam por plano.

Segurança, custo e observabilidade

Segurança. No Grafana Git Sync, use o GitHub App com as cinco permissões listadas e nada além. As pastas provisionadas herdam os papéis por padrão (Admin para Admin, Editor para Editor, Viewer para Viewer), e você ajusta isso nas permissões do Git Sync. Custo. A documentação consultada não descreve cobrança separada para o Git Sync, e os limites dependem do plano do Grafana Cloud. Considere o Image Renderer, opcional, que gera prévias nos pull requests, e a carga extra no banco.

Observabilidade. Acompanhe a conexão do Grafana Git Sync em Administration > General > Provisioning, na aba Repositories. O Grafana Advisor, também em disponibilidade geral no Grafana 13, roda verificações periódicas e aponta data sources com falha, plugins desatualizados e SSO mal configurado.

Conclusão

O Grafana Git Sync transforma dashboards em código revisável: cada mudança passa por pull request, deixa histórico e pode ser revertida pelo repositório. Em troca, ele cobre só dashboards e pastas, recomenda até 1.000 recursos por conexão e exige excluir e restaurar pelo Git.

Comece pequeno. Conecte um repositório vazio com o path dashboards, salve um dashboard de teste e abra o primeiro pull request. Depois leve o fluxo para os painéis do plantão e acrescente o workflow de validação.

Quer uma solução personalizada para seu negócio?

Nossos especialistas em cloud computing analisam seu caso e criam uma estratégia sob medida.

Compartilhe essa publicação
Sobre o autor
Foto de Haniel Maia

Haniel Maia

Haniel Maia é Técnico NOC na KXC Tecnologia, onde atua no monitoramento e observabilidade, e na operação de ambientes em nuvem. Estudante de Redes de Computadores no IFPB, desenvolve projetos práticos com AWS, Terraform, Docker, Kubernetes e CI/CD, e é um participante ativo em comunidades locais AWS. Escreve sobre Cloud, DevOps e operações com foco no que funciona em produção. Seu objetivo é atuar como Engenheiro DevOps/SRE, construindo infraestruturas automatizadas, resilientes e bem documentadas.

Ver perfil e posts