Monitoring 普罗米修斯从公制标签创建标签

Monitoring 普罗米修斯从公制标签创建标签,monitoring,prometheus,Monitoring,Prometheus,我们正在容器中运行节点导出器。为了快速识别每个节点导出器在哪个主机上运行,我创建了如下度量:host{host=“$HOSTNAME”,node=“$CONTAINER\u ID”}1 我正在寻找一种方法来提取host=中的主机名,并为每个节点导出器实例创建一个标签作为主机名标签。我尝试了许多配置,但似乎都不起作用。当前普罗米修斯配置如下所示: scrape_configs: - job_name: 'node' scrape_interval: 10s scrape_

我们正在容器中运行节点导出器。为了快速识别每个节点导出器在哪个主机上运行,我创建了如下度量:
host{host=“$HOSTNAME”,node=“$CONTAINER\u ID”}1

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

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\u sd\u configs
中是不可能的。如果有人遇到以下情况,您可能会看到类似于领事和

将其创建为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" ]

然后构建它,您将始终获得作为节点元度量的主机名

谢谢您的帮助!很明显,我误解了在普罗米修斯中重新贴标签的工作原理。我们刚刚开始转向docker swarm和微服务,还有很多东西需要学习。作为我们的服务发现,我将看一看领事。