/ Prometheus

从Prometheus居然不能填充mock数据说起

大家好,想必大家都听过Prometheus,也就是普罗米修斯。今天的主角就是它!

注意,是这个:
prometheus-import-mock-metric-data-01
不是这个:
prometheus-import-mock-metric-data-02

最近,团队里的小伙伴在做方案调研的过程中,提了个奇怪且大胆的要求:用Prometheus做个测试,要先跑两天数据
prometheus-import-mock-metric-data-03

啥?!
浓眉大眼的Prometheus居然不能填充Mock数据?
github上4万多颗星是瞎给的吗?
prometheus-import-mock-metric-data-04

于是乎,不信邪的我,又是看文档,又是搜谷歌,又是翻StackOverFlow,哈,终于被我找到一个方法:
prometheus-import-mock-metric-data-05
小伙伴二话不说直接开测,然后:
prometheus-import-mock-metric-data-06

于是乎,不信邪的我,又是看文档,又是搜谷歌,又是翻StackOverFlow,硬着头皮啃了好一会英文,然后:
叮!你的英语阅读能力又提升了!
prometheus-import-mock-metric-data-07
然后,我看到了让人绝望的一段文字:
prometheus-import-mock-metric-data-08

来源:
https://groups.google.com/g/prometheus-developers/c/Z5KwE6KbwN0?pli=1

简单说,这段话有两层意思:

  • 1). Prometheus是个指标(metric)系统,它定时去抓取目标系统的实时状态(指标),而不关心这些数据的发生时间。
  • 2). Prometheus不适合用来记录在特定时间发生的事件数据,处理这些数据是Elasticsearch或者InfluxDB更擅长的事。

好吧,我们想做的事情,不适合用Prometheus。
似乎可以结案了?

但是,这都2202年了,即使不是出于测试需要,实际生产环境中,肯定有人想要导入历史数据的吧,难道Prometheus也不支持导入历史数据吗?
于是乎,不信邪的我,又是看文档,又是搜谷歌,又是翻StackOverFlow……
终于!
我学会了一个新的词:backfill
直译过来就是:回填
prometheus-import-mock-metric-data-09
什么是回填?
土木工程上,回填就是把之前挖的坑填回去。
软件工程上,就是修bug导入历史数据。

早在2020年的某天,我最爱的Grafana的某个大佬在某次讨论会上,讨论过一个话题:如何向Prometheus批量回填数据
prometheus-import-mock-metric-data-10
发表了一篇博客:《提高Prometheus回填历史数据的效率,我们是这么做的》
prometheus-import-mock-metric-data-11
还顺手还提了个PR:
prometheus-import-mock-metric-data-12

来源:https://grafana.com/blog/2020/09/02/how-were-improving-backfill-methods-to-get-older-data-into-prometheus/

于是乎,这下差不多可以结案了:
Prometheus虽然不支持为指标设置时间戳,但是,通过promtool这个命令行工具,可以将历史数据以直接写入数据库,或者说回填。
prometheus-import-mock-metric-data-13

简单总结一下,

  • 1). Prometheus是一个建立在时序数据库(tsdb)上的指标监控系统,而不是个通用的时序数据库,跟InfluxDB从根本上来说,根本不是一回事。
  • 2). Prometheus是个指标(metric)系统,它定时去抓取目标系统的实时状态(指标),而不关心这些数据的实际发生时间。
  • 3). Prometheus不适合用来记录在特定时间发生的事件数据,处理这些数据是Elasticsearch或者InfluxDB更擅长的事。
  • 4). Prometheus虽然不支持为指标设置时间戳,但是,通过promtool这个命令行工具,可以将历史数据以Prometheus的数据格式直接写入,或者说回填。

以上,就是一个耿直IT男如何浪费时间在一件看似可能实现、实际上不可能实现、可是又不是不能实现、只是没啥实际用的事情上,并且为此水了一篇博客的经过。

prometheus-import-mock-metric-data-14