Prometheus vs Grafana vs Graphite特征比较

2020-09-03 15:24:51 浏览数 (1)

什么是"时间序列"在现代监控中如何使用?

时间序列用于现代监控,作为表示随时间收集的度量数据的方式。这样,现代性能指标可以以智能和有用的方式存储和显示,帮助我们监控我们的服务器和服务。

许多解决方案(包括开源和私有专利的)已经在度量存储库及其可视化引擎中使用时间序列。最后一张图片来自Zabbix,它将所有时间序列数据存储在一个公共数据库中,然后将它们显示为时间度量图。其他例子包括古老的MRTG和Cacti。但在更现代化的基础架构中,尤其是AWS或OpenStack等云计算基础架构中,使用了更强大且可配置的解决方案。

在本文中,我们将比较三种最常用的替代品(Grafana,Graphite和Prometheus),以确定它们的优点和缺点。我们将使用以下参数作为所有三个选项之间的一般比较点:

  • 可视化和仪表板编辑
  • 存储
  • 数据采集
  • 插件体系架构和可扩展性
  • 报警和事件跟踪
  • 云监控兼容性
  • 开源与商业产品

可视化和仪表板编辑: 这是您设计和构建指标/时间序列图并在仪表板中组织它们的部分。监控视图的中心在这里:

  • Grafana:在可视化和仪表板创建和定制方面,Grafana是最好的选择。它功能丰富,易于使用,而且非常灵活。
  • Graphite:良好的可视化选项,但其核心功能中不包含仪表板编辑。在现实世界中,Graphite与Grafana结合使用; Graphite进行数据存储,而Grafana进行可视化。
  • Prometheus:非常好,但通常很难使用图形和仪表板编辑功能。Prometheus利用控制台模板进行可视化和仪表板编辑,但这些控制台模板的学习曲线起初可能很难。在现实世界中,我的建议是首先使用Grafana进行图形和仪表板编辑,然后(当达到熟练程度时)转到Prometheus控制台模板。

获胜者是: Grafana在这里大获全胜,而Prometheus则获得第二名。

存储: 可视化是任务的一部分,但我们无法凭空想象时间序列。我们需要从源获取它们,并且此源需要以某种方式存储所有时间序列并提供查询它们的方法:

  • Grafana: 没有时间系列存储支持。Grafana只是一种可视化解决方案。时间序列存储不是其核心功能的一部分。
  • Graphite: 这是Graphite赢得Grafana的地方。Graphite可以存储从其他来源(通常是直接监控工具)获得的时间序列,并提供查询语言来获取存储的数据。同样,Grafana可以与Graphite一起使用,以便可视化存储在其存储后端的数据。
  • Prometheus: 很好。Prometheus存储时间序列的方式是迄今为止最好的方式(由于其维度模型,它使用时间序列中的键值标记来更好地组织数据并提供强大的查询功能)。如前所述,Grafana可以与Prometheus查询语言一起使用,以创建图形和仪表板。

获胜者是:Prometheus在这方面表现出色,Graphite名列第二,Grafana则是绝对的失败者。

数据采集: 好的,您既有存储又可视化,但是,您需要从服务中获取数据。这是直接监控进入现场的地方。通过使用旧方法(SNMP)或新方法(agents),您需要一种方法来获取最终将存储为时间序列的度量标准:

  • Grafana:没有数据收集支持。同样,Grafana只是一个可视化解决方案。无论是时间序列存储还是时间序列收集都不是其核心功能的一部分。
  • Graphite:也没有数据收集支持,至少不是直接支持。您需要包含statd,collectd等解决方案才能使数据收集部分正常运行。Graphite将从这些来源获取所有数据,并将此数据作为时间序列存储在其存储后端中。
  • Prometheus: 国王从数据收集战中回来了。是的,Prometheus可以与存储和可视化一起完成数据收集部分。这是一个非常完整的解决方案,就像街上的其他演员(Cacti,Nagios和Zabbix)。

获胜者是:Prometheus再次获胜,而Graphite和Grafana都输掉了这场比赛。

插件体系架构和可扩展性: 所有现代软件解决方案中最强大的一点是通过使用插件或其他类似方法进行扩展的能力。这样,您可以扩展已有的核心功能,并在解决方案中包含一组全新的功能:

  • Grafana:是的,支持,并且有大量插件应用于数据源,应用程序和仪表板编辑。更多信息:https://grafana.com/plugins 。
  • Graphite:是的,以某种方式。Graphite并不真正提供或拥有插件库。相反,有很多工具已经与Graphite兼容。更多信息,请访问以下链接: http://graphite.readthedocs.io/en/latest/tools.html。
  • Prometheus: 再一次,在某种程度上是的。Prometheus称他们为出口商(Exporters)。出口商(Exporters)允许第三方工具将其数据导出到Prometheus。此外,开源世界中的一些软件组件已经与Prometheus兼容。有关以下链接的更多信息:https://prometheus.io/docs/instrumenting/exporters/。

获胜者是:所有人,真的。Grafana可能是具有扩展其核心功能的真正插件的那个,但是有很多工具以这种或那种方式兼容Graphite和Prometheus。

报警和事件跟踪: 监控解决方案尚未完成,除非您在任何指标开始变得有趣时包含一种生成警报的方法。此外,事件跟踪是关联重复事件的好方法,可以帮助您更好地诊断基础架构中的问题:

  • Grafana: 不,或者至少不是直接的。Grafana只能对时间序列进行可视化,并且在此任务中优于其他任务,但警报管理和事件跟踪都不是其核心功能的一部分。间接地,有一些方法可以将日志事件转换为数字,这是一种跟踪事件的方法。
  • Graphite:它可以进行事件跟踪,但不能直接执行报警部分。
  • Prometheus:完全支持报警管理。虽然没有包含直接事件跟踪,但Prometheus非常强大的查询语言允许您执行一些魔术来间接执行事件跟踪部分。

获胜者是: Prometheus一路走来获胜。Graphite位居第二,Grafana甚至没有达到终点线。

云监控兼容性: 像AWS和OpenStack这样的云包括他们自己的监控基础架构,它收集和存储时间序列,在某些情况下,还提供基本的图形和仪表板编辑功能。我们不想在本文的这一部分中详细介绍,因此我们将使用AWS和使用OpenStack的私有云来讨论公共云。

AWS监控服务称为Cloudwatch,它不仅包括所有基于时间序列的指标的数据存储,还包括基本图表和仪表板编辑。

OpenStack(特别是在其最新版本中)包括Gnocchi,它是一种“时间序列即服务”解决方案,但尚未包含直接图形和编辑组件。让我们看看我们的三个竞争者如何将自己与AWS和OpenStack集成。

  • Grafana:迄今为止的最佳解决方案。由于云解决方案(AWS和OpenStack)已经进行了数据收集,数据存储甚至报警管理,因此您真正需要的只是可视化和仪表板创建。Grafana包括对AWS Cloudwatch和OpenStack Gnocchi的支持(通过插件)。如果您的部署完全基于云,并且包含监控解决方案(Cloudwatch或Gnocchi),请不要使用除Grafana之外的其他任何内容。
  • Graphite:GitHub中已有一些组件 可用于将AWS Cloudwatch数据推送到Graphite,但同样,这并不是必需的,而且考虑到Cloudwatch已经可用于Graphite将涵盖的功能,这是浪费时间。对于OpenStack,社区建议仅使用Gnocchi和Grafana。我建议你不要浪费你的时间,坚持使用云中已有的监控选项。
  • Prometheus:AWS Cloudwatch有一个官方导出器,因此如果您愿意,可以使用Prometheus监控所有AWS云组件,但OpenStack Gnocchi尚未提供支持。值得注意的是,虽然Gnocchi同时支持collectd和statsd(Prometheus中的出口商选项),但支持是单向的,这意味着您可以向Gnocchi发送collectd / statsd指标,但不是相反。

获胜者是: Grafana是真正的赢家,其他竞争者并列第二名。理想情况下,您应该坚持使用云中已有的监控产品,并且只在需要时进行补充。这就是为什么Grafana是这里最好的选择。Cloudwatch和Gnocchi已经涵盖了时间序列收集和存储。

开源 VS 企业

在许多开源项目中,通常的做法是包括某种企业/商业产品,其中包括额外的果汁。让我们回顾三个竞争者可以提供的额外内容:

  • Grafana:开源模型功能齐全,适合企业使用。没有商业特定版本,但Grafana提供并由他们管理的托管解决方案。有关此内容的更多信息,请访问以下链接:https://grafana.com/cloud/grafana。
  • Graphite:开源模型功能齐全,可以随时使用。
  • Prometheus:与其他两个一样,开源模型功能齐全,可以随时使用。

获胜者是: Grafana因其提供托管选项而被宣布为获胜者。但是,如果您认为所有选项在其开源产品中都是功能完备的,那么所有选项都将首先到达终点。

最后的结论:所有这一切都没问题,但现在我很困惑。对我来说什么是正确的解决方案?

阅读本文后,您可能会头痛得厉害。别担心; 我们现在要减轻它。

AWS和OpenStack等云服务: 如果您的基础架构完全基于云,并且您已经拥有Cloudwatch或Gnocchi等选项的可用指标,请不要过多考虑:选择Grafana。您不需要存储时间序列(这已经是云的一部分)或定义警报(同样,这是AWS和OpenStack上可用的另一个功能)。您需要的是克服从Cloudwatch和Gnocchi继承的图形限制,并以智能,可用和功能丰富的方式显示您的指标。这是Grafana优于所有其他选择的地方。

具有基本数据收集解决方案的经典基础架构: 如果您的基础架构使用诸如collectd,statd或其他类似的仅数据收集工具之类的东西,并且只要Graphite可以使用它们,那么使用Graphite来执行时间序列存储部分在中央服务器中,将Grafana添加到您的组合中,以便以适当的方式显示这些指标。请注意,Graphite可以进行事件跟踪,但这与警报生成不同,因此您需要其他东西来执行此任务。

没有任何监控的任何基础架构: 如果您从头开始,并且没有其他可用的监控选项(或者您不想使用Cloudwatch或Gnocchi等基于云的系统),那么请使用Prometheus。最初,您可以添加Grafana以简化图表和仪表板编辑,直到您完全熟练使用Prometheus控制台模板。

我们的最后一条建议很简单: 为正确的方案调整合适的工具。明确地确定您的优先事项,并与您手头的内容保持平衡。如果你真正需要的是降落在月球上,不要试图到达银河系的中心,但如果当前的情况发展并且需要根据基础设施监控需求改进监控堆栈,请准备好进一步。

0 人点赞