Prometheus & cadvisor & k8s / 带有空值的“图像”标签

Posted

技术标签:

【中文标题】Prometheus & cadvisor & k8s / 带有空值的“图像”标签【英文标题】:Prometheus & cadvisor & k8s / "image" label with Empty values 【发布时间】:2021-07-05 01:04:49 【问题描述】:

在 Prometheus 表达式浏览器中,执行“container_cpu_usage_seconds_total metric”得到的结果在不同的 k8s 集群中具有不同的标签。

集群 1 (k8s v1.15.9):

container_cpu_usage_seconds_totalcontainer="POD",container_name="POD",cpu="total",endpoint="https-metrics",id="/kubepods/besteffort/pod00xxxxx-ef9f-4959-b2cf-95e9c6dba800/bbff610aeeb79874c69228068f07b9c3a395a3933b33387fd681ef91aa188897",image="reg.k8s.io/google_containers/pause-amd64:3.1",instance="192.168.110.120:10250",job="kubelet",name="k8s_POD_guestbook-ui-57d98b678-w5csk_argo-cd_0068264c-ef9f-4959-b2cf-95e9c6dba800_0",namespace="argo-cd",node="k8s-w5",pod="guestbook-ui-57d98b678-w5csk",pod_name="guestbook-ui-57d98b678-w5csk",service="kubelet"

集群2(k8s v1.18.10):

container_cpu_usage_seconds_totalcpu="total", endpoint="https-metrics", id="/kubepods/besteffort/pod07a4289a-9ae4-42fd-a7d5-5fe7d8680071", instance="192.168.120.10:10250", job="kubelet", metrics_path="/metrics/cadvisor", namespace="eds", node="cluster-master-1", pod="kong-7dc748b8d5-5x5qf", service="kube-kube-prometheus-stack-kubelet"

在第二个集群中找不到“image”“container”标签。 如何配置第二个以使其缺少标签?

他们的 scrape_configs 存在差异。 第二个没有 metric_relabel_configs。 metric_relabel_configs 会影响可用标签吗?

  metric_relabel_configs:
  - source_labels: [__name__, image]
    separator: ;
    regex: container_([a-z_]+);
    replacement: $1
    action: drop
  - source_labels: [__name__]
    separator: ;
    regex: container_cpu_usage_seconds_total|container_memory_usage_bytes|container_memory_cache|container_network_.+_bytes_total|container_memory_working_set_bytes
    replacement: $1
    action: keep


当我在第二个集群中执行 curl 命令时,实际上结果有 imagecontainer 标签,但带有 空值

curl -k --header "Authorization: Bearer $TOKEN"  https://[k8s_ip]:10250/metrics/cadvisor

结果:

container_cpu_usage_seconds_totalcontainer="",cpu="total",id="/kubepods/besteffort/pod07a4289a-9ae4-42fd-a7d5-5fe7d8680071",image="",name="",namespace="eds",pod="kong-7dc748b8d5-5x5qf" 738.009191131 1617976437601

【问题讨论】:

【参考方案1】:

您的症状与this issue有些相似。

高级症状是curl /metrics 为图像、命名空间等返回空白。

似乎 kubelet 对宇宙的看法与 Docker 有很大不同,因此它没有标记容器指标的元数据。

在我的例子中,我使用非标准根目录运行 Docker,并通过 --docker-root 明确告诉 kubelet 解决了问题。

【讨论】:

以上是关于Prometheus & cadvisor & k8s / 带有空值的“图像”标签的主要内容,如果未能解决你的问题,请参考以下文章

cadvisor+prometheus+Grafana

k8s Prometheus+CAdvisor+node_export+grafana

cAdvisor Prometheus container_cpu_load_average_10s 有两个值

cadvisor 与 Prometheus 集成

#yyds干货盘点# Prometheus Exporter cAdvisor

我们如何在 prometheus 中导出 cadvisor 指标