【问题标题】:Prometheus create label from metric labelPrometheus 从度量标签创建标签
【发布时间】:2018-02-13 20:27:09
【问题描述】:

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

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

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'

【问题讨论】:

    标签: monitoring prometheus


    【解决方案1】:

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

    您在这里要做的是首先使用服务发现来获得正确的主机名,而 dns_sd_configs 则无法做到这一点。你可能会看类似 Consul 和 https://www.robustperception.io/controlling-the-instance-label/

    【讨论】:

    • 感谢您的帮助!显然我误解了重新标记在普罗米修斯中的工作方式。我们刚刚开始切换到 docker swarm 和微服务,还有很多东西要学。我会看看 Consul 作为我们的服务发现。
    【解决方案2】:

    如果有人遇到这个:

    将此创建为 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 指标获得

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 2019-12-21
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2020-01-02
      • 1970-01-01
      相关资源
      最近更新 更多