Можно ли сравнить два разных временных ряда в Prometheus?

Я хотел бы сравнить следующие два временных ряда, которые отличаются друг от друга. Все, что я хочу сделать, это разделить результат второго временного ряда на результат первого временного ряда. и генерировать предупреждение, если значение меньше 1. Запрос, который я использую, находится ниже временного ряда, который я упомянул ниже. Как достичь своей цели?

Первый временной ряд:

container_memory_usage_bytes {container_name = "documentation"}

РЕЗУЛЬТАТ:

container_memory_usage_bytes{
   beta_kubernetes_io_arch="amd64",
   beta_kubernetes_io_fluentd_ds_ready="true",
   beta_kubernetes_io_instance_type="n1-highmem-8",
   beta_kubernetes_io_os="linux",
   cloud_google_com_gke_nodepool="pool-1",
   container_name="documentation",
   failure_domain_beta_kubernetes_io_region="europe-west1",
   failure_domain_beta_kubernetes_io_zone="europe-west1-b",
   id="/kubepods/burstable/podb79239ff-1ee9-11e8-a6c1-42010a840fd9/3ccdaa6597d5bd306d228e37d9d4c65a9681dba2e894aa7b7ed4502ec54e5619",
   image="gcr.io/ingenious-169318/publicapi/documentation@sha256:60a5454bb40ed34f24cbeb9f330e1097191754cf2890eee1ca4f2988188a7705",
   instance="gke-ingenious-pool-1-bbd77706-5rbz",
   job="kubernetes-cadvisor",
   kubernetes_io_hostname="gke-ingenious-pool-1-bbd77706-5rbz",
   name="k8s_documentation_documentation-6c4c4c9f5f-dn2bv_apimanager_b79239ff-1ee9-11e8-a6c1-42010a840fd9_0",
   namespace="apimanager",
   pod_name="documentation-6c4c4c9f5f-dn2bv"
}

Второй временной ряд: -

kube_pod_container_resource_requests_memory_bytes {container = "documentation"}

РЕЗУЛЬТАТ:

kube_pod_container_resource_requests_memory_bytes{
   container="documentation",
   instance="10.32.0.30:8080",
   job="kubernetes-service-endpoints",
   k8s_app="kube-state-metrics",
   kubernetes_name="kube-state-metrics",
   kubernetes_namespace="kube-system",
   namespace="apimanager",
   node="gke-ingenious-pool-1-bbd77706-pdsz",
   pod="documentation-6c4c4c9f5f-mzd54"
}

PromQL:

kube_pod_container_resource_requests_memory_bytes {container = "documentation"} / (container_memory_usage_bytes {namespace = "apimanager"})


person Suhas Chikkanna    schedule 05.03.2018    source источник


Ответы (1)


Соответствие векторов

Прометей называет это Vector Matching, вы можете выполнять арифметические бинарные операции. (+, -, *, / etc) в разных временных рядах, если их метки совпадают. Если они не совпадают, вы можете использовать on или ignoring, чтобы выбрать, какие ярлыки вы должны сопоставить.

Один к одному находит уникальную пару записей с каждой стороны операции. В случае по умолчанию это операция в формате vector1 vector2. Две записи совпадают, если у них одинаковый набор меток и соответствующих значений. Ключевое слово ignoring позволяет игнорировать определенные метки при сопоставлении, а ключевое слово on позволяет сократить набор рассматриваемых меток до предоставленного списка.

e.g.

kube_pod_container_resource_requests_memory_bytes{container="documentation"}
/ on (container)
container_memory_usage_bytes{namespace="apimanager"}

label_join / label_replace

Глядя на ваш конкретный пример, нет никаких ярлыков, с которыми вы могли бы использовать on для сопоставления. container_memory_usage_bytes имеет container_name, а kube_pod_container_resource_requests_memory_bytes имеет container. В Prometheus есть другие функции запросов, называемые label_join и label_replace, которые позволяют создавать собственные ярлыки для одного из ваших показателей.

В вашем случае вы можете использовать label_replace для добавления _name к kube_pod_container_resource_requests_memory_bytes. Это позволит вам использовать / on (container_name), как показано выше.

Надеюсь, эти две концепции Prometheus, соответствие векторов и label_join / replace помогут вам выполнять арифметические операции с разными временными рядами. NB. Я недостаточно знаком с вашим конкретным вариантом использования, чтобы знать, является ли container_name лучшим ярлыком для достижения требуемого результата или есть более простой способ добиться этого с помощью Kubernetes и Prometheus.

person Richard Paul    schedule 01.08.2018