Skip to main content

Dicas de Uso

💡 DICAS DE USO - OBSERVABILIDADE MEMUDE

Portal MeMude | Guia Prático de Uso da Stack de Monitoramento


🚀 PRIMEIROS PASSOS - WORKFLOW DIÁRIO

🌅 Checklist Matinal (Health Check)

  1. Acesse o Grafana: https://grafana.memudecore.com.br
  2. Verifique targets: Menu → Explore → Prometheus → up
  3. Check erros recentes: Menu → Explore → Loki → {job="docker"} |= "ERROR"
  4. Status HTTP: {job="traefik"} | json | StatusCode >= 400

✅ Tudo OK se:

  • Todos targets = 1 (UP)
  • Poucos ou zero ERRORs recentes
  • Taxa baixa de 4xx/5xx

🔍 TÉCNICAS DE INVESTIGAÇÃO

🚨 Quando Algo Está Quebrado

1. Rápido Diagnóstico (1 minuto):

# No Prometheus:
up                          # Algum serviço down?
# No Loki:
{job="docker"} |= "ERROR" or "FATAL" | line_format "{{.timestamp}} [{{.container_name}}] {{.message}}"

2. Investigação Detalhada (5 minutos):

# Logs por container específico:
{job="docker", container_name="memude_api"} | head 50

# Erros com contexto temporal:
{job="docker"} |= "ERROR" | rate[10m] | quantile_over_time(0.95[10m])

3. Análise de Tendências (10 minutos):

# Performance últimas 24h:
rate(traefik_http_requests_total[5m])
histogram_quantile(0.95, rate(traefik_http_request_duration_seconds_bucket[5m]))

📊 Investigação de Performance

Latência Alta:

# Identificar endpoints lentos:
topk(10, histogram_quantile(0.95, rate(traefik_http_request_duration_seconds_bucket[5m])))

Volume Alto de Requests:

# Top services por RPS:
topk(10, sum by (service) (rate(traefik_http_requests_total[5m])))

Erros HTTP:

# Pattern de erros por IP:
{job="traefik"} | json | StatusCode >= 400 | count by (ClientAddr)

🎯 QUERIES ESSENCIAIS (COPY & PASTE)

📈 PROMETHEUS - Métricas

Status Geral:

up                                    # Status todos targets

Performance HTTP:

rate(traefik_http_requests_total[5m])                    # RPS atual
histogram_quantile(0.95, rate(traefik_http_request_duration_seconds_bucket[5m]))  # P95 latency
sum by (code) (rate(traefik_http_requests_total[5m]))    # RPS por status code

Erros:

rate(traefik_http_requests_total{code=~"5.."}[5m])       # Taxa erro 5xx
rate(traefik_http_requests_total{code=~"4.."}[5m])       # Taxa erro 4xx

📝 LOKI - Logs

Erros Recentes:

{job="docker"} |= "ERROR" or "FATAL"                     # Todos erros
{job="docker"} |= "ERROR" | tail 20                      # Últimos 20 erros

Por Container:

{job="docker", container_name=~"memude.*"}               # Containers MeMude
{job="docker", container_name="memude_api"} | tail 50   # Container específico

HTTP Access Logs:

{job="traefik"} | json | StatusCode >= 400               # Erros HTTP
{job="traefik"} | json | Duration > 5000                 # Requests lentas
{job="traefik"} | json | line_format "{{.Time}} {{.ClientAddr}} {{.RequestMethod}} {{.RequestPath}} {{.StatusCode}} {{.Duration}}ms"

Análise Temporal:

{job="docker"} |= "ERROR" | rate[10m]                    # Taxa erros últimos 10min
count_over_time({job="docker"} |= "ERROR"[1h])           # Count erros última hora

🔍 FILTROS AVANÇADOS

Multi-container Search:

{job="docker", container_name=~"memude_.*|postgres|redis"} |= "ERROR"

Regex Patterns:

{job="docker"} |~ "(?i)error|exception|fail"             # Case-insensitive
{job="docker"} |~ "memory|oom|killed"                    # Problemas de memória

JSON Parsing (Traefik):

{job="traefik"} | json | ClientAddr != "127.0.0.1" | StatusCode >= 400

💡 DICAS PRO DE GRAFANA

🎨 Criando Dashboards Eficazes

1. Layout Recomendado:

┌─────────────────────────────────┐
│     System Health (Single Stat) │
├─────────────┬───────────────────┤
│   RPS       │   Latência P95    │
├─────────────┼───────────────────┤
│   Erros 4xx │   Erros 5xx       │
├─────────────┴───────────────────┤
│     Logs Stream (Real-time)     │
└─────────────────────────────────┘

2. Configurações Úteis:

  • Refresh: 5s para troubleshooting, 1m para overview
  • Time Range: Últimas 1h (troubleshooting), 24h (trends)
  • Auto-refresh: ON para dashboards de monitoring

3. Alertas Visuais:

  • Verde: up = 1, errors < 1%
  • Amarelo: latência > 2s, errors 1-5%
  • Vermelho: down, errors > 5%

🔍 Explore Mode - Dicas

Navegação Rápida:

  • Ctrl + K → Command palette
  • Shift + Enter → Execute query
  • Ctrl + R → Run query and refresh

LogQL Pro Tips:

# Combinar múltiplos filtros:
{job="docker"} |= "ERROR" |~ "user|session" |!= "debug"

# Extract fields dinamicamente:
{job="traefik"} | json | line_format "{{.Time}} {{.RequestPath}}"

# Rate com agregação:
sum(rate({job="docker"}[5m])) by (container_name)

📊 Visualizações Eficazes

Para Métricas (Prometheus):

Para Logs (Loki):

  • Logs Panel: Stream em tempo real
  • Bar Chart: Count de erros por time bucket
  • Pie Chart: Distribuição por container/severity

⚡ SHORTCUTS E AUTOMAÇÕES

🔗 Bookmarks Úteis

Salve estes URLs:

# Grafana Explore - Prometheus
https://grafana.memudecore.com.br/explore?orgId=1&left=%7B%22datasource%22:%22prometheus%22%7D

# Grafana Explore - Loki
https://grafana.memudecore.com.br/explore?orgId=1&left=%7B%22datasource%22:%22loki%22%7D

📋 Scripts de Diagnóstico

Health Check Rápido:

#!/bin/bash
echo "=== MeMude Health Check ==="
curl -s -u admin:memude@2026 "https://metrics.memudecore.com.br/api/v1/query?query=up" | jq '.data.result[].value[1]'

Log Tail Automático:

# Via docker (se tiver acesso):
docker service logs -f observability_promtail | grep ERROR

# Via API Loki (se configurado):
curl -G "http://loki:3100/loki/api/v1/query_range" \
  --data-urlencode 'query={job="docker"}|="ERROR"' \
  --data-urlencode 'start=2026-01-23T10:00:00Z'

⏰ Análises Agendadas

Weekly Review (Segunda-feira):

  1. Verificar tendências da semana anterior
  2. Identificar novos patterns de erro
  3. Revisar performance metrics
  4. Planejar otimizações

Monthly Review:

  1. Analisar growth rate
  2. Capacity planning
  3. Revisar alerting rules
  4. Update dashboards

🚨 ALERTING E NOTIFICAÇÕES

🔔 Configuração de Alertas (Para Implementar)

Alertas Críticos:

# Prometheus Alert Rules (futuro)
groups:
- name: memude-critical
  rules:
  - alert: TargetDown
    expr: up == 0
    for: 1m

  - alert: HighErrorRate
    expr: rate(traefik_http_requests_total{code=~"5.."}[5m]) > 0.1
    for: 5m

  - alert: HighLatency
    expr: histogram_quantile(0.95, rate(traefik_http_request_duration_seconds_bucket[5m])) > 5
    for: 5m

📱 Notification Channels

Slack Integration (Recomendado):

{
  "channel": "#ops-alerts",
  "webhook_url": "https://hooks.slack.com/...",
  "title": "MeMude Alert: {{.GroupLabels.alertname}}"
}

🔧 MANUTENÇÃO E OTIMIZAÇÃO

🗄️ Gestão de Storage

Limpeza Manual (se necessário):

# Limpar dados antigos Prometheus (cuidado!)
docker exec observability_prometheus_1 rm -rf /prometheus/data/chunks_head/*

# Ver tamanho dos volumes:
docker volume ls | grep observability
du -sh /var/lib/docker/volumes/observability_*

Monitoring do Storage:

# Tamanho TSDB Prometheus
prometheus_tsdb_symbol_table_size_bytes
prometheus_tsdb_head_series

⚡ Performance Tuning

Grafana:

  • Query Cache: 5min para dashboards estáticos
  • Concurrent Queries: Limitar para não sobrecarregar
  • Data Proxy: Use para evitar CORS

Prometheus:

  • Scrape Interval: 15s é bom balanço
  • Retention: 30d adequado para começar
  • Query Timeout: Aumentar se queries complexas

🎯 CASOS DE USO COMUNS

🔍 "Site está lento"

  1. Check traefik_http_request_duration_seconds{quantile="0.95"}
  2. Ver logs: {job="docker"} |= "slow" or "timeout"
  3. Identificar endpoint: Traefik access logs
  4. Drill-down no container específico

🚨 "Muitos erros 500"

  1. Prometheus: rate(traefik_http_requests_total{code="500"}[5m])
  2. Loki: {job="traefik"} | json | StatusCode = 500
  3. Application logs: {job="docker", container_name="memude_api"} |= "ERROR"
  4. Timeline correlation entre metrics e logs

🔄 "Sistema reiniciando"

  1. Container restart logs: {job="docker"} |= "starting" or "stopped"
  2. Check resource constraints via logs
  3. Verificar health checks no Traefik
  4. Correlacionar com deploy events

📈 "Tráfego aumentou muito"

  1. RPS trend: rate(traefik_http_requests_total[5m])
  2. Source analysis: {job="traefik"} | json | count by (ClientAddr)
  3. Endpoint breakdown: Traefik labels
  4. Capacity planning baseado em trends

📚 RECURSOS E DOCUMENTAÇÃO

  • Prometheus Query Language: https://prometheus.io/docs/prometheus/latest/querying/
  • LogQL Documentation: https://grafana.com/docs/loki/latest/logql/
  • Grafana Dashboards Library: https://grafana.com/grafana/dashboards/

🎓 Learning Path

  1. Básico: Prometheus queries simples + Loki filtering
  2. Intermediário: Dashboards custom + alerting
  3. Avançado: PromQL functions + LogQL aggregations

🎯 RESUMO - WORKFLOW RECOMENDADO

💻 Desenvolvimento/Debugging:

  1. Explore mode para investigação ad-hoc
  2. Logs panel sempre aberto durante debugging
  3. Correlação metrics + logs para root cause

🔄 Operação Diária:

  1. Dashboard overview pela manhã
  2. Alerting para problemas críticos
  3. Weekly review para trends e otimizações

📊 Reporting:

  1. Screenshots de dashboards para status reports
  2. Export data via API para análises deeper
  3. Correlation business metrics com technical metrics

📋 Atualizado em: 23/01/2026 🎯 Target Audience: DevOps, SRE, Developers 📊 Stack Version: Prometheus v2.48.1 + Grafana 10.2.3 + Loki 2.9.3

Pro Tip: Comece simples. Master os queries básicos antes de partir para dashboards complexos. A observabilidade é uma journey, não um destino!