繁体   English   中英

Prometheus 从指标 label 创建 label

[英]Prometheus create label from metric label

我们在容器中运行节点导出器。 为了快速识别每个节点导出器在哪个主机上运行,我创建了一个如下所示的指标: host{host="$HOSTNAME",node="$CONTAINER_ID"} 1

我正在寻找一种方法来提取host=中的主机名,并为每个节点导出器实例创建一个 label 作为主机名 label。我尝试了多种配置,但似乎都没有用。 当前的普罗米修斯配置如下所示:

scrape_configs:
   - job_name: 'node'
     scrape_interval: 10s
     scrape_timeout: 5s
     metrics_path: /metrics
     scheme: http
     dns_sd_configs:
     - names:
     - tasks.master-nodeexporter
       refresh_interval: 30s
       type: A
       port: 9100
     relabel_configs:
     - source_labels: ['host']
       regex: '"(.*)".*'
       target_label: 'hostname'
       replacement: '$1'

这是不可能的,因为目标重新标记发生在刮擦之前。

您在这里要做的是首先使用服务发现来获得正确的主机名,而这在dns_sd_configs是不可能的。 您可能会查看 Consul 和https://www.robustperception.io/controlling-the-instance-label/ 之类的内容

如果有人遇到这个:

将其创建为 docker-entrypoint.sh 并使其可执行。

#!/bin/sh -e
# Must be executable by others

NODE_NAME=$(cat /etc/nodename) echo "node_meta{node_id=\"$NODE_ID\", container_label_com_docker_swarm_node_id=\"$NODE_ID\", node_name=\"$NODE_NAME\"} 1" > /etc/node-exporter/node-meta.prom

set -- /bin/node_exporter "$@"

exec "$@"

比创建这样的 Dockerfile

FROM prom/node-exporter:latest

ENV NODE_ID=none

USER root

COPY conf /etc/node-exporter/

ENTRYPOINT [ "/etc/node-exporter/docker-entrypoint.sh" ]
CMD [ "/bin/node_exporter" ]

比构建它,您将始终获得主机名作为 node_meta 指标

这个答案解释了如何通过node_name label 在node_meta度量中导出节点名称。 然后可以在查询期间使用group_left()修饰符将node_name label 添加到node_exporter公开的任何指标。 例如,以下 PromQL 查询将node_name label 从node_meta指标添加到node_memory_Active_bytes指标:

node_memory_Active_bytes
  * on(job,instance) group_left(node_name)
node_meta

这些文档本文中查看有关group_left()修饰符的更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM