Prometheus 未从 GKE 中的 cadvisor 接收指标
Posted
技术标签:
【中文标题】Prometheus 未从 GKE 中的 cadvisor 接收指标【英文标题】:Prometheus not receiving metrics from cadvisor in GKE 【发布时间】:2020-12-20 18:39:29 【问题描述】:嘿嘿,
我在 GKE v1.16.x 中使用 kubernetes 部署了 prometheus、grafana、kube-state-metrics、alertmanager 等设置。我使用https://github.com/do-community/doks-monitoring 作为 yaml 文件的起点。
几天来我一直在尝试调试情况,非常感谢您的帮助。我的 prometheus 节点没有从 cadvisor 获取指标。
部署中的所有服务和 Pod 都在运行。 prometheus、kube-state-metrics、node-exporter,都在运行——没有错误。 prometheus UI 中的 cadvisor 目标显示为“up”。 Prometheus 能够从集群中收集其他指标,但没有 pod/容器级别的使用指标。 当我查询kubectl get --raw "/api/v1/nodes/<your_node>/proxy/metrics/cadvisor"
时,我可以看到 cadvisor 指标,但是当我在 prometheus 中查找 container_cpu_usage
或 container_memory_usage
时,没有数据。
我在 prometheus 中的 cadvisor 抓取作业配置
- job_name: kubernetes-cadvisor
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics/cadvisor
scheme: https
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
kubernetes_sd_configs:
- role: node
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
抄自 prometheus/docs/examples。
我在路径和抓取配置上尝试了一大堆不同的变体,但没有运气。基于我可以使用kubectl get
(它们存在)查询指标这一事实,在我看来问题是普罗米修斯与 cadvisor 目标进行通信。
如果有人有配置此配置的经验,我肯定会感谢一些调试帮助。
干杯
【问题讨论】:
你好。你检查过Prometheus
pod 的日志吗?是否有任何警告可以说明您无法获得 cadvisor 指标的原因?
感谢@DawidKruk 的提醒。几天前我发现一篇博客文章帮助了我。刚刚发布了一个答案。
【参考方案1】:
我找到了一个博客,其中包含对我有用的示例配置。 cadvisor(和 kubelet)指标的 GKE 端点与文档示例中的标准端点不同。以下是我在普罗米修斯工作中的摘录:
- job_name: kubernetes-cadvisor
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics/cadvisor
scheme: https
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
kubernetes_sd_configs:
- role: node
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc.cluster.local:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
- job_name: kubernetes-kubelet
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: https
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
kubernetes_sd_configs:
- role: node
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc.cluster.local:443
- target_label: __metrics_path__
source_labels: [__meta_kubernetes_node_name]
regex: (.+)
replacement: /api/v1/nodes/$1/proxy/metrics
编辑:这是博客文章的链接 -> https://medium.com/htc-research-engineering-blog/monitoring-kubernetes-clusters-with-grafana-e2a413febefd。
【讨论】:
你能链接这篇博文吗? 为我工作!谢谢!【参考方案2】:太令人沮丧了, 这几天我一直在挖掘。
问题是从 gke master 从 1.15.12-gke.2 升级到 1.16.13-gke.401 之后开始的。
为了确认这一点,在另一个 gke 集群中做了同样的事情,结果是一样的。
以上配置是给403禁止的。
enter image description here
【讨论】:
嘿,我也遇到了同样的问题——KMS、Node-exporter、linkerd 工作。从昨天开始,我部署了 Cadvisor 并添加了您的配置,但现在我在仪表板中不断收到此错误server returned HTTP status 403 Forbidden
你有什么解决办法吗?以上是关于Prometheus 未从 GKE 中的 cadvisor 接收指标的主要内容,如果未能解决你的问题,请参考以下文章
为啥 fluentd/kube-proxy/prometheus 的 GKE 中的 IP 地址等于节点地址
GKE 需要 prometheus-to-sd 吗?我可以删除它吗?
如何在具有默认 istio beta 功能的 GKE 中安装带有 prometheus 的 Kiali Dashboard?
如何使用 prometheusOperator.admissionWebhooks.enabled=false 在 GKE 上安装 helm chart prometheus-operator?