Прометей проблема многих ко многим для кубе cronjobs - PullRequest
0 голосов
/ 04 января 2019

Hy там,

Я пытаюсь настроить мониторинг и оповещение Kubernetes Cronjobs с помощью Prometheus. Я нашел это полезным руководство

Но я всегда получаю совпадение "многие ко многим" не разрешено: совпадающие метки должны быть уникальными с одной стороны ошибка.

Например, это запрос PromQL, который вызывает эту ошибку:

max( kube_job_status_start_time * ON(job_name) GROUP_RIGHT() kube_job_labels{label_cronjob!=""} ) BY (job_name, label_cronjob)

Запрос сам по себе приводит, например, к эти показатели

kube_job_status_start_time : kube_job_status_start_time{app="kube-state-metrics",chart="kube-state-metrics-0.12.1",heritage="Tiller",instance="REDACTED",job="kubernetes-service-endpoints",job_name="test-1546295400",kubernetes_name="kube-state-metrics",kubernetes_namespace="monitoring",kubernetes_node="REDACTED",namespace="test-develop",release="kube-state-metrics"}

kube_job_labels {label_cronjob = ""!} : kube_job_labels{app="kube-state-metrics",chart="kube-state-metrics-0.12.1",heritage="Tiller",instance="REDACTED",job="kubernetes-service-endpoints",job_name="test-1546295400",kubernetes_name="kube-state-metrics",kubernetes_namespace="monitoring",kubernetes_node="REDACTED",label_cronjob="test",label_environment="test-develop",namespace="test-develop",release="kube-state-metrics"}

Есть что-то, чего я здесь не хватает? Та же самая ошибка «многие ко многим» происходит с каждым запросом, который я пробовал из руководства. Даже создание его самостоятельно с нуля привело к той же ошибке. Надеюсь, вы можете помочь мне здесь:)

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Замена kube_job_status_start_time на max(kube_job_status_start_time) by (job_name) объединит все дубликаты и устранит ошибку.

Полученный запрос будет выглядеть так

       max(
            max(kube_job_status_start_time) by (job_name)
            * ON(job_name) GROUP_RIGHT()
            kube_job_labels{label_cronjob!=""}
          ) BY (job_name, label_cronjob)
0 голосов
/ 09 января 2019

Я углубился в эту проблему еще больше, и я думаю, что основная причина этого кроется в выражении соответствия векторов один-ко-многим:

kube_job_status_start_time * ON(job_name) GROUP_RIGHT() kube_job_labels{label_cronjob!=""}

где модификатор группы "GROUP_RIGHT ()" предполагает, что каждый векторный элемент с левой стороны (kube_job_status_start_time) может совпадать с несколькими элементами с правой стороны (kube_job_labels) на основе общей метки (job_name). Дело в том, что мы действительно имеем дело с сопоставлением «многие ко многим», так как каждый элемент вектора с правой стороны может также сопоставлять несколько элементов из левого вектора:

enter image description here enter image description here

Я думаю, что здесь нам не хватает способа уникальной идентификации экспортированных объектов Job из K8S от Prometheus. Автор этого блога упоминает об этой функции в своей настройке:

... Прометей разрешает это столкновение имен меток, включая метка raw метрики как метка exported_job ...

В моем случае я не получаю эту дополнительную метку от Прометея при установке через штурвал (стабильный / оператор Прометея).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...