Metrictbeat: Detectando e alertando problemas em apps no Kubernetes

Na maioria das vezes, aplicações são deployadas em um cluster kubernetes na forma de objetos "Deployment" ou "StatefulSet".

No geral, os problemas mais comuns que as aplicações estão sujeitas são:

  • ErrImagePull: quando há algum problema na obtenção da imagem do container.

  • CrashLoopBackOff: quando há a persistência de algum problema na aplicação mesmo reiniciando o pod.

  • Pending: quando alguma dependência do pod não foi satisfeita (falta de recurso disponíveis nos nodes, problema com PersistentVolumes, e etc).

Partindo da premissa que temos o Metricbeat (e o metricbeat-metrics) já rodando no cluster, podemos detectar a maioria dos problemas nos deployments com esta query:

kubernetes.deployment.replicas.available: 0 AND kubernetes.deployment.replicas.desired:>0

Aqui diz o seguinte: liste todos os deployments cujo desired state seja um valor positivo e que a quantidade de replicas estejam zeradas. Ou seja, se a quantidade de replicas é diferente do estado desejado... então há um problema!

A rule abaixo dispara um alerta para o Opsgenie para cada deployment que estiver por pelo menos 10 minutos com replicas zeradas:

name: k8s Deployment Monitoring
type: frequency
index: metricbeat*
num_events: 59
timeframe:
  minutes: 10
metric_aggregation:
query_key: kubernetes.deployment.name
filter:
- query:
    query_string:
       query: "kubernetes.deployment.replicas.available: 0 AND kubernetes.deployment.replicas.desired:>0 AND (agent.name: cluster01 OR agent.name: cluster02 OR agent.name: cluster03)"
alert:
- "opsgenie"
realert:
  minutes: 60
opsgenie:
opsgenie_subject: "[Elastic Observability] {0}: Deployment Pods Available = 0.0 for at least 10 minutes on '{1}'"
opsgenie_subject_args:
- agent.name
- kubernetes.deployment.name
opsgenie_priority: "P1"
opsgenie_alias: "{kubernetes[deployment][name]}"
opsgenie_addr: https://api.opsgenie.com/v2/alerts
opsgenie_key: ${OPSGENIE_API_KEY}

Last updated