🧩 Exercícios: Observabilidade com Actuator, Micrometer e Prometheus
Spec Backend Com Java E Springboot • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 19.1 — Habilitação e Exposição de Endpoints do Spring Boot Actuator
Contexto: Habilitação e Exposição de Endpoints do Spring Boot Actuator no contexto de Observabilidade com Actuator, Micrometer e Prometheus.
Requisitos de Execução:
- Configurar
management.endpoints.web.exposure.include=health,info,metrics,prometheusnoapplication.yml.
Resultado Esperado
GET /actuator/health -> {'status': 'UP'} com detalhes de banco e disco.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_19_1_SeuNome - Envie na tarefa:
Atividade Cap 19 - Observabilidade com Actuator, Micrometer e Prometheus
🔑 Gabarito de Código & Solução Comentada
# application.yml
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
endpoint:
health:
show-details: always
🔍 Nível 2: Prática
Problema 19.2 — Métricas Customizadas com Micrometer (Counter e Timer)
Contexto: Métricas Customizadas com Micrometer (Counter e Timer) no contexto de Observabilidade com Actuator, Micrometer e Prometheus.
Requisitos de Execução:
- Injetar
MeterRegistrye registrar contador de pedidos finalizados com tags de categoria.
Resultado Esperado
Métrica 'pedidos_criados_total' registrada no Prometheus.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_19_2_SeuNome - Envie na tarefa:
Atividade Cap 19 - Observabilidade com Actuator, Micrometer e Prometheus
🔑 Gabarito de Código & Solução Comentada
// MetricService.java
package com.empresa.api.metrics;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;
@Service
public class MetricService {
private final Counter pedidosCounter;
public MetricService(MeterRegistry registry) {
this.pedidosCounter = Counter.builder("pedidos_criados_total")
.description("Total de pedidos processados com sucesso")
.tag("ambiente", "producao")
.register(registry);
}
public void registrarNovoPedido() {
pedidosCounter.increment();
}
}
⚡ Nível 3: Integração
Problema 19.3 — HealthIndicator Customizado para Serviços Críticos
Contexto: HealthIndicator Customizado para Serviços Críticos no contexto de Observabilidade com Actuator, Micrometer e Prometheus.
Requisitos de Execução:
- Implementar classe implementando
HealthIndicatorverificando conectividade com gateway de pagamento.
Resultado Esperado
HealthIndicator reporta UP ou DOWN no endpoint /actuator/health.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_19_3_SeuNome - Envie na tarefa:
Atividade Cap 19 - Observabilidade com Actuator, Micrometer e Prometheus
🔑 Gabarito de Código & Solução Comentada
// CustomHealthIndicator.java
package com.empresa.api.metrics;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
@Component
public class GatewayPagamentoHealthIndicator implements HealthIndicator {
@Override
public Health health() {
boolean gatewayOnline = true;
if (gatewayOnline) {
return Health.up().withDetail("gateway", "Disponível").build();
}
return Health.down().withDetail("gateway", "Indisponível").build();
}
}
🏆 Nível 4: Desafio Corporativo
Problema 19.4 — Tracing Distribuído com Micrometer Tracing e Zipkin/Tempo
Contexto: Tracing Distribuído com Micrometer Tracing e Zipkin/Tempo no contexto de Observabilidade com Actuator, Micrometer e Prometheus.
Requisitos de Execução:
- Configurar propagação de TraceId e SpanId em logs com MDC do SLF4J.
Resultado Esperado
Logs emitidos com padrão [api-pagamentos,traceId=abc123,spanId=def456].
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_19_4_SeuNome - Envie na tarefa:
Atividade Cap 19 - Observabilidade com Actuator, Micrometer e Prometheus
🔑 Gabarito de Código & Solução Comentada
// TracingLogger.java
package com.empresa.api.metrics;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class TracingLogger {
private static final Logger log = LoggerFactory.getLogger(TracingLogger.class);
public void logComTrace() {
log.info("Operação rastreada de ponta a ponta.");
}
}