如何基于Prometheus数据源合并SQL实例运行时长指标为dd hh:mm格式?
解决方案:仅用Prometheus数据源实现dd hh:mm格式展示
完全可以实现,给你两种可行方案,适配不同的Prometheus版本:
方案一:PromQL直接生成格式化字符串(要求Prometheus 2.40及以上)
利用PromQL的字符串处理函数,直接把三个指标拼接成目标格式:
concat( string(mssql_server_uptime_days), " ", printf("%02d", mssql_server_uptime_hours), ":", printf("%02d", mssql_server_uptime_minutes) )
- 注意要保证三个指标的标签完全匹配(比如实例ID、机器标识这类标签一致),这样Prometheus才能正确关联同一实例的三个数值
printf("%02d", ...)是为了让小时和分钟始终显示两位数字,比如5分钟会变成05,避免出现dd h:m的不规整格式
方案二:先算总分钟数,再在Grafana里格式化(兼容所有Prometheus版本)
如果你的Prometheus版本较旧,不支持printf函数,就先把三个指标转换成总分钟数,再让Grafana完成格式转换:
1. 用PromQL计算总运行分钟数
mssql_server_uptime_days * 1440 + mssql_server_uptime_hours * 60 + mssql_server_uptime_minutes
2. 在Grafana面板里配置显示格式
以常用的Stat面板为例:
- 添加上面的查询后,进入Panel options > Value options
- 找到Unit选项,选择
Custom,然后输入dd hh:mm - 如果默认的时间单位格式化不符合预期(比如天数超过30会被自动转成月),可以用自定义模板:
进入Value formatting > Custom,输入模板:
这个模板会强制按天、两位小时、两位分钟的格式输出,不会自动转换单位{{ div value 1440 }}d {{ printf "%02d" (mod (div value 60) 24) }}:{{ printf "%02d" (mod value 60) }}
内容的提问来源于stack exchange,提问作者Blax
相关产品推荐
相关产品推荐

