如何根据 dockerswarm_sd_config 中的实例信息获取节点的启动时间

如何根据 dockerswarm_sd_config 中的实例信息获取节点的启动时间

我正在尝试从节点导出器获取启动时间,但我想让它由 dockerswarm_sd 提供的节点驱动

- job_name: dockernodes
  scrape_interval: 5s
  dockerswarm_sd_configs:
  - host: unix:///var/run/docker.sock
    role: nodes
  relabel_configs:
  - source_labels: [__meta_dockerswarm_node_hostname]
    target_label: nodename
  - source_labels: [__meta_dockerswarm_node_role]
    target_label: role
  - source_labels: [__meta_dockerswarm_node_id]
    target_label: instance

我到了这一点

(up{job="dockernodes"} * on (nodename) group_right node_uname_info)
  * on (instance)  node_boot_time_seconds

但最终结果为零。

答案1

问题在于运营商的选择

(up{job="dockernodes"} + on (nodename) group_right node_uname_info)
  * on (instance) node_boot_time_seconds
up{job="dockernodes"}

我预计这个值是0因为没有实际的指标为什么 docker node inspect 没有提供我可以连接的 IP 地址?

在我的例子中,最好node_uname_info返回一个值1

最后一个node_boot_time_seconds将获得我需要的最终值,在这种情况下我只需乘以1

然后我可以根据需要进行聚合,avg例如

avg((up{job="dockernodes"} + on (nodename) group_right node_uname_info)
  * on (instance)  node_boot_time_seconds)

答案2

您几乎已经搞定了!进行一些小修改,使其更简洁,并考虑启动时间。

(time() - node_boot_time_seconds) * on(instance) group_left(nodename, role) up{job="dockernodes"}

如果您还有其他问题请告诉我!

相关内容