与替代品比较

Prometheus vs. Graphite

' class="reference-link">

适用范围

Graphite 专注于成为具有查询语言和图形功能的消极时间序列数据库。其他任何顾虑都通过外部组件解决

Prometheus 是一个完整的监控和趋势分析系统,其中包括基于时间序列数据的内置主动采集,存储,查询,制图和告警。它掌握系统的信息(应该存在哪些端点,什么时间序列模式意味着麻烦等),并积极尝试查找错误。

' class="reference-link">

数据模型

Graphite 像Prometheus一样存储命名时间序列的数值样本。但 Prometheus 的元数据模型更加丰富:尽管 Graphite 指标名称由点分隔的多部分组成,这些部分隐式地对维进行编码,但是 Prometheus 明确将维度编码为键值对(称为标签),并附加到指标名称。这允许通过查询语言通过这些标签轻松进行过滤,分组和匹配。

此外,尤其是当将 Graphite 与 StatsD 结合使用时,通常只在所有受监视实例上存储聚合数据,而不是将实例保留为一个维度并能够深入分析单个有问题的实例。

例如,使用 Graphite/StatsD 来对请求到 API 服务器 /tracks 端点的 POST 方法且响应状态码为 500 的 HTTP 请求数进行编码:

  1. stats.api-server.tracks.post.500 -> 93

在 Prometheus 中,可以像这样对相同的数据进行编码(假设三个 api-server 实例):

  1. api_server_http_requests_total{method="POST",handler="/tracks",status="500",instance="<sample1>"} -> 34
  2. api_server_http_requests_total{method="POST",handler="/tracks",status="500",instance="<sample2>"} -> 28
  3. api_server_http_requests_total{method="POST",handler="/tracks",status="500",instance="<sample3>"} -> 31
' class="reference-link">

存储

Graphite 以 Whisper 格式将时间序列数据存储在本地磁盘上,这是一种 RRD 样式的数据库,它希望样本以固定的时间间隔到达。 每个时间序列都存储在一个单独的文件中,新样本在一定时间后会覆盖旧样本。

Prometheus 也会在每个时间序列上创建一个本地文件,但允许在采集数据或规则评估时以任意间隔存储样本。由于仅附加了新样本,因此旧数据可以任意保留。Prometheus 也适用于许多短暂的,经常变化的时间序列集。

' class="reference-link">

小结

Prometheus 除了更易于运行和集成到您的环境之外,还提供了更丰富的数据模型和查询语言。如果您想要一个可以长期保存历史数据的群集解决方案,那么 Graphite 可能是一个更好的选择。

Prometheus vs. InfluxDB

InfluxDB 是一个开放源代码的时间序列数据库,具有用于扩展和集群化的商业选项。 Prometheus 开发开始将近一年后,InfluxDB 项目才发布,因此我们当时无法将其视为替代方案。尽管如此,Prometheus 和 InfluxDB 之间仍然存在显着差异,并且两种系统面向的用例稍有不同。

' class="reference-link">

适用范围

为了进行公平的比较,我们需要将 Kapacitor 与 InfluxDB 一起考虑,因为它们结合起来可以解决与 Prometheus 和 Alertmanager 相同的问题。

对于 InfluxDB 本身,与 Graphite 适用范围的差异同样适用于此。此外,InfluxDB 还提供连续查询,这些查询等同于 Prometheus 记录规则。

Kapacitor 作用范围是 Prometheus 记录规则,警报规则和 Alertmanager 的通知功能的组合。Prometheus 提供了更强大的查询语言来进行图形显示和警报。Prometheus Alertmanager 还提供了分组,重复数据删除和静音功能。

' class="reference-link">

数据模型/存储

与 Prometheus 一样,InfluxDB 数据模型也将键值对作为标签,称为 tags。此外,InfluxDB 还有第二级标签,称为 fields,使用范围受到更多限制。InfluxDB 支持高达十亿分之一秒分辨率的时间戳,以及 float64,int64,bool 和字符串数据类型。相比之下,Prometheus 支持 float64 数据类型,但对字符串和毫秒分辨率的时间戳支持有限。

InfluxDB 使用日志结构合并树的变体作为带有按时间分片的预写日志的存储。与 Prometheus 每个时间序列的仅附加文件相比,此方法更适合事件记录。

博客Logs and Metrics and Graphs, Oh My! 描述了事件日志和度量记录之间的差别。

' class="reference-link">

架构

Prometheus 服务器彼此独立运行,并且依靠其本地存储来实现其核心功能:数据采集,规则处理和告警。InfluxDB 的开源版本与此类似。

商业 InfluxDB 产品是一个分布式存储集群,其中存储和查询由多个节点一次处理。

这意味着商业 InfluxDB 将更易水平扩展,但这也意味着您必须从一开始就管理分布式系统的复杂性。Prometheus 的运行更简单,但在某些时候,您将需要按照产品,服务,数据中心或类似的可伸缩行边界明确地分片服务器。独立服务(可以并行冗余运行)也可以为您提供更好的可靠性和故障隔离。

Kapacitor 的开源版本没有用于规则,警报或通知的内置分布式/冗余选项。Kapacitor 的开源发行版可以通过用户手动分片来扩展,类似于 Prometheus 本身。Influx提供了 Enterprise Kapacitor,它支持高可用警报系统。

相比之下,Prometheus 和 Alertmanager 通过运行 Prometheus 的冗余副本并使用 Alertmanager 的高可用模式提供了完全开源的冗余选项。

' class="reference-link">

小结

两个系统之间有很多相似之处。两者都有标签(在 InfluxDB 称为 tags),可以有效地支持多维度指标数据。两者都使用基本相同的数据压缩算法。两者都有广泛的集成,包括彼此之间的集成。两者都有可以让您进一步扩展的钩,例如使用统计工具分析数据或执行自动操作。

InfluxDB 的优点:

  • 进行事件记录。
  • 商业版本为 InfluxDB 提供集群服务,这对长期数据存储也更好。
  • 在副本之间保持最终一致的数据视图。

Prometheus 的优点

  • 主要用于做指标数据
  • 更强大的查询语言,告警和通知功能
  • 图形和告警的可用性和正常运行时间更高

InfluxDB 由一家商业公司按照开放核心模型进行维护,并提供高级功能,如闭源的群集,托管和支持。Prometheus 是一个完全开源的独立项目,由许多公司和个人维护,其中一些也提供商业服务和支持。

Prometheus vs. OpenTSDB

OpenTSDB 是基于 HadoopHBase 的分布式时间序列数据库。

' class="reference-link">

适用范围

与 Graphite 适用范围的差异同样适用于此。

' class="reference-link">

数据模型

OpenTSDB 的数据模型几乎与 Prometheus 的数据模型相同:时间序列由一组任意键值对标识(OpenTSDB 中为 tags)。指标的所有数据存储在一起,从而限制了指标的基数。尽管有一些细微的差别:Prometheus 允许标签值中包含任意字符,而OpenTSDB 的限制更严格。OpenTSDB 还缺少完整的查询语言,仅允许通过其 API 进行简单的汇总和数学运算。

' class="reference-link">

存储

OpenTSDB 的存储在 HadoopHBase 之上实现。这意味着可以轻松水平扩展 OpenTSDB,但您必须从一开始就接受 Hadoop/HBase 集群总体的复杂性。

Prometheus 最初运行起来会更简单,但是一旦超出单个节点的容量,就需要进行明确的分片。

' class="reference-link">

小结

Prometheus 提供了更丰富的查询语言,可以处理更高的基数指标,并且构成了完整监视系统的一部分。如果您已经在运行 Hadoop 并重视长期存储的优势,那么 OpenTSDB 是一个不错的选择。

Prometheus vs. Nagios

Nagios 是一个始于 1990 年代的 NetSaint 监控系统。

' class="reference-link">

适用范围

Nagios 主要是基于脚本的退出代码进行警报。这些称为 “checks”。单个警报会静音,但是不会进行分组,路由或重复数据删除。

Nagios 有各种各样的插件。例如,perfData 插件允许使用管道传输将几千字节的数据返回到时间序列数据库,如 Graphite或使用NRPE 在远程计算机上运行检查

' class="reference-link">

数据模型

Nagios 是基于主机的。每个主机可以具有一个或多个服务,并且每个服务可以执行一项检查。Nagios 没有标签或查询语言的概念。

' class="reference-link">

存储

除了当前的检查状态外,Nagios 本身没有存储空间。有一些插件可以存储诸如可视化的数据。

' class="reference-link">

架构

Nagios 服务是独立的,所有的检查配置均通过文件进行。

' class="reference-link">

小结

Nagios 适用于黑匣子探测已足够的小型或静态系统的基本监控。

如果您想进行白盒监控,或者具有动态或基于云的环境,那么 Prometheus 是一个不错的选择

Prometheus vs. Sensu

Sensu 是可组合的监控管道,可以重用现有的 Nagios 检查

' class="reference-link">

适用范围

与 Nagios 适用范围的差异同样适用于此。

Sensu 包含一个客户端套接字,允许将临时检查结果推送到 Sensu 中。

' class="reference-link">

数据模型

Sensu 与 Nagios 具有相同粗略的数据模型。

' class="reference-link">

存储

Sensu 使用 Redis 持久化监视数据,包括 Sensu 客户端注册,检查结果,检查执行历史记录和当前事件数据。

' class="reference-link">

架构

Sensu 具有许多组件。它使用 RabbitMQ 作为传输工具,使用 Redis 记录当前状态,并使用单独的服务器进行处理和 API 访问。

Sensu部署的所有组件(RabbitMQ,Redis 和 Sensu Server/API)都可以集群化,以实现高可用性和冗余配置。

' class="reference-link">

小结

如果您现有的 Nagios 设置希望按原样缩放,或者想利用 Sensu 的自动注册功能,那么 Sensu 是一个不错的选择。

如果您想进行白盒监控,或者具有非常动态或基于云的环境,那么Prometheus是一个不错的选择。