Всем привет. Кто может подсказать есть вот такой алерт, который вычисляет все поды в состоянии Pending|Unknown|Failed и шлет инфу о них
- alert: KubernetesPodNotHealthy
expr: min_over_time(sum by (namespace, pod) (kube_pod_status_phase{pod !~ ".*cron.*", phase=~"Pending|Unknown|Failed"})[1h:]) > 0
for: 1h
labels:
severity: critical
annotations:
summary: Kubernetes Pod not healthy (instance {{ $labels.instance }})
description: 'Pod has been in a non-ready state for longer than an hour.\n VALUE = {{ $value }}\n LABELS: {{ $labels }}'
Количество подов в этом выражении в одном кластере может быть в районе 27. Их них например 25 в состоянии ImagePullBackoff, остальные свалились в Error из-за ошибок в приложении. Нужно, чтобы из всего списка алерта KubernetesPodNotHealthy алерты шли только по Error подам, а ImagePullBackoff слались 1 раз в 24 часа.
Поды с ImagePullBackoff вычисляю так в отдельном алерте
expr: min_over_time(sum by(namespace, pod) (kube_pod_container_status_waiting_reason{reason="ImagePullBackOff"})[1h:]) > 0
Как можно из общего списка повисших подов вычесть поды в состоянии ImagePullBackoff? Различные аналогии из SQL в PromQL мне не помогли. Обычное вычитание
(min_over_time(sum by (namespace, pod) (kube_pod_status_phase{pod !~ ".*cron.*", phase=~"Pending|Unknown|Failed"})[1h:]) > 0) - (min_over_time(sum by(namespace, pod) (kube_pod_container_status_waiting_reason{reason="ImagePullBackOff"})[1h:]) > 0)
возвращает неправильный результат