如何通过Prometheus指标查询systemd服务的运行时长而非主机uptime
systemd服务运行时长查询方案
完全可以实现,核心依赖node_exporter的systemd采集器暴露的服务启动时间戳指标,操作步骤如下:
- 第一步:确认node_exporter启动配置
必须开启systemd采集器,启动参数添加--collector.systemd,如果目标服务没有默认被采集,追加参数--collector.systemd.unit-include="service01.service"(支持正则匹配批量采集多个服务),修改后重启node_exporter生效。 - 第二步:编写PromQL查询语句
用PromQL内置的time()函数获取当前时间戳,减去对应服务的启动时间戳,即可得到服务累计运行的秒数,查询语句如下:time() - node_systemd_unit_start_time_seconds{instance="x.x.x.x:9100", name="service01.service"} - 第三步:Grafana面板适配
- 将上述查询填入Stat面板的查询框后,在面板右侧「标准选项-单位」中选择时间>持续时间(秒),面板会自动将秒数转换为易读的天/小时/分钟格式展示
- 若需要兼容服务未运行的场景,可添加值映射规则:将
null或缺失值映射为「未运行」,和你现有状态映射逻辑对齐即可
内容的提问来源于stack exchange,提问作者Ian Gregson
相关产品推荐
相关产品推荐

