Implementando SLIs com Prometheus: Um Guia Prático para Profissionais de SRE

Um guia completo sobre como implementar SLIs utilizando Prometheus, focado em práticas recomendadas.

Introdução aos SLIs e Prometheus

Os Indicadores de Nível de Serviço (SLIs) são métricas fundamentais que ajudam a medir a confiabilidade de um serviço. Neste tutorial, vamos explorar como implementar SLIs usando o Prometheus, uma ferramenta de monitoramento poderosa e amplamente utilizada no mundo do SRE.

O que são SLIs?

Os SLIs são métricas que quantificam a performance de um serviço em relação a um objetivo desejado. Por exemplo, a latência média de uma API ou a disponibilidade de um serviço. Esses indicadores são essenciais para a criação de SLOs (Objetivos de Nível de Serviço) e SLAs (Acordos de Nível de Serviço).

Por que usar Prometheus?

Prometheus é uma ferramenta de monitoramento e alerta que coleta e armazena métricas em um formato de séries temporais. Ele é especialmente útil para SREs devido à sua flexibilidade e capacidade de lidar com ambientes dinâmicos.

Instalando o Prometheus

Para começar a usar o Prometheus, você deve instalá-lo. Aqui está um exemplo de como fazer isso:

# Baixando e descompactando o Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz

# Descompactando o arquivo
tar xvfz prometheus-2.30.3.linux-amd64.tar.gz

# Navegando até o diretório do Prometheus
dcd prometheus-2.30.3.linux-amd64

# Iniciando o Prometheus
./prometheus --config.file=prometheus.yml

O código acima baixa e inicia o Prometheus, utilizando o arquivo de configuração prometheus.yml. Este arquivo é onde você definirá as métricas que deseja coletar.

Configurando o Prometheus

No arquivo prometheus.yml, você deve definir os scrape targets, que são os endpoints que o Prometheus irá monitorar. Aqui está um exemplo básico:

scrape_configs:
  - job_name: 'my_service'
    static_configs:
      - targets: ['localhost:8080']

Neste exemplo, o Prometheus irá coletar métricas do serviço que está rodando na porta 8080. É importante que o seu serviço exponha as métricas em um formato que o Prometheus consiga entender.

Expondo métricas no seu serviço

Para que o Prometheus possa coletar as métricas, seu serviço precisa expô-las. Se você estiver usando uma aplicação em Python, por exemplo, pode usar a biblioteca prometheus_client:

from prometheus_client import start_http_server, Summary

# Cria um resumo para medir o tempo de execução
REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request')

@REQUEST_TIME.time()
def process_request():
    # Simula algum processamento
    time.sleep(2)

if __name__ == '__main__':
    start_http_server(8080)
    while True:
        process_request()

Esse código inicia um servidor HTTP que expõe métricas na porta 8080. A métrica request_processing_seconds registra o tempo que cada requisição leva para ser processada.

Criando SLIs com Prometheus

Uma vez que você tenha o Prometheus configurado e coletando métricas, o próximo passo é definir seus SLIs. Por exemplo, se você deseja medir a latência de uma API, pode usar a seguinte consulta PromQL:

histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))

Essa consulta calcula a latência do 95º percentil das requisições HTTP nos últimos 5 minutos. É uma maneira eficaz de medir a performance do seu serviço sob carga.

Monitorando e alertando

Com os SLIs definidos, você pode configurar alertas para notificar a equipe quando os SLIs estiverem fora do esperado. Aqui está um exemplo de uma regra de alerta:

groups:
- name: example_alert
  rules:
  - alert: HighLatency
    expr: histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) > 0.5
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "A latência está alta!"
      description: "A latência do serviço ultrapassou 500ms por mais de 5 minutos."

Essa regra alerta a equipe quando a latência média do serviço ultrapassa 500ms por mais de 5 minutos. Alertas como esse são essenciais para garantir a confiabilidade dos serviços.

Conclusão

Implementar SLIs com Prometheus é uma maneira eficaz de monitorar a performance e a confiabilidade dos seus serviços. Com as métricas corretas e uma configuração adequada, você pode garantir que sua equipe esteja sempre informada sobre o estado do sistema e pronta para agir em caso de problemas. Não se esqueça de revisar e ajustar seus SLIs regularmente para garantir que eles continuem relevantes e úteis para sua equipe.

Próximos passos

Depois de implementar seus SLIs, considere explorar:

  • SLOs: Como definir e medir seus Objetivos de Nível de Serviço.
  • SLAs: Acordos de Nível de Serviço e sua importância para os negócios.
  • Automação: Como automatizar a resposta a incidentes com base em seus SLIs.

Com essa base, você estará bem preparado para garantir a confiabilidade e a performance dos seus serviços, utilizando o Prometheus como sua ferramenta de monitoramento principal.

Contribuições de Rafael Guimarães

Compartilhe este tutorial: Como implementar SLIs com Prometheus?

Compartilhe este tutorial

Continue aprendendo:

O que são objetivos de confiabilidade e como se relacionam com SLOs?

Os objetivos de confiabilidade são métricas cruciais para garantir a performance e a resiliência de sistemas em ambientes de SRE.

Tutorial anterior

Como os SLOs influenciam a tomada de decisão de engenharia?

Os SLOs são fundamentais para orientar decisões de engenharia e garantir a confiabilidade dos sistemas.

Próximo tutorial