遇到的问题
需求场景如下:在Prometheus我想通过自己开发的metrics接口,收集达梦数据库最后一次备份成功备份的时间点,并在Grafana中展示。(基于prometheus2.46.0版本)其实需求很简单,但是在指标值传递和展示的过程中遇到了一些不可描述的困难:
1、在自定义metrics接口中,不支持yyyy/mm/dd HH24:MM:ss
格式的指标值,会报错,因为自定义接口中只能传入float类型的值,所以我就改成UNIX时间戳,即1970-01-01 00:00:00
到当前时间已经经过的描述(达梦数据库中用的是from_unixtime()
函数)。
2、时间戳是传过来了,但是在PromQL中,2.26版本的Prometheus不知道怎么转为可读的时间,chatgpt和文心一言上至少问的有30多个问题,最后发现给的答案中的timestamp函数不好用,而且2.26版本中一些函数也没找到。
解决方法
既然指标值中没法传递,换个思路,那就使用指标的label进行传递,直接传递时间的字符串,而且在grafana中展示:
1、指标名后边加入label,对应的值为想要传递的yyyy/mm/dd HH24:MM:ss
时间戳,例如last_succeed_database_backup_time{times=\"2024-01-05 01:00:00\"} 0
(指标值直接传0就行,反正这个也用不到了)
2、在grafana的dashboard中,使用Stat面板,加入指标的query后,在右侧的Value Options中,选择对应的label即可直接使用label值,截图(公司纯内网没法用电脑截图):