Prometheus 不是 OPEN TSDB

news/2024/11/8 23:56:39 标签: prometheus, 安全, devops, 运维, OpenTelemetry, consul, argocd

    误解——这无疑是阐释我早期 Prometheus 体验的恰当词汇。彼时,我怀揣着丰富的 Graphite 使用经验以及中等程度的 InfluxDB 经验,开始接触 Prometheus。 在我眼中,Graphite 是一个性能卓越却有着相当局限性的系统。在 Graphite 里,指标仅仅是字符串(嗯,是带点的那种),而且其值始终是以最低可达的 1 秒分辨率进行聚合存储的。不过,也正是因为这些限制,才使得 Graphite 拥有了较快的速度。 相较而言,InfluxDB 采用的是 Metrics 2.0 格式,每个指标都具备多个标签和字段。它甚至允许以令人赞叹的纳秒精度来存储非聚合数据点。然而,这种强大的能力必须谨慎运用,否则,使用者将会遭遇各种各样的性能问题。  

Prometheus:从误解到深入理解的探索之旅

在探索监控系统的征程中,我与 Prometheus 的相遇充满了波折,也让我对它有了全新的认识。

初始的期待与困惑

最初,我带着对 Graphite 和 InfluxDB 的经验来接触 Prometheus。Graphite 在我眼中是个高性能但局限明显的系统,其指标只是特定格式的字符串,值以最低 1 秒分辨率聚合存储,不过这也成就了它的速度。InfluxDB 则不同,采用 Metrics 2.0 格式,每个指标有多个标签和字段,还能以纳秒精度存储非聚合数据点,但这种能力若使用不当,性能问题便会接踵而至。

出于某种特殊的缘由,我原本以为 Prometheus 会介于这二者之间,是一个兼具二者优点的系统——有着丰富的标签指标、能够存储非聚合值,还具备高查询性能。刚开始的时候,我确实有这种感觉。然而,随着使用的深入,问题逐渐浮现。我常常无法对某些查询结果给出合理的解释,那种困惑就像面对一个无解之谜。有时候,我在指标中怎么也找不到理应存在的证据,指标所呈现的画面和我分析原始数据(比如 Web 服务器访问日志)时亲眼所见的完全不同。

深入探究背后的原因

为了弄清楚状况,我开始寻求更多细节。我渴望知晓指标是如何收集、存储的,查询执行模型又是怎样的。这一探究可不得了,一开始,我被自己的发现震惊到了。很多时候,Prometheus 的行为与 Graphite 和 InfluxDB 相比,显得毫无逻辑。后来我才意识到,我遗漏了一个关键信息。

Graphite 和 InfluxDB 都是纯粹的时间序列数据库 (TSDB),它们虽常用作存储监控指标,但每个特定设置都伴随着权衡和附加功能来解决性能、可靠性问题。比如 Graphite 前端常有类似 statsd 的守护进程预聚合,对旧数据点有不同汇总策略。用户也都清楚这些,查询近期数据期望秒级精度,查询较久数据就知道每个点是一分钟聚合数据。

但 Prometheus 不是传统的 TSDB,它是一个以监控为核心,底层使用 TSDB 的系统。这就意味着,在 Graphite 安装中常见的权衡问题,Prometheus 开发者虽有考虑,但并非所有都在文档中详细说明。所以,当查询结果奇怪时,可能是我对 Prometheus 整体理解有偏差,不只是查询执行模型。在监控环境中,追求纯 TSDB 的精准结果成本可能过高。Prometheus 作为指标收集系统,为监控而生,收集、存储和查询性能良好,但在数据精度(如每 10 - 30 秒抓取一次指标)、完整性(容忍 5 分钟回溯增量丢失抓取)或对延迟分布的处理(如 histogram_quantile() 的工作方式)上有所牺牲。

重新审视与持续学习

意识到这种差异后,我重新审视了对 Prometheus 的期望。同时,我仍在寻找更好的方法理解 PromQL 的查询执行模型。网上关于 Prometheus 和 PromQL 的文章虽多,但大多只是对查询语言的浅显介绍。经过大量搜索,我发现了 PromLabs 和 Robust Perception 的博客,它们是 Prometheus 创建者所写,内容深奥,对我理解很有帮助。

不过,实践出真知。我搭建了本地的 Prometheus 游乐场来实践,巩固学习成果。我也努力记录所学,主要是为了方便自己回顾,当然,也欢迎大家查看我其他关于 Prometheus 的帖子。希望我的这些经历能给同样探索 Prometheus 的小伙伴们一些启发。


http://www.niftyadmin.cn/n/5744587.html

相关文章

新系统如何进行模型环境配置

在机器学习和深度学习中,一个良好的开发环境能够显著提高工作效率。本篇博客将详细介绍如何在新的Linux系统(以Ubuntu为例)上进行模型环境的配置,包括基础系统设置、Python虚拟环境搭建、常用库的安装以及GPU驱动和CUDA的安装等。…

C++【string类,模拟实现string类】

🌟个人主页:落叶 🌟当前专栏: C专栏 目录 为什么学习string类 C语言中的字符串 标准库中的string类 auto和范围for auto关键字 迭代器 范围for string类的常用接口说明和使用 1. string类对象的常见构造 2.string类对象的容量操作 3…

laravel chunkById 分块查询 使用时的问题

laravel chunkById 分块查询 使用时容易出现的问题 1. SQLSTATE[23000]: Integrity constraint violation: 1052 Column ‘id’ in where clause is ambiguous 使用chunkById时,单表进行分块查询,是不会出现id重复的,当用两个表进行 join 查…

netstat中sendq/recvq用于排查发送端发送数据的问题

web同事开发了一个用于接收syslog数据的服务器,不清楚web的开发方式,用来联调的发送端是我们的C模块 反馈syslog udp形式接收正常,速度正常,数量也正常,syslog tcp形式接收开始比较快后面越来越慢,并且知道…

内部知识库:优化企业培训流程的关键驱动力

在当今快速变化的商业环境中,企业培训的重要性日益凸显。内部知识库作为整合、管理和分享企业内部学习资源的关键工具,正逐步成为优化企业培训流程的核心。以下将探讨内部知识库如何通过多种功能,助力企业提升培训效率、质量和员工满意度。 …

sheng的学习笔记-tidb框架原理

目录 TiDB整体架构 TiDB架构图 组件-TiDB Server 架构图 流程 关系型数据转成kv ​编辑 组件-TiKV Server​ 架构图 主要功能: 列簇 组件-列存储TiFlash 组件-分布式协调层:PD PD架构图 路由 Region Cache back off TSO分配 概念 解…

非线性数据结构之图

一、无环图(Acyclic Graph) 1. 定义 无环图是一种没有环路的图,图中的路径不会形成封闭回路。如果无环图是有向的,则称为 有向无环图(DAG, Directed Acyclic Graph)。 2. 特点 无环性:无环图…

手撕代码要做(更新)

https://mp.weixin.qq.com/s?__bizMzkyNTY0Mjg0OQ&mid2247483790&idx1&sn308fb18b66cc66b78f7e15822cdd6eff&scene21#wechat_redirect 算法工程师面试常考手撕题(更新) Transformer篇 单头注意力多头注意力位置编码 神经网络篇 BP…