kubernetes - Prometheus + Kubernetes 指标来自错误的抓取作业
问题描述
我使用图表的默认值(包括图表的默认scrape_configs )通过prometheus helm 图表部署了 prometheus 服务器(+ kube 状态指标 + 节点导出器 + alertmanager)。问题是我希望某些指标来自特定的工作,而不是来自不同的工作。
例如,node_cpu_seconds_total
由kubernetes-service-endpoints
工作提供,但我希望它来自kubernetes-nodes
工作,即node-exporter
. 返回的指标值是准确的,但问题是我没有通常来自的标签kubernetes-nodes
(因为kubernetes-nodes
job 有role: node
vs role: endpoint
for kubernetes-service-endpoints
。我需要这些缺少的标签来进行高级查询 + 仪表板。
输出node_cpu_seconds_total{mode="idle"}
:
node_cpu_seconds_total{app="prometheus",chart="prometheus-7.0.2",component="node-exporter",cpu="0",heritage="Tiller",instance="10.80.20.46:9100",job="kubernetes-service-endpoints",kubernetes_name="get-prometheus-node-exporter",kubernetes_namespace="default",mode="idle",release="get-prometheus"} | 423673.44
node_cpu_seconds_total{app="prometheus",chart="prometheus-7.0.2",component="node-exporter",cpu="0",heritage="Tiller",instance="10.80.20.52:9100",job="kubernetes-service-endpoints",kubernetes_name="get-prometheus-node-exporter",kubernetes_namespace="default",mode="idle",release="get-prometheus"} | 417097.16
日志中没有错误,我确实有其他指标,kubernetes-nodes
例如被刮掉。up
storage_operation_errors_total
node-exporter
我还手动验证了node-exporter
具有此特定指标的 ,node_cpu_seconds_total
并且curl <node IP>:9100/metrics | grep node_cpu
它有结果。
工作订单定义重要吗?如果它们具有相同的名称,一项工作会覆盖另一个工作的指标吗?我应该放弃这项kubernetes-service-endpoints
工作的指标吗?我是普罗米修斯的新手,因此感谢您提供任何详细的帮助。
解决方案
通过导航到 prometheus 服务发现状态 UI 页面,我能够弄清楚如何添加“缺失”标签。该页面显示了所有可以通过 relabel_configs 处理和保存的“发现的标签”。处理/保留的内容显示在“目标标签”下的“发现的标签”旁边。所以这只是修改kubernetes-service-endpoints
作业配置的问题,scrape_configs
所以我添加了更多的标签。下面正是我在图表中所做的更改scrape_configs
。使用这个新配置,我得到namespace
, service
, pod
, 并node
添加到所有指标(如果指标还没有)(请参阅 参考资料honor_labels
)。
- job_name: 'kubernetes-service-endpoints'
+ honor_labels: true
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
- target_label: kubernetes_namespace
+ target_label: namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
- target_label: kubernetes_name
+ target_label: service
+ - source_labels: [__meta_kubernetes_pod_name]
+ action: replace
+ target_label: pod
+ - source_labels: [__meta_kubernetes_pod_node_name]
+ action: replace
+ target_label: node
推荐阅读
- java - Pycryptodome AES_GCM 加密到 Java 解密
- webpack - webpack HtmlWebpackPlugin 不是构造函数?
- bash - bash 作为默认 shell 和运行 'bash' 有什么区别?
- r - 循环遍历 R 中的数据框和列
- javascript - 我如何使用与 Vue 3 兼容的 Vue 2 过滤器
- crystal-reports - 从脚本而不是屏幕运行水晶报告
- debugging - F12 调试器工具找不到正在运行的加载项
- arm - Arm-Embedded-GCC 工具链 - 差异版本 7 和 9
- python-3.x - 如何在python的元组列表中具体命名每个值?
- oracle - 如何将 OFFSET 和 LIMIT 传递给函数