如何查找存储在Prometheus LevelDB中的时间序列数量

我负责维护我们公司的Prometheus服务器。但是指标是由各个团队提供的。 有没有办法找出Prometheus数据库中存储的时间序列数量?我们正在使用默认的LevelDB数据存储方式。 我需要这些值来判断是否需要调整我们的Prometheus实例的本地存储设置。 谢谢你的帮助。

你找到上述问题的解决方案了吗?就我所知,LevelDB只用于索引。 - David B.
很不幸,我还没有找到解决办法。欢迎提供任何线索。 - Tobias Wiesenthal
我了解Prometheus将时间序列存储在磁盘上,每个时间序列对应一个文件。存储位置由storage.local.path标志指定。你有没有研究过这个? - David B.
6个回答

关于 count({__name__=~".+"}) 怎么样? 它会返回数据库中时间序列的数量。我通过手动抓取与每个目标当前公开的指标数量进行了比较,结果相差不超过10%。我猜这个差异是由于我过去拥有的一些目标现在已经离线造成的。

prometheus_tsdb_head_series

只是因为我总是忘记,不得不去谷歌这个问题,并且这个问题在最前面。根据this answer的说法,prometheus_tsdb_head_seriescount({__name__=~".+"})之间可能会有差异,因为它们对"活动"的定义有所不同,但除非您的指标计数变化很大,否则我建议使用prometheus_tsdb_head_series,因为如果您有很多指标,查询速度会快得多。


注意:如果您在代理模式下使用Prometheus,您需要使用名为prometheus_agent_active_series的指标。 - Lirt


经过进一步的研究和感谢David.B的评论,我找到了一个对我有效的解决方案 ™

为了找到Prometheus存储的时间序列数量,我在storage.local.path文件夹中使用以下命令:
ls -l {{0..9},{a..f}}{{0..9},{a..f}} | grep -E "*.db$" | wc -l

此外,在prometheus文档中我还发现了一些指标,这些指标在处理内存问题/优化时可能会有所帮助。

这可能不是最复杂的方法,但它给出了我所需要的数字。


去这个网址: https://YOUR-PROMETHEUS-UI:9090/tsdb-status

enter image description here

或者查询这个:

prometheus_tsdb_head_series

或者查询这个:

count({__name__=~".+"}

或者你也可以使用ls -l {{0..9},{a..f}}{{0..9},{a..f}} | grep -E "*.db$" | wc -l来计算storage.local.path中的文件数量。我还没有测试过这个方法。


你可以在Prometheus控制台上尝试使用({name=~".+"})来获取所有的时间序列。

我一开始就尝试了这个方法。不幸的是,count({name=~".+"})给出的数字比prometheus_local_storage_memory_series给出的数字要小。 在我的情况下,count给出的是3k,而prometheus_local_storage_memory_series给出的是130k。我本来期望内存中的时间序列数量应该等于或小于总时间序列数量,而不是相反。上面的版本(ls -l {{0..9},{a..f}}{{0..9},{a..f}} | grep -E "*.db$" | wc -l)告诉我我有527k个时间序列。 - Tobias Wiesenthal
count({__name__=~".+"})会给你想要的数字。 - KEB