Monitoramento das apis em Java
- #Spring
- #Java
À medida que empresas e organizações buscam oferecer serviços cada vez mais robustos, escaláveis e confiáveis, o monitoramento de aplicativos desempenha um papel crucial na garantia de que tudo esteja funcionando conforme o esperado. Nesse contexto, surgem diversas ferramentas que auxiliam nessa tarefa. Hoje, iremos focar nossa análise em duas ferramentas amplamente utilizadas: Prometheus e Grafana. Embora ambos tenham como objetivo fornecer informações valiosas sobre o estado e o desempenho dos aplicativos, cada um possui abordagens e recursos diferentes.
O Prometheus é um sistema de monitoramento e alerta de código aberto, desenvolvido originalmente pelo SoundCloud, que se tornou parte da Cloud Native Computing Foundation (CNCF). Ele é projetado para monitorar métricas de aplicativos e sistemas, coletando dados de vários alvos usando um modelo de coleta de dados baseado em pull (busca ativa). O Prometheus possui uma arquitetura centralizada, onde os agentes chamados "exporters" coletam e expõem as métricas, e o servidor Prometheus coleta, armazena e processa esses dados. Ele oferece uma linguagem de consulta flexível chamada PromQL, que permite aos usuários executar consultas complexas e criar alertas com base nas métricas coletadas. O Prometheus também possui um painel básico para visualização de métricas, mas é nas integrações com outras ferramentas, como o Grafana, que ele brilha.
Grafana, por outro lado, é uma plataforma de visualização de dados de código aberto e muito popular. Ele suporta uma ampla variedade de fontes de dados, incluindo o Prometheus, e fornece recursos avançados de visualização, criação de painéis e alertas. O Grafana permite a criação de painéis personalizados e a exibição de métricas em tempo real de várias fontes em um único local. Ele oferece uma interface amigável e intuitiva, permitindo aos usuários criar gráficos, tabelas, mapas e painéis interativos, com suporte a filtragem e drill-down. Além disso, o Grafana possui uma comunidade ativa que desenvolve e compartilha plugins e painéis personalizados, estendendo ainda mais suas capacidades.
A combinação do Prometheus e Grafana permite um monitoramento poderoso e flexível de aplicativos e sistemas. O Prometheus coleta e armazena as métricas, enquanto o Grafana oferece uma interface rica e personalizável para visualização e análise desses dados. Com o Grafana, os usuários podem criar painéis dinâmicos e informativos, extraindo insights valiosos para tomar decisões informadas e identificar problemas rapidamente. Além disso, o Prometheus fornece recursos avançados de alerta, permitindo que os usuários definam condições e notificações personalizadas com base em métricas específicas.
No entanto, é importante ressaltar que o Prometheus e o Grafana não são as únicas opções disponíveis no mercado. Existem outras ferramentas de monitoramento e visualização, como o InfluxDB e o Kibana, que também são amplamente utilizadas. A escolha da ferramenta ideal dependerá dos requisitos específicos do projeto e das preferências da equipe de operações.
Em resumo, o Prometheus e o Grafana são ferramentas poderosas que, quando combinadas, fornecem um ambiente completo de monitoramento e visualização de dados. O Prometheus coleta e armazena métricas, enquanto o Grafana oferece uma interface rica e personalizável para visualizar e analisar esses dados. Com essas ferramentas, as empresas podem obter insights valiosos sobre o desempenho de seus aplicativos e sistemas, garantindo uma melhor experiência para seus usuários.
Vamos fazer a configuração do prometheus:
Passo 1: Adicionar dependências ao arquivo pom.xml
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.7.0</version>
</dependency>
Passo 2: Configurar o Prometheus no arquivo application.properties
management.endpoints.web.exposure.include=prometheus
management.metrics.export.prometheus.enabled=true
Essas configurações habilitam o endpoint /prometheus para acessar as métricas do Prometheus e expõem todos os endpoints do Spring Boot Actuator.
Passo 3: Iniciar o aplicativo e acessar as métricas
Agora você pode iniciar o seu aplicativo Spring Boot e acessar as métricas expostas pelo Prometheus. Basta acessar http://localhost:8080/actuator/prometheus (considerando que o aplicativo está sendo executado localmente na porta 8080) para ver as métricas em formato Prometheus.
Passo 4: Neste artigo docker-compose, você encontrará as imagens do Prometheus e do Grafana configuradas.
version: '3.1'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- "./src/main/resources/prometheus.yml:/etc/prometheus/prometheus.yml"
command:
- "--config.file=/etc/prometheus/prometheus.yml"
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
dev_data:
Neste exemplo:
O serviço prometheus utiliza a imagem oficial do Prometheus (prom/prometheus) e expõe a porta 9090 do host para acessar a interface web do Prometheus.
O arquivo prometheus.yml é mapeado para o diretório /etc/prometheus/prometheus.yml dentro do container Prometheus para fornecer a configuração personalizada. Certifique-se de ter um arquivo prometheus.yml no mesmo diretório do docker-compose.yml para ser mapeado corretamente.
O comando --config.file=/etc/prometheus/prometheus.yml é usado para informar ao Prometheus o local do arquivo de configuração.
O serviço grafana utiliza a imagem oficial do Grafana (grafana/grafana) e expõe a porta 3000 do host para acessar a interface web do Grafana.
O diretório grafana_data é mapeado para o diretório /var/lib/grafana dentro do container Grafana para persistir os dados.
A dependência depends_on é usada para garantir que o serviço do Prometheus seja iniciado antes do serviço do Grafana.
Certifique-se de estar no diretório onde o arquivo docker-compose.yml está localizado e execute o comando docker-compose up para iniciar os serviços do Prometheus e Grafana.
Depois de iniciados, você poderá acessar o Prometheus em http://localhost:9090 e o Grafana em http://localhost:3000 para configurar painéis, métricas e visualizações.
Passo 5: O arquivo prometheus.yml é responsável por configurar o Prometheus para coletar métricas de diferentes alvos. Aqui está um exemplo básico de como você pode configurar o arquivo prometheus.yml
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
#external_labels:
# monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
# - job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
# scrape_interval: 5s
# static_configs:
# - targets: ['localhost:9090']
- job_name: 'nome do seu projeto'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
metrics_path: "/actuator/prometheus"
static_configs:
- targets: ['host.docker.internal:8080']