Есть ли способ отфильтровать метрику по строковому значению, часть которого исходит из результата другого запроса в запросе Прометея? - PullRequest
1 голос
/ 19 сентября 2019

Я хочу получить уведомление, когда недавняя работа cronjob не удалась.Expr kube_job_status_failed{job_name=~"cronjobname.*"}==1 работает большую часть времени.Но если задание не выполняется и оно сохраняется, даже следующее задание выполнено успешно, я все равно получаю предупреждение, потому что в Prometheus есть две записи, одна из которых - запись об ошибке, другая - запись об успехе.

Я обнаружил, что могу получить отметку времени последней работы из kube_cronjob_status_last_schedule_time{cronjob="cronjobname"}, а затем использовать kube_job_status_failed{job_name="cronjobname-TIMESTAMP"} для запроса статуса последней работы.

Интересно, есть ли у нас способ в одном запросе объединить jobname изрезультат первого запроса и фильтр во втором?как kube_job_status_failed{job_name=string_concatenate("cronjobname-", kube_cronjob_status_last_schedule_time{cronjob="cronjobname"})}

1 Ответ

1 голос
/ 19 сентября 2019

С promql вы не сможете получить то, что вы описываете.Более того, я не уверен, что время последнего графика всегда совпадает со временем начала работы;если где-то есть медлительность или перепланировка, например.

Вы можете следовать подходу, указанному в этой статье .В качестве альтернативы можно использовать метрики заданий для определения:

отметки времени последнего невыполненного задания за крончоб

- record: job_cronjob:kube_job_status_start_time:last_failed
  expr: max((kube_job_status_start_time AND kube_job_status_failed == 1)
            * ON(job,namespace) GROUP_LEFT
            kube_job_labels{label_cronjob!=""}
           ) BY(label_cronjob)

отметки времени последнего успешного задания наcronjob

- record: job_cronjob:kube_job_status_start_time:last_suceeded
  expr: max((kube_job_status_start_time AND kube_job_status_suceeded == 1)
            * ON(job,namespace) GROUP_LEFT
            kube_job_labels{label_cronjob!=""}
           ) BY(label_cronjob)

И оповещение в случае неудачи является более поздним, чем успешное:

- alert: CronJobStatusFailed
  expr:   job_cronjob:kube_job_status_start_time:last_failed
        > job_cronjob:kube_job_status_start_time:last_suceeded
  for: 1m
  annotations:
    description: '{{ $labels.label_cronjob}} last run has failed.'
...