Prometheus
Prometheus é um framework de monitoramento e alerta de código aberto. Diferentemente de soluções como Zabbix, ele oferece maior flexibilidade e módulos menos acoplados — é possível configurar seletivamente componentes como alerta e proxy. Tanto o servidor quanto os clientes do Prometheus são fornecidos prontos para uso, sem necessidade de instalação adicional. Os principais módulos do ecossistema incluem: Prometheus Server, Exporters, Pushgateway, PromQL, Alertmanager e interfaces gráficas.
Fluxo de trabalho dos componentes
- O Prometheus Server coleta métricas periodicamente de Jobs ou Exporters configurados.
- Ou recebe métricas enviadas pelo Pushgateway.
- Ou coleta métricas de outros servidores Prometheus.
- O servidor armazena as métricas localmente, executa regras de alerta (alert.rules) e pode gerar novas séries temporais ou enviar alertas ao Alertmanager.
- O Alertmanager processa os alertas recebidos conforme as regras do arquivo de configuração e dispara notificações.
- As métricas são visualizadas em interfaces gráficas.
Características dos componentes do Prometheus
1. Modelo de dados multidimensional
- Armazena dados de séries temporais.
- Cada série é diferenciada pelo nome da métrica e pares chave/valor (labels).
- Todas as métricas podem ter tags multidimensionais arbitrárias.
- Flexibilidade: não exige formato com ponto separador.
- Suporte a agregação, corte e fatia.
- Tipo float64; labels suportam caracteres Unicode.
2. Linguagem de consulta poderosa e flexível (PromQL)
- Permite consultar e agregar séries temporais em tempo real.
- Em uma única consulta, é possível multiplicar, somar, concatenar ou calcular percentis de múltiplas métricas.
- Suporte a correspondência exata e por expressão regular em labels:
- `=`: seleciona label com string exata.
- `!=`: seleciona label com string diferente.
- `=~`: seleciona label cujo valor corresponde à regex.
- `!~`: seleciona label cujo valor não corresponde à regex.
3. Fácil gerenciamento
- O Prometheus Server é um binário único que funciona localmente, sem dependência de armazenamento distribuído.
4. Alta eficiência
- Cada amostra ocupa em média 3,5 bytes.
- Um único servidor pode processar milhões de métricas.
- Utiliza modelo pull para coleta, facilitando testes locais e evitando que servidores problemáticos enviem métricas corrompidas.
- É possível usar Pushgateway para enviar dados ao servidor, além de descoberta de serviço ou configuração estática de targets.
- Várias interfaces gráficas e boa escalabilidade.
- Observação: pode haver perda de dados, portanto não é adequado para cenários que exigem 100% de precisão. Excelente para séries temporais e arquiteturas de microsserviços.
Grafana
Grafana é uma ferramenta de análise e visualização de métricas multiplataforma, de código aberto. Permite consultar e visualizar dados coletados, além de configurar notificações baseadas em regras de alerta. Principais características:
- Diversidade de visualização: gráficos rápidos e flexíveis no cliente; painéis com plugins para diversos tipos de visualização (heatmap, linhas, barras etc.).
- Fontes de dados: suporte a Prometheus, Elasticsearch e outras.
- Notificações de alerta: definição visual de regras de alerta com cálculo contínuo e envio de notificações via múltiplos canais.
- Exibição mista: diferentes fontes de dados no mesmo gráfico, com especificação por consulta e até fontes customizadas.
- Anotações: enriquecimento de gráficos com eventos de várias fontes; ao passar o mouse sobre um evento, são exibidos metadados completos.
- Filtros: criação dinâmica de pares chave/valor que se aplicam automaticamente a todas as consultas da fonte de dados.
Exporter
Exporter é o termo genérico para componentes de coleta de dados do Prometheus. Eles coletam métricas de hosts alvo e as convertem para o formato aceito pelo Prometheus. A equipe oficial do Prometheus desenvolve e mantém diversos Exporters: Node, Nginx, Redis, MQ, mysqld, memcached, consul, entre outros.
Node Exporter
Diferentemente de agentes tradicionais, o Node Exporter não envia dados para um servidor central; ele aguarda que o servidor Prometheus faça a coleta (pull).
- Endereço padrão de coleta:
http://host_ip:9100/metrics(ondehost_ipé o IP da máquina onde o Node Exporter está implantado). - Coleta métricas do nível de sistema operacional: loadavg, filesystem, meminfo e outras informações básicas de monitoramento.
- Em clusters Kubernetes, é implantado em cada nó para coletar métricas do host e dos contêineres.
Instalação do Prometheus
Download
- Lista de versões: https://prometheus.io/download/
- Versões específicas: https://github.com/prometheus/prometheus/releases
Implantação com binário (Linux)
Ambiente: CentOS Linux release 7.8.2003 (Core)
Prometheus: prometheus-2.42.0.linux-amd64.tar.gz
Preparação
# Criar usuário prometheus
[root@200 ~]# useradd prometheus && echo "prometheus:prometheus"|chpasswd && chage -M 99999 prometheus
# Desabilitar firewall (opcional para teste)
[root@200 prometheus]# systemctl stop firewalld.service
[root@200 prometheus]# systemctl disable firewalld.service
Verificar e extrair o pacote
[prometheus@200 ~]$ sha256sum prometheus-2.42.0.linux-amd64.tar.gz
422dab055ed9c7bcaff52b718705f9192c6fac0de6b7e78dd278e70ee2663dcc
[prometheus@200 ~]$ tar -zxf prometheus-2.42.0.linux-amd64.tar.gz
[prometheus@200 ~]$ cd prometheus-2.42.0.linux-amd64/
[prometheus@200 prometheus-2.42.0.linux-amd64]$ ls -l
total 223908
drwxr-xr-x 2 prometheus prometheus 38 Feb 1 16:23 console_libraries
drwxr-xr-x 2 prometheus prometheus 173 Feb 1 16:23 consoles
-rw-r--r-- 1 prometheus prometheus 11357 Feb 1 16:23 LICENSE
-rw-r--r-- 1 prometheus prometheus 3773 Feb 1 16:23 NOTICE
-rwxr-xr-x 1 prometheus prometheus 118789213 Feb 1 15:56 prometheus
-rw-r--r-- 1 prometheus prometheus 934 Feb 1 16:23 prometheus.yml
-rwxr-xr-x 1 prometheus prometheus 110468077 Feb 1 15:58 promtool
Iniciar o Prometheus
[prometheus@200 prometheus-2.42.0.linux-amd64]$ nohup ./prometheus > nohup-prometheus.log 2>&1 &
[1] 3335
[prometheus@200 prometheus-2.42.0.linux-amd64]$ cat nohup-prometheus.log
nohup: ignoring input
ts=2023-02-02T16:44:46.602Z caller=main.go:512 level=info msg="No time or size retention was set so using the default time retention" duration=15d
ts=2023-02-02T16:44:46.602Z caller=main.go:556 level=info msg="Starting Prometheus Server" mode=server version="(version=2.42.0, branch=HEAD, revision=225c61122d88b01d1f0eaaee0e05b6f3e0567ac0)"
...
ts=2023-02-02T16:44:46.607Z caller=web.go:561 level=info component=web msg="Start listening for connections" address=0.0.0.0:9090
ts=2023-02-02T16:44:46.610Z caller=main.go:993 level=info msg="Starting TSDB ..."
...
ts=2023-02-02T16:44:46.768Z caller=main.go:978 level=info msg="Server is ready to receive web requests."
Após iniciar, acesse: http://192.168.56.200:9090/ (substitua pelo IP real).
Informações relevantes sobre configuração
- Arquivo principal:
prometheus.yml– seções: global, alerting, rule_files, scrape_configs. - Uso da interface web nativa.
- Linguagem PromQL.
- Interface Grafana, obtenção e importação de dashboards.
- Descoberta automática de targets (file_sd_configs, service discovery).
- Recarregamento da configuração: parâmetro
--web.enable-lifecyclee configuraçãofile_sd_configs. - Alertmanager: instalação, inicialização, arquivo de configuração, endereço de acesso, regras de alerta.
- Exporters comuns: node_exporter, mysqld_exporter, redis_exporter, etc.
Portas padrão
9093 Alertmanager
9090 Prometheus
3000 Grafana
9100 node_exporter
9121 redis_exporter
...