Skip to main content


Introdução ao Grafana


O Grafana é uma plataforma usada para criar painéis e gráficos a partir de métricas que vêm de diversas fontes de dados, como logs ou serviços monitorados. Esses painéis permitem a visualização e monitoramento de dados de forma clara, ajudando a identificar tendências e problemas.


Além disso, o Grafana permite configurar alertas com base nessas métricas, avisando quando algo precisa de atenção. Ele pode se integrar com várias fontes de dados, como Prometheus, Elasticsearch e MySQL, e oferece tanto uma versão gratuita quanto opções pagas com mais recursos.


Quando falamos de Grafana, falamos basicamente de monitoramento e quando falamos de monitoramento em relação ao Grafana, estamos nos referindo ao processo de acompanhar o desempenho e o comportamento de sistemas, aplicativos ou infraestrutura de TI em tempo real. O monitoramento é essencial para garantir que tudo esteja funcionando corretamente e para detectar problemas rapidamente, antes que causem grandes interrupções.


O objetivo do monitoramento é coletar e visualizar informações, como o uso de CPU, memória, tráfego de rede, erros de sistema, entre outros, de forma contínua. Isso permite que as pessoas possam acompanhar como os sistemas estão se comportando ao longo do tempo e identificar quando algo sai do esperado. O Grafana ajuda nesse processo ao transformar esses dados em gráficos e painéis que facilitam a interpretação, alertando quando algo precisa de atenção, como um aumento no uso de recursos ou uma falha em algum serviço.


Esse tipo de monitoramento é essencial para manter a disponibilidade e o desempenho de sistemas, permitindo que problemas sejam identificados e corrigidos antes de afetar os usuários.



Data Source


Um data source (ou fonte de dados) é o local ou sistema de onde o Grafana obtém informações para gerar os gráficos, painéis e relatórios, ou seja, é a origem dos dados que serão consultados e exibidos no Grafana. Esses dados podem ser métricas, logs, traços (traces) ou informações provenientes de diferentes tipos de sistemas, como bancos de dados, serviços de monitoramento, nuvens públicas, entre outros.


O Grafana precisa de data sources porque ele não armazena dados por conta própria, ele é apenas uma ferramenta de visualização e análise de dados, e não uma solução para armazenamento. O Grafana oferece suporte a uma ampla variedade de ferramentas e tecnologias que obtêm, processam e armazenam dados, permitindo que ele funcione como uma solução centralizada de visualização e análise. Essa flexibilidade é um dos principais motivos para sua popularidade, especialmente em ambientes de monitoramento e observabilidade.


Abaixo podemos ver os principais plugins que fornecem a interface necessária para que o Grafana se conecte e comunique com diversas ferramentas de armazenamento de dados. Eles atuam como "pontes" entre o Grafana e os sistemas que coletam e armazenam métricas, logs e outros tipos de dados.



Time Series Databases


São bancos de dados otimizados para armazenar e consultar dados em séries temporais. No contexto do Grafana, essas fontes são frequentemente usadas para métricas e monitoramento contínuo.

  • Prometheus
    Um sistema de monitoramento e banco de dados de séries temporais baseado em pull, amplamente utilizado para métricas de infraestrutura e serviços. Ele oferece consultas por meio de PromQL, que é altamente compatível com Grafana.

  • Graphite
    Um sistema de monitoramento e gráficos que coleta, armazena e exibe dados de séries temporais. Ele é mais antigo que Prometheus, mas ainda amplamente utilizado para soluções legadas.

  • InfluxDB
    Um banco de dados de séries temporais rápido, otimizado para alta ingestão de dados e análise. É amplamente utilizado para monitorar métricas de IoT, infraestrutura e aplicativos.

  • OpenTSDB
    Um banco de dados distribuído para séries temporais, construído sobre o HBase. Ele é altamente escalável e geralmente usado em ambientes de grande porte.



Logging & Document Databases


Essas fontes de dados são voltadas para o armazenamento e consulta de logs e documentos estruturados ou semiestruturados.

  • Loki
    Uma solução de agregação de logs desenvolvida pela Grafana Labs, que funciona de forma semelhante ao Prometheus, mas focada em logs. Ele é otimizado para pesquisa e indexação leve, reduzindo os custos.

  • Elasticsearch
    Um mecanismo de busca e análise de documentos distribuído, amplamente utilizado para armazenar logs e dados estruturados. Com Grafana, é ideal para visualização de logs e análise avançada.



Distributed Tracing


Essas fontes são projetadas para rastrear solicitações distribuídas em microsserviços e ambientes complexos.

  • Jaeger
    Uma ferramenta de rastreamento distribuído desenvolvida pela CNCF (Cloud Native Computing Foundation). É usada para monitorar o desempenho e identificar gargalos.

  • Tempo
    Uma solução de rastreamento distribuído desenvolvida pela Grafana Labs. É projetada para ser escalável e fácil de integrar com o Grafana, com foco em simplicidade e eficiência.

  • Zipkin
    Um sistema de rastreamento distribuído que coleta dados de latência para solucionar problemas de desempenho em sistemas distribuídos.



Profiling


Essas ferramentas são usadas para análise detalhada do desempenho de sistemas e aplicativos.

  • Grafana Pyroscope
    Integração com o Pyroscope, uma ferramenta de análise de perfil de desempenho (profiling) que ajuda a identificar gargalos e problemas de código.

  • Parca
    Uma solução de profiling contínuo para análise de desempenho em produção, que pode ser integrada com Grafana para visualizações detalhadas.



SQL Databases


O Grafana suporta bancos de dados SQL como fontes de dados, permitindo que consultas SQL personalizadas sejam transformadas em painéis visuais.

  • MySQL
    Banco de dados relacional amplamente usado, suportado nativamente pelo Grafana para consultas SQL e visualização.

  • Microsoft SQL Server
    Outra opção de banco relacional popular, que permite consultas avançadas em dados estruturados.

  • PostgreSQL
    Um banco de dados relacional poderoso e flexível. É frequentemente usado com Grafana devido à sua robustez e capacidade de lidar com grandes volumes de dados.



Cloud Providers


Essas fontes de dados são específicas de provedores de nuvem e são utilizadas para monitorar serviços, métricas e logs de ambientes de nuvem.

  • Azure Monitor
    Serviço da Microsoft Azure que coleta métricas e logs de recursos em nuvem. O Grafana se conecta diretamente para exibir esses dados.

  • CloudWatch
    O serviço de monitoramento da AWS. Ele fornece métricas e logs para serviços e infraestrutura na nuvem da Amazon.

  • Google Cloud Monitoring
    Anteriormente conhecido como Stackdriver, permite monitorar métricas e recursos no Google Cloud Platform (GCP). O Grafana integra-se nativamente para visualizações.

  • Grafana Cloud
    A solução de monitoramento hospedada pela Grafana Labs, que combina métricas, logs e rastreamento distribuído com facilidade de uso.



Administração do Grafana


A administração do Grafana envolve várias funcionalidades essenciais para gerenciar e monitorar dados de forma eficaz. Abaixo, vou deixar uma visão geral dessas funcionalidades:



Dashboards


Os dashboards no Grafana é onde vamos colocar os painéis e gráficos para que possamos ter a visualização de dados em tempo real através deles. Nós podemos criar, editar e organizar dashboards para monitorar métricas específicas de suas fontes de dados. Além disso, é possível compartilhar dashboards com sua equipe e definir permissões de acesso conforme necessário.


No contexto de dashboards veremos os termos Panel (ou "Visualization" nas versões mais recentes) e Row com bastante frequência. Abaixo vou deixar uma explicação sobre o que são e para que servem.

  • Panel
    Um Panel é o componente básico de visualização de dados dentro de um dashboard. É onde nós configuramos como os dados serão apresentados, como gráficos, tabelas, heatmaps, alertas, entre outros. Sua função é basicamente apresentar dados coletados de uma fonte (ex.: Prometheus, Elasticsearch, etc.).

    Também podemos configurar como os dados são filtrados, processados e exibidos e personalizar a visualização para interpretar os dados da melhor forma (ex.: gráficos de linha, barras, gauge, etc.).

  • Row
    Uma Row é uma linha de organização dentro do dashboard. Serve para agrupar e organizar os Panels visualmente e hierarquicamente. É usado basicamente para facilitar a organização do layout do dashboard, especialmente quando há muitas métricas a serem monitoradas. É muito usado para dividir um dashboard em seções, como:

    • Uma row chamada "Infraestrutura" contendo panels sobre CPU, memória, e disco.
    • Outra row chamada "Aplicações" mostrando métricas de tráfego, erros e desempenho de APIs.


Playlists

As playlists permitem exibir dashboards automaticamente em sequência. É útil em cenários como monitores de TV, onde diferentes dashboards podem ser apresentados em intervalos regulares, sem interação manual.



Snapshots

Um snapshot é uma captura estática do estado atual de um dashboard, incluindo as métricas exibidas naquele momento. É útil para compartilhar ou arquivar um estado específico do dashboard, independentemente das alterações futuras.


Um Snapshot pode ser salvo localmente ou compartilhado com um link público. Os dados apresentados no snapshot são uma visualização estática e não serão atualizados em tempo real. É usado para troubleshooting, compartilhamento com colegas ou para armazenar dados de um evento crítico. Para gerar um snapshot, clique em Share (ícone de compartilhamento) no menu do dashboard.



Library Panels

Os library panels permitem reutilizar painéis (panels) em diferentes dashboards. É uma funcionalidade extremamente útil para garantir consistência entre dashboards e facilitar atualizações centralizadas.


Um painel salvo como library panel pode ser importado em vários dashboards. Alterações feitas no library panel original serão automaticamente refletidas em todos os dashboards que o utilizam, isso reduz redundâncias e erros ao atualizar painéis.



Public Dashboards

Os public dashboards são dashboards que podem ser compartilhados publicamente com pessoas que não têm acesso direto ao Grafana. Essa funcionalidade permite que usuários externos visualizem dashboards sem a necessidade de credenciais.


Para configurar um public dashboard, certifique-se de que as permissões do Grafana permitem o compartilhamento público. No menu do dashboard, clique em Share e depois copie o Link Público ou configure permissões para torná-lo acessível publicamente. Opcionalmente, pode ser protegido por senha para controle adicional.



Explore


A funcionalidade Explore do Grafana oferece um ambiente interativo para explorar métricas e logs. Com ela, você pode realizar consultas ad hoc, investigar problemas e obter insights rápidos sem a necessidade de criar dashboards permanentes. Essa ferramenta é especialmente útil para depuração e análise de dados em tempo real.



Alerting


O sistema de alertas do Grafana permite configurar notificações baseadas em condições específicas das métricas monitoradas. Você pode definir regras de alerta que, quando atendidas, disparam notificações através de diversos canais, como e-mail, Slack ou outros sistemas de gerenciamento de incidentes. Isso assegura que você seja informado prontamente sobre quaisquer anomalias ou problemas críticos.



Conexões (Data Sources)


O Grafana suporta uma ampla variedade de fontes de dados, permitindo que você se conecte a diferentes sistemas para coletar e visualizar informações. Entre as fontes de dados suportadas estão bancos de dados de séries temporais como Prometheus e InfluxDB, sistemas de logs como Loki e Elasticsearch, além de bancos de dados relacionais como MySQL e PostgreSQL. A configuração dessas conexões é realizada na seção de administração, onde você pode adicionar, editar ou remover fontes de dados conforme suas necessidades.



Administração


A seção de administração do Grafana engloba diversas tarefas essenciais para o gerenciamento da plataforma:

  • Gerenciamento de Usuários e Permissões: Você pode adicionar, editar ou remover usuários, além de atribuir diferentes níveis de acesso (Viewer, Editor, Admin) para controlar as permissões dentro da organização.

  • Gerenciamento de Organizações: O Grafana permite a criação de múltiplas organizações dentro de uma única instância, isolando recursos como dashboards e fontes de dados entre diferentes grupos ou equipes.

  • Configurações do Servidor: Inclui ajustes de preferências globais, como configurações de autenticação, temas, idiomas e outras opções que afetam o comportamento geral do Grafana.


Para uma compreensão mais aprofundada sobre a administração do Grafana, você pode consultar a documentação oficial disponível em: (Grafana Labs)



Instalando o Grafana


Podemos baixar o Grafana pelo link oficial, podemos instalar o pacote pré compilado disponível no repositório oficial ou podemos subir um container com ele. Em todos os testes irei demonstrar com o uso do Docker.


O Grafana está disponível em diferentes formas para atender às necessidades variadas de usuários e empresas. Os principais tipos de Grafana no mercado são:

  • Grafana Open Source
    A versão gratuita e de código aberto do Grafana. Perfeito para quem deseja configurar e gerenciar o Grafana por conta própria.

  • Grafana Enterprise
    Uma versão paga do Grafana destinada a empresas que precisam de recursos avançados e suporte oficial. Ideal para grandes corporações ou ambientes críticos que exigem suporte e funcionalidades robustas.

    Essa versão inclui todos os recursos do Grafana Open Source, além de adicionar funcionalidades empresariais como: Suporte oficial e SLA, integrações específicas (como Splunk, ServiceNow e outras), controle de acesso avançado e auditoria (compliance) e escalabilidade e otimizações para grandes ambientes.

  • Grafana Cloud
    Serviço gerenciado e baseado na nuvem oferecido pela própria Grafana Labs. Ótima opção para quem quer evitar a configuração e manutenção de infraestrutura.

  • Grafana Mimir (antigo Cortex)
    Focado em armazenar e consultar métricas em larga escala. É mais indicado para empresas com ambientes muito grandes e distribuídos. Essa versão é geralmente integrada ao Grafana Cloud ou à versão Enterprise.

  • Grafana Loki
    Solução para monitoramento de logs, que funciona de maneira nativa no ecossistema Grafana. Ideal para complementar o monitoramento com análise de logs. Integra-se diretamente ao Grafana como fonte de dados.

  • Grafana Tempo
    Solução para rastreamento distribuído (traces), projetada para suportar ambientes observáveis. Empresas que utilizam arquiteturas modernas como microservices.


O link que forneci mais acima (link oficial do grafana), oferece o pacote padrão do Grafana chamado Interprise, ele inclui tanto a versão Open Source quanto a possibilidade de habilitar recursos da Enterprise, caso necessário. Por padrão, ao instalar o Grafana, ele será executado na versão Open Source. Se você quiser usar os recursos da versão Enterprise, precisará ativá-los separadamente aplicando uma licença fornecida pela Grafana Labs.



Para usar via docker diretamente podemos usar o comando docker run -d --name=grafana -p 3000:3000 grafana/grafana. No meu caso, vou usar o Compose para subir o Grafana. Comece criando o arquivo do compose:


docker-compose.yaml
version: '3.2'

services:
grafana:
image: grafana/grafana
ports:
- 3030:3000

Agora, estando no mesmo diretório, basta executar o comando abaixo:

Terminal
sudo docker compose up -d

Dentro do container o WORKDIR é /usr/share/grafana e dentro desse diretório, o arquivo de configuração ficar em conf/defaults.ini.


Usuário e senha

O usuário e senha padrão do grafana é admin e admin, respectivamente.



Antes de continuar


Abaixo vou deixar um docker-compose.yaml que vai executar o Grafana, o Prometheus e o Node Exporter tudo em container, isso vai facilitar subir o ambiente e realizar os testes.


docker-compose-yml
version: '3.2'

name: Grafana_and_Prometheus

services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
#restart: unless-stopped
ports:
- 9090:9090
command:
- --config.file=/etc/prometheus/prometheus.yml
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus

# https://github.com/prometheus/node_exporter#docker
node-exporter:
image: quay.io/prometheus/node-exporter
container_name: node-exporter
#restart: unless-stopped
ports:
- 9100:9100
command:
- --path.rootfs=/host
- --collector.systemd
# disable metrics about the exporter itself
- --web.disable-exporter-metrics
# ignore docker container interfaces
- --collector.netdev.device-exclude=veth
# ignore docker container interfaces
- --collector.netclass.ignored-devices=veth
- --collector.textfile
- --collector.textfile.directory=/prometheus-textfile-directory
restart: unless-stopped
pid: host
volumes:
- /:/host:ro
- /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
- prometheus-textfile-directory:/prometheus-textfile-directory

grafana:
image: grafana/grafana
container_name: grafana
#restart: unless-stopped
ports:
- 3030:3000
volumes:
- grafana-data:/var/lib/grafana

volumes:
prometheus-data: {}
prometheus-textfile-directory: {}
grafana-data: {}


Adicionando um Data Source


Para demonstrar como adicionar um data source, o Grana e o Prometheus precisam estar em execução. Primeiro, faça login no Grafana usando suas credenciais.


  1. Clique em Connections, Add Data Source.
  2. Clique em Prometheus, e em Prometheus server URL adicione a URL do prometheus: http://prometheus:9090.
  3. Ao final da página, clique em Save & Test.

Se der certo, você verá uma caixa verde escrita:

Successfully queried the Prometheus API.
Next, you can start to visualize data by building a dashboard, or by querying data in the Explore view.



Criando nosso primeiro Dashboards


Vamos criar um Dashboard para depois criarmos alguns painéis.


No menu lateral esquerdo, clique em Dashboards, depois clique em New e então em New Dashboard para começar a criar um painel do zero. Para salvar o Dashboard vazio, basta clicar em Save Dashboard, dar um nome e uma descrição e depois clicar em Save.


Para criar um painel, faça: clique em Edit (dentro do dashboard), depois clique em Add e depois em Visualization para adicionar um painel individual ao dashboard.


  • Em Data source podemos escolher a fonte de dados para esse painel (vou manter o padrão: Prometheus).
  • Em Title podemos fornecer um título para esse painel.

Depois basta clicar em Save Dashboard. Assim teremos um painel que atualmente não exibe nada. Para começar a plotar alguma visualização, entre no modo de edição do painel. No campo metrics, insira uma consulta específica para a fonte de dados escolhida. Por exemplo:


node_cpu_seconds_total

# ou:
node_network_receive_bytes_total

Em Label filters podemos definir melhor os filtros. Ao finalizar basta clicar em Run queries, agora salve o Dashboard.



Contadores que só crescem


Alguns contadores, como ifInOctets e ifOutOctets, representam valores cumulativos que só aumentam ao longo do tempo, reiniciando apenas quando a interface é reiniciada ou o contador atinge seu limite (overflow). Isso é comum ao coletar métricas de tráfego em uma interface de rede. Para saber o tráfego real (taxa de download ou upload), precisamos calcular a taxa de variação entre as amostras ao longo de um período de tempo. Isso é feito com o cálculo de taxa usando a função rate().


Para calcular o tráfego real (download) numa interface de rede, use o seguinte comando no PromQL:

rate(ifInOctets{ifDescr="enp6s0"}[1m])

Esse comando calcula a média do tráfego recebido na interface enp6s0 durante o último minuto ([1m]). O resultado será dado em bytes por segundo.


Se quiser o tráfego em bits por segundo, multiplique por 8:

rate(ifInOctets{ifDescr="enp6s0"}[1m]) * 8

Se você deseja visualizar o valor acumulado total do tráfego desde o início da coleta (não uma taxa), pode usar diretamente o valor bruto do contador:

ifInOctets{ifDescr="enp6s0"}


Fontes


https://grafana.com/docs/grafana/latest/fundamentals/

https://grafana.com/docs/grafana/latest/setup-grafana/

Colocar isso em outro arquivo:

Administrando nosso Grafana.

Criação de usuários e permissões

Como exportar dashboards:

No Grafana, você pode exportar um painel individual ou um dashboard completo como um modelo JSON. Esse JSON pode ser importado em outro sistema Grafana ou compartilhado com outras pessoas. Aqui está o processo detalhado para exportar e importar:


Exportar um Dashboard ou Painel

  1. Acesse o Dashboard:

    • Abra o dashboard que contém o painel ou os painéis que você deseja exportar.
  2. Exportar o Dashboard Completo:

    • Clique no ícone de Configurações do dashboard (ícone de engrenagem) no canto superior direito.
    • No menu lateral, selecione a opção "JSON Model".
    • O Grafana mostrará o modelo JSON completo do dashboard.
    • Clique em "Download JSON" para baixar o arquivo no seu sistema.
  3. Exportar um Painel Individual (opcional):

    • No painel que você deseja exportar, clique no ícone de "Mais opções" (três pontinhos no canto superior direito do painel).
    • Selecione "Share" (Compartilhar).
    • Na aba "Export", clique em "View JSON" para exibir o JSON do painel.
    • Copie o JSON ou baixe-o como arquivo para reutilização.

Importar o Dashboard ou Painel em Outro Sistema

  1. Acesse a Opção de Importação:

    • No outro sistema Grafana, clique no botão de "+" no menu lateral esquerdo e selecione "Import".
  2. Carregar o JSON Exportado:

    • Você pode:
      • Fazer upload do arquivo JSON que você baixou.
      • Ou colar o conteúdo JSON diretamente no campo de texto fornecido.
  3. Definir Datasources:

    • Durante a importação, o Grafana pedirá para mapear as fontes de dados usadas no JSON com as disponíveis no sistema de destino.
    • Certifique-se de configurar corretamente as fontes de dados, como Prometheus, InfluxDB, etc.
  4. Finalizar a Importação:

    • Clique em "Import" para concluir. O dashboard ou painel será recriado no novo sistema.

Notas Importantes

  • Compatibilidade de Datasources: Certifique-se de que o sistema de destino tenha as mesmas fontes de dados configuradas, ou você precisará editar o JSON para ajustá-las.
  • Permissões: Verifique se você tem permissões adequadas para exportar e importar dashboards.
  • Backup: Antes de importar, faça backup dos dashboards existentes no sistema de destino, se necessário.

Com esses passos, você pode transferir facilmente dashboards e painéis entre diferentes sistemas Grafana.