Prometheus vs. Graphite

[TOC] 任何系统、应用程序、产品或流程的关键性能指标之一是某些参数或数据点在一段时间内的表现。比如,如何在几秒钟内监视API端点上的命中情况或数据库延迟?当下捕捉到的单个数据点本身不会有太多的表征意义。然而,随着时间的推移,对相同趋势的跟踪会告诉你更多的信息,包括特定指标变化所产生的影响。

例如,如果您想知道一个新的社区进程或文档对API的命中次数的影响,或者某个特定的软件修复是如何影响数据库的延迟的,请将当前值与引入变化之前的值进行比较。这就是时序数据的价值。

围绕时间序列数据构建的监控工具需要在非常高的交易量下执行以下操作:

  1. 收集(或至少监听)事件,事件通常带有时间戳;
  2. 有效地存储这些事件的数量;
  3. 支持对这些事件的查询;
  4. 提供对这些功能的图形监视,以便随着时间的推移跟踪趋势。

Prometheus 和 Graphite是用于存储和绘制时间序列数据的开源监控工具。Prometheus是一个“时间序列DBMS和监视系统”,而Graphite是一个更简单的“时间序列数据记录和绘图工具”。两者都是开源的,主要用于系统监视。然而Prometheus是最近发展起来的,它承担了支撑扩展性的额外挑战,并包含了许多特性,包括灵活的查询语言、推送网关(用于从临时的或批处理的作业中收集指标数据)、一系列出口商以及其他工具。

在本文中,我们将横向比较Prometheus和Graphite,并提供一些选择标准供参考。

Graphite概述

在某种程度上,Graphite比Prometheus更简单,特征更少,使命也更简单。根据官方文档(graphite.readthedocs.io/en/latest/o…

  1. 存储数字时间序列数据
  2. 呈现此数据的图形

虽然Graphite不会进行数据收集,但是设计了名为Carbon的twisted守护进程来被动地监听时间序列数据,并将数据存储在一个名为Whisper的库文件中。最后,可以通过一个简单的Django Web应用程序按需绘制图形。

image.png

值得重申的是,与Prometheus相比,Graphite的数据收集是被动的,这意味着发送数据的应用程序需要进行相关配置来将数据发送到Graphite的carbon组件。

Prometheus概述

相对来说,Graphite是一个简单的数据记录和绘图工具,可以广泛应用于包括并不限于监控在内的很多场景,而Prometheus是一个全面的系统和服务监控系统。这意味着,虽然Prometheus具有更丰富的特性,但它同时也有一个更具体和更窄的应用范畴。

Prometheusy 主动的搜刮数据,进行存储,支持查询、图表展现和告警,以及向其他API使用者(诸如Grafana,甚至Graphite)提供端点。它通过以下组件完成所有这些工作:

  1. 客户端类库:插装应用程序代码(用于生成事件);

  2. Prometheus服务器:一旦启动,将这些事件作为时间序列数据进行抓取和存储;

  3. 推送网关:支持临时数据导入作业;

  4. 数据导出工具:向HAProxy、StatsD、Graphite等导出数据;

  5. 告警管理器:处理告警。

image.png 根据其官方文档(github.com/prometheus/…

  1. 多维数据模型,其时序数据由指标名称和键/值维度定义;
  2. 灵活的查询语言;
  3. 自治的单服务器节点,不依赖于分布式存储;
  4. 通过HTTP之上的pull model进行数据收集;
  5. 时间序列数据推通过中介网关传送到其他数据目的地和存储介质;
  6. 服务发现和静态配置来发现目标节点;
  7. 对图表和仪表板的多种支持模式;
  8. 垂直和水平上支持Federation。

如上图所示,Prometheus支持用于服务发现、告警、可视化和导出的多个第三方实现,从而使管理员能够为每种场景选用最适合的技术实现。这里仅只是展示了一部分。

Prometheus在Graphite发布数年后发布,也许可以被看作是对它的一种改进,专注于监视,并具有更多的特性和性能调优。

特性比较

  • 数据收集和使用

Graphite没有直接的数据收集支持。Carbon被动地侦听数据,但是为了支持数据收集,需要在时序数据管道中引入像Flow entd、statd、collectd或其他解决方案。一旦收集完毕,Graphite就有一个内置的UI来可视化数据,而Prometheus则是一个完整的监控解决方案,内置了数据收集、存储、可视化和导出。

  • 存储

Graphite可以存储时序数据,这些数据通常是从数据采集的守护进程(如上面提到的那些)或其他监控解决方案(如Prometheus)中收集的。Graphite通过其Metrics API或Render API基于HTTP协议进行数据查询。在Graphite中,Carbon把数据存储在Whisper里。随着时间的推移而被持续跟踪的变量,会生成一个单独的指标文件,其工作模式就像一个巨大的数组,文件的写入是非常精确的。每个自动汇总也会生成一个单独的文件。

Prometheus提供了时间序列本身的键值标记,这提供了更好的可组织性和更健壮的查询功能。

Prometheus的官方文档解释了其磁盘存储的机制。采集的数据按2小时为单位划分为若干块,每个块是包含一个或多个大文件的目录,以及一个元数据文件和索引文件

  • 数据可视化和仪表板

Graphite提供了相当基本的,但有用的可视化选项,可通过其Django网络应用调用。Graphite还支持仪表板编辑。

Prometheus在仪表板上使用控制台模板,但由于功能丰富,这些模板的学习曲线可能相当高。当然,作为开源软件,可以采用代码级或者方案级的自定义模板来进行客户化。

值得一提的是,Graphite和Prometheus这两种解决方案的用户通常依赖Grafana作为用户界面,因为其内置UI通常都不能满足用户的需要。

  • 插件体系结构与可扩展性

Graphite不提供插件。但是很多工具都与Graphite兼容。

Prometheus运营了一个导出工具的生态系统,这使得第三方工具能够将其数据导出到Prometheus。许多开源组件默认与Prometheus兼容。

  • 告擎和事件跟踪

Graphite可以跟踪事件,但不直接支持告警。

Prometheus不支持事件跟踪,但提供完全支持告警机制和警报管理。当然,Prometheus的查询语言允许用户自己实现事件跟踪。

相似点

Prometheus和Graphite的共同点是:

  • 为时间序列数据提供可视化工具。
  • 提供自己的查询语言。
  • 为给定时序数据存储数字样本。
  • 是开源的。
  • 与广泛的工具和插件兼容,包括Grafana。
  • 设计时考虑到可靠性和容错能力。
  • 支持对时序数据的实时监视。

不同点

Prometheus为数据收集提供直接支持,而Graphite不提供。

  • Prometheus的查询语言和元数据模型比Graphite的更加健壮。
  • Prometheus是一个完整的监控和趋势系统,包括内置和主动的抓取机制、支持存储、查询、图形展现和告警机制。Graphite是一种被动时序日志和绘图工具。诸如数据抓取和告警这些内容,由外部组件解决。
  • Prometheus为告警提供内置支持,而Graphite需要额外的工具和工作来支持警报生成。
  • Prometheus提供了比Graphite更广泛的客户端类库支持。
  • 两者都具备真正意义上的水平扩展性,但是Prometheus支持分区(sharding)和复制(federation)。
  • Prometheus支持XML数据导入,而Graphite不支持。

猜你喜欢

转载自juejin.im/post/7080700768260456485