我正在尝试从节点导出器获取启动时间,但我想让它由 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"}
如果您还有其他问题请告诉我!