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.
- Instalação via código fonte
- Grafana via repositório oficial
- Grafana via Docker
Vamos ver como compilar o código fonte do Grafana no servidor.
# Instale os pacotes abaixo:
$ sudo apt-get install -y libfontconfig1 musl
# Entre no diretório abaixo:
$ cd /usr/src
# Baixe o código fonte do Grafana:
$ sudo wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.4.0.linux-amd64.tar.gz
# Descompacte o arquivo baixado:
$ sudo tar -zxvf grafana-*.tar.gz
# Entre no diretório recém criado quando descompactamos o grafana:
$ cd grafana-v11.4.0/
# Crie um serviço no SystemD para o grafana:
$ sudo vim /etc/systemd/system/grafana.service
##################### Conteúdo do serviço:
[Unit]
Description=Grafana instance
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/src/grafana-v11.4.0/bin/grafana-server --homepath=/usr/src/grafana-v11.4.0/
Restart=always
[Install]
WantedBy=multi-user.target
##################### Fim do conteúdo do serviço.
# Habilite e inicie o serviço:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now grafana.service
Essa instalação sobe o Grafana em todas as interfaces na porta 3000. Para um ambiente de produção, recomendo subir o Grafana apontando para localhost e colocar um Proxy Reverso para permitir o acesso a aplicação. O arquivo de configuração ficar em conf/defaults.ini
dentro do diretório descompactado do Grafana.
É possível instalar o Grafana usando o repositório oficial, essa é a forma mais simples de instalar ele num servidor.
# Instale os pacotes abaixo:
$ sudo apt-get install -y apt-transport-https software-properties-common wget
# Importe a chave GPG:
$ sudo mkdir -p /etc/apt/keyrings/ && wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
# Adicione o repositório:
$ echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
# Atualize a lista de pacotes disponíveis:
$ sudo apt-get update
# Instale o Grafana Open Source:
$ sudo apt-get install -y grafana
Essa instalação é similar ao processo de compilar o código fonte, é necessário criar um serviço no SystemD e seguir as boas práticas de instalação em ambientes de produção.
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:
version: '3.2'
services:
grafana:
image: grafana/grafana
ports:
- 3030:3000
Agora, estando no mesmo diretório, basta executar o comando abaixo:
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
.
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.
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.
- Clique em Connections, Add Data Source.
- Clique em Prometheus, e em Prometheus server URL adicione a URL do prometheus:
http://prometheus:9090
. - Ao final da página, clique em Save & Test.
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
Acesse o Dashboard:
- Abra o dashboard que contém o painel ou os painéis que você deseja exportar.
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.
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
Acesse a Opção de Importação:
- No outro sistema Grafana, clique no botão de "+" no menu lateral esquerdo e selecione "Import".
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.
- Você pode:
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.
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.