从节点到 daemonset/kube-prometheus-exporter-node 的标签
Labels from nodes to daemonset/kube-prometheus-exporter-node
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,...
所以我们在标签中有有用的信息 - ip-1 是 master,ip-2 是 worker 等等
但是这个信息在节点导出器目标上丢失了,因为节点标签没有传播到守护进程节点导出器pods。
所以在 prometheus 中,我无法按类型对节点进行分组。
也许有办法实现这一点?谢谢!
看来你需要用relabel_config
这是一个例子:https://www.robustperception.io/automatically-monitoring-ec2-instances
P.S。至于特定角色,您也可以找到有用的 post:How to have labels for machine roles
更新:
要获取无法从元数据中获取的其他节点详细信息,可以使用 sidecar 或 init 容器,例如:init container for node properties example.
此外,使节点标签可用于 pod 是未解决的问题:40610
之所以node-exporter metrics在prometheus中没有node信息但是有pod信息是因为prometheus-operator提供了一个ServiceMonitor for node-exporter, which sets up a scrape configuration with a kubernetes_sd_config.role
of endpoints,这个只得到了__meta_kubernetes_endpoint
和__meta_kubernetes_pod
元标签。
我们想使用 kubernetes_sd_config.role
为 node. To do this the node-exporter scrape endpoint must be reachable on the node address, the provided daemonset for node-exporter already exposes port 9100 on the node 的抓取配置。
下一步是给 prometheus-operator 一个 additional scrape config 以通过节点而不是服务发现 node-exporter 并复制我们可能需要的任何节点标签:
- job_name: node-exporter
relabel_configs:
- source_labels: [__address__]
action: replace
regex: ([^:]+):.*
replacement: :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
之后你可以删除node-exporter的ServiceMonitor。
__address__
重新标记很重要,感谢 How to configure prometheus kubernetes_sd_configs to specify a specific host port?
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,...
所以我们在标签中有有用的信息 - ip-1 是 master,ip-2 是 worker 等等
但是这个信息在节点导出器目标上丢失了,因为节点标签没有传播到守护进程节点导出器pods。
所以在 prometheus 中,我无法按类型对节点进行分组。
也许有办法实现这一点?谢谢!
看来你需要用relabel_config
这是一个例子:https://www.robustperception.io/automatically-monitoring-ec2-instances
P.S。至于特定角色,您也可以找到有用的 post:How to have labels for machine roles
更新: 要获取无法从元数据中获取的其他节点详细信息,可以使用 sidecar 或 init 容器,例如:init container for node properties example.
此外,使节点标签可用于 pod 是未解决的问题:40610
之所以node-exporter metrics在prometheus中没有node信息但是有pod信息是因为prometheus-operator提供了一个ServiceMonitor for node-exporter, which sets up a scrape configuration with a kubernetes_sd_config.role
of endpoints,这个只得到了__meta_kubernetes_endpoint
和__meta_kubernetes_pod
元标签。
我们想使用 kubernetes_sd_config.role
为 node. To do this the node-exporter scrape endpoint must be reachable on the node address, the provided daemonset for node-exporter already exposes port 9100 on the node 的抓取配置。
下一步是给 prometheus-operator 一个 additional scrape config 以通过节点而不是服务发现 node-exporter 并复制我们可能需要的任何节点标签:
- job_name: node-exporter
relabel_configs:
- source_labels: [__address__]
action: replace
regex: ([^:]+):.*
replacement: :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
之后你可以删除node-exporter的ServiceMonitor。
__address__
重新标记很重要,感谢 How to configure prometheus kubernetes_sd_configs to specify a specific host port?