DEV Community

Marcius Bezerra
Marcius Bezerra

Posted on

Observabilidade com .NET, Prometheus e Grafana: Métricas, Docker e /metrics - Parte 2

Crie counters e histograms em uma Minimal API, consulte métricas no Prometheus e configure dashboards do Grafana com serviços executados via Docker Compose. Aprenda a implementar observabilidade em uma aplicação ASP.NET Core utilizando Prometheus, Grafana e Docker Compose.

Nesta etapa prática, são criadas métricas personalizadas com o pacote prometheus-net.AspNetCore. A aplicação disponibiliza os dados no endpoint /metrics, enquanto o Prometheus realiza o scrape periódico e fornece as séries temporais para consultas e visualizações no Grafana.

O tutorial demonstra como:

  • Criar uma métrica do tipo Counter com CreateCounter;
  • Incrementar valores utilizando Inc;
  • Medir a duração de operações com Histogram e CreateHistogram;
  • Controlar o timer com NewTimer e o descarte automático do using;
  • Criar um endpoint em uma Minimal API para disparar as métricas;
  • Executar a aplicação com dotnet watch;
  • Inspecionar manualmente o endpoint /metrics;
  • Interpretar séries de histogramas com os sufixos _sum, _count e buckets;
  • Consultar métricas pela interface do Prometheus;
  • Verificar o estado do scrape em Status - Targets;
  • Entender o intervalo entre coleta e atualização das métricas;
  • Configurar o Prometheus como Data Source do Grafana;
  • Utilizar o nome do serviço do Docker Compose em vez de localhost;
  • Criar painéis e executar consultas PromQL;
  • Escolher visualizações adequadas para counters e métricas de duração;
  • Salvar, editar, duplicar e organizar dashboards;
  • Importar dashboards prontos do Grafana Labs por ID.

O conteúdo é especialmente útil para observabilidade de APIs, microsserviços, aplicações distribuídas e sistemas ASP.NET Core que precisam acompanhar volume de requisições, duração de operações e evolução das métricas ao longo do tempo.

Índice de capítulos

00:00:00 Introdução e revisão da stack de observabilidade
00:03:34 Métricas personalizadas no Prometheus
00:05:13 Criando uma métrica Prometheus Counter no Program.cs
00:07:00 Criando um Histogram no Prometheus para duração de requisições
00:08:21 Endpoint /update, incremento e timer
00:10:38 Executando com dotnet watch e acessando /metrics
00:12:02 Analisando _sum, _count e buckets do Histogram no Prometheus
00:14:16 Consultando métricas na interface do Prometheus
00:16:57 Visualização Graph e intervalo de atualização (Prometheus)
00:18:05 Verificando o scrape em Status - Targets (Prometheus)
00:18:44 Configurando o Prometheus como Data Source no Grafana
00:20:03 Conectando Grafana e Prometheus pela rede Docker
00:22:06 Criando um dashboard no Grafana
00:23:10 Selecionando métricas e executando queries
00:24:08 Consultas PromQL e cálculo de rate no Grafana
00:25:29 Ajustando visualizações e salvando o dashboard no Grafana
00:26:07 Criando uma segunda visualização no Grafana
00:27:28 Editando, duplicando e nomeando painéis no Grafana
00:28:16 Procurando dashboards Grafana para ASP.NET Core
00:29:34 Importando dashboards do Grafana Labs por ID
00:30:19 Avaliando a compatibilidade dos dashboards

links:

Prometheus

https://prometheus.io/

CNCF

https://www.cncf.io/

CNCF / Prometheus

https://www.cncf.io/projects/prometheus/

Grafana

https://grafana.com/

.Net Install Script

https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script

Top comments (1)

Collapse
 
iqtechsolutions profile image
Ivan Rossouw •

A useful next step is to make metric cardinality and histogram buckets part of the design, not an afterthought. Labels such as route template, operation, and bounded outcome are usually safe; user IDs, request paths, exception messages, or tenant IDs can create an effectively unbounded number of time series. Histogram defaults also deserve validation against the service’s latency objective—buckets that stop below the interesting failure range can make a dashboard look precise while hiding the tail. I like testing the /metrics output with representative routes and failures, then checking both series count and whether p95 can actually be estimated from the chosen buckets.