从Prometheus居然不能填充mock数据说起
大家好,想必大家都听过Prometheus,也就是普罗米修斯。今天的主角就是它!
注意,是这个:
不是这个:
起
最近,团队里的小伙伴在做方案调研的过程中,提了个奇怪且大胆的要求:用Prometheus做个测试,要先跑两天数据。
啥?!
浓眉大眼的Prometheus居然不能填充Mock数据?
github上4万多颗星是瞎给的吗?
承
于是乎,不信邪的我,又是看文档,又是搜谷歌,又是翻StackOverFlow,哈,终于被我找到一个方法:
小伙伴二话不说直接开测,然后:
转
于是乎,不信邪的我,又是看文档,又是搜谷歌,又是翻StackOverFlow,硬着头皮啃了好一会英文,然后:
叮!你的英语阅读能力又提升了!
然后,我看到了让人绝望的一段文字:
来源:
https://groups.google.com/g/prometheus-developers/c/Z5KwE6KbwN0?pli=1
简单说,这段话有两层意思:
- 1). Prometheus是个指标(metric)系统,它定时去抓取目标系统的实时状态(指标),而不关心这些数据的发生时间。
- 2). Prometheus不适合用来记录在特定时间发生的事件数据,处理这些数据是Elasticsearch或者InfluxDB更擅长的事。
好吧,我们想做的事情,不适合用Prometheus。
似乎可以结案了?
折
但是,这都2202年了,即使不是出于测试需要,实际生产环境中,肯定有人想要导入历史数据的吧,难道Prometheus也不支持导入历史数据吗?
于是乎,不信邪的我,又是看文档,又是搜谷歌,又是翻StackOverFlow……
终于!
我学会了一个新的词:backfill
直译过来就是:回填。
什么是回填?
土木工程上,回填就是把之前挖的坑填回去。
软件工程上,就是修bug导入历史数据。
早在2020年的某天,我最爱的Grafana的某个大佬在某次讨论会上,讨论过一个话题:如何向Prometheus批量回填数据
并水发表了一篇博客:《提高Prometheus回填历史数据的效率,我们是这么做的》
还顺手还提了个PR:
于是乎,这下差不多可以结案了:
Prometheus虽然不支持为指标设置时间戳,但是,通过promtool这个命令行工具,可以将历史数据以直接写入数据库,或者说回填。
结
简单总结一下,
- 1). Prometheus是一个建立在时序数据库(tsdb)上的指标监控系统,而不是个通用的时序数据库,跟InfluxDB从根本上来说,根本不是一回事。
- 2). Prometheus是个指标(metric)系统,它定时去抓取目标系统的实时状态(指标),而不关心这些数据的实际发生时间。
- 3). Prometheus不适合用来记录在特定时间发生的事件数据,处理这些数据是Elasticsearch或者InfluxDB更擅长的事。
- 4). Prometheus虽然不支持为指标设置时间戳,但是,通过promtool这个命令行工具,可以将历史数据以Prometheus的数据格式直接写入,或者说回填。
以上,就是一个耿直IT男如何浪费时间在一件看似可能实现、实际上不可能实现、可是又不是不能实现、只是没啥实际用的事情上,并且为此水了一篇博客的经过。