3

我想比较以下两个彼此不同的时间序列。我要做的就是将第二个时间序列的结果除以第一个时间序列的结果,如果值小于 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"})

4

1 回答 1

9

向量匹配

Prometheus 将此称为Vector Matching,如果它们的标签匹配,您可以跨不同的时间序列执行算术二进制运算(+、-、*、/等)。如果它们不匹配,您可以使用onignoring选择您应该匹配的标签。

一对一从操作的每一方找到一对唯一的条目。在默认情况下,这是一个遵循 vector1 vector2 格式的操作。如果两个条目具有完全相同的一组标签和相应的值,则它们匹配。ignoring 关键字允许在匹配时忽略某些标签,而 on 关键字允许将考虑的标签集减少到提供的列表

例如

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_bytescontainer_name一阵子kube_pod_container_resource_requests_memory_bytescontainer。Prometheus 有其他查询函数,称为label_joinlabel_replace,它们允许您在其中一个指标上创建自定义标签。

在您的情况下,您可能希望使用 label_replace 附加_namekube_pod_container_resource_requests_memory_bytes. 这将允许您使用/ on (container_name)如上所示。

希望这两个 prometheus 概念,向量匹配和 label_join/replace 将帮助您跨不同的时间序列执行算术运算。注意,我对您的确切用例不够熟悉,不知道是否container_name是实现所需输出的最佳标签,或者是否有更简单的方法可以使用 Kubernetes 和 Prometheus 实现这一目标。

于 2018-08-01T23:01:01.643 回答