O documento discute o uso do Prometheus para monitoramento de aplicações distribuídas na nuvem. O Prometheus fornece um modelo de dados multidimensional baseado em métricas com dimensões chamadas "labels", permitindo monitorar aplicativos modernos de microserviços de forma abrangente e independente de arquitetura. O documento também descreve recursos como query language, alertas baseados em séries temporais e instrumentação para coleta de métricas.
2. Métodos Tradicionais de Monitoramento
Clients (SNMP?)
Alertas (expressões)
Mais alertas (alertas ou dados estatísticos?)
E mais alertas… (NOC)
3. Vários alvos...
- Um host/cluster pode rodar múltiplos containers
Que mudam constantemente
- Deploys, auto scaling, substituir containers, etc...
Analisar grande quantidade de informações
- Múltiplos sources
Fácil de identificar problemas e fazer troubleshooting
- Qual instance/container/versão/endpoint causou esses erros?!
Produzir alertas que façam sentido
- Se 300 containers de 1.000 caíram, e o usuário não sentiu, não existe alerta. {User experience}
Necessidades Modernas de Monitoramento - Desafios
4. Monitoramento - Abrangência
Monitorar tudo, em todas as camadas, com o mesmo sistema
Nível O que monitorar (exemplos)
Rede Routers, Switches
Host (OS, hardware) Falha de hardware, recursos
Containers Utilização de recursos, performance, estatísticas
Aplicação Latência, erros, estados internos
Orquestração Clusters, nós, scheduling, auto scaling
8. Prometheus!
Sistema que não fosse preso á arquiteturas
Opensource
Sem dependências de pacotes externos
Operação / Configuração simples
Métricas com dimensões baseadas em “Labels”
Independente (banco de dados, alertas, interface)
11. Prometheus Features - Conceito time
series
http_requests_total{instance=”web-1”, path=”/index”, status=”401”, method=”GET”}
Métrica Label path status method
http_requests_total{instance=”web-2”, path=”/index”, status=”404”, method=”POST”}
http_requests_total{instance=”web-3”, path=”/index”, status=”200”, method=”GET”}
http_requests_total{instance=”web-4”, path=”/index”, status=”401”, method=”GET”}
12. Prometheus Features - Query Language
Prometheus: avg by(city) (temperature_celsius{country=”Brazil”})
SQL: SELECT city, AVG(value) FROM temperature_celsius WHERE country=”Brazil” GROUP BY city
Prometheus: rate(api_http_requests_total[5m])
SQL: SELECT job, instance, method, status, path, rate(value, 5m) FROM api_http_requests_total
Prometheus: errors{job=”deploy”} / total{job=”deploy”}
SQL: SELECT errors.job, erros.instances, [mais labels…], erros.value / total.value FROM errors.total WHERE
errors.job=”deploy” AND total.job=”deploy” JOIN [muito mais coisas….]
15. Prometheus Features - Instrumentação
from prometheus_client import start_http_server, Histogram
# Create a metric to track time spent and requests made.
REQUEST_TIME = Histogram('request_processing_seconds', 'Time spent processing request')
# Decorate function with metric.
@REQUEST_TIME.time()
def process_request(t):
# do work …
return
start_http_server(8000)