从节点到 daemonset/kube-prometheus-exporter-node 的标签

use*_*367 6 prometheus prometheus-operator prometheus-node-exporter

prometheus-operator 包含 DaemonSet,用于将节点导出器部署到集群中的每个节点。它有效,但我们缺少一些有用的标签信息,例如:

# kubectl get nodes --all-namespaces --show-labels=true
NAME                            STATUS    ROLES     AGE       VERSION    LABELS
ip-1   Ready     master    2d        v1.10.12   ...,kubernetes.io/role=master,...
=
ip-2   Ready     node      2d        v1.10.12   ...,kubernetes.io/role=node,...
Run Code Online (Sandbox Code Playgroud)

所以我们在标签中有有用的信息——ip-1是master,ip-2是worker等。

但此信息在节点导出器目标上丢失,因为节点标签不会传播到 daemonset 节点导出器 pod。

例如,在普罗米修斯中,我无法按节点的类型对节点进行分组。

也许有办法实现这一目标?谢谢!

Bra*_*ken 10

prometheus中的node-exporter指标缺少节点信息但有pod信息的原因是因为prometheus-operator为node-exporter提供了一个ServiceMonitor,它设置了一个带有端点的scrape配置kubernetes_sd_config.role,这只获取__meta_kubernetes_endpoint和 元__meta_kubernetes_pod标签。

我们想要使用带有kubernetes_sd_config.roleof节点的抓取配置。为此,节点导出器抓取端点必须可在节点地址上访问,为节点导出器提供的守护进程集已在节点上公开端口 9100。

下一步是为 prometheus-operator 提供额外的抓取配置,以通过节点而不是服务发现节点导出器,并复制我们可能需要的任何节点标签:

- job_name: node-exporter
  relabel_configs:
  - source_labels: [__address__]
    action: replace
    regex: ([^:]+):.*
    replacement: $1:9100
    target_label: __address__
  - source_labels: [__meta_kubernetes_node_name]
    target_label: name
  - source_labels: [__meta_kubernetes_node_label_beta_kubernetes_io_arch]
    target_label: arch
  - source_labels: [__meta_kubernetes_node_label_beta_kubernetes_io_instance_type]
    target_label: instance_type
  - source_labels: [__meta_kubernetes_node_label_kubernetes_io_os]
    target_label: os
  - source_labels: [__meta_kubernetes_node_label_topology_kubernetes_io_region]
    target_label: region
  - source_labels: [__meta_kubernetes_node_label_topology_kubernetes_io_zone]
    target_label: zone
  - source_labels: [__meta_kubernetes_node_label_dedicated] # or any other custom label
    target_label: dedicated
  kubernetes_sd_configs:
  - role: node
Run Code Online (Sandbox Code Playgroud)

此后,您可以删除节点导出器的 ServiceMonitor。

重新标签__address__很重要,感谢如何配置 prometheus kubernetes_sd_configs 以指定特定主机端口?


evg*_*nyl 0

看来你需要使用relabel_config

这是一个示例: https: //www.robustperception.io/automatically-monitoring-ec2-instances

PS 至于特定角色,您也可以找到有用的这篇文章:How to have labels for machine Roles

更新:要获取元数据中无法提供的其他节点详细信息,可以使用 sidecar 或 init 容器,例如:节点属性的 init 容器 example。

此外,使节点标签可用于 pod 也是一个未解决的问题:40610