Prometheus vs. Grafana vs. Graph
前言
实际运维过程中拥有稳定、易用的监控工具对系统的稳定行、状态监控维护必不可少, 这里讲主要介绍几个常用的主要的监控工具以及他们的主要的应用场景。
image
比较监控工具特征点
- 可视化和面板编辑功能
- 存储
- 数据收集
- 插件支持和扩展
- 报警和事件追踪功能
可视化和面板编辑功能
这部分将主要讨论构建指标/时间序列图, 并在仪表盘中组织他们功能方面的性能比较
-
Grafana:在可视化和仪表板创建和定制方面,Grafana是最好的选择。它功能丰富,易于使用,而且非常灵活。
Grafna.png -
Graphite:良好的可视化选项,但其核心功能中不包含仪表板编辑。在现实世界中,Graphite与Grafana结合使用; Graphite进行数据存储,而Grafana进行可视化。
graphite.png -
Prometheus:非常好,但通常很难使用图形和仪表板编辑功能。 Prometheus利用控制台模板进行可视化和仪表板编辑,但这些控制台模板的学习曲线起初可能很难。在现实世界中,我的建议是首先使用Grafana进行图形和仪表板编辑,然后(当达到熟练程度时)转到Prometheus控制台模板。
promethus.png
可视化最佳:无疑 Grafana 在可视化和面板编辑上面占有绝对的优势
数据存储
可视化是任务的一部分,但是我们需要从源获取它们,并且此源需要以某种方式存储所有时间序列并提供查询它们的方法:
- Grafana:不支持时间序列的存储。 Grafana只是一种可视化解决方案。时间序列存储不是其核心功能的一部分。
- Graphite: Graphite可以存储从其他来源(通常是直接监控工具)获得的时间序列,并提供查询语言来获取存储的数据。同样,Grafana可以与Graphite一起使用,以便可视化存储在其存储后端的数据。
- Prometheus: Prometheus存储时间序列的方式是迄今为止最好的方式(由于其维度模型,它使用时间序列中的键值标记来更好地组织数据并提供强大的查询功能)。如前所述,Grafana可以与Prometheus查询语言一起使用,以创建图形和仪表板。
备注: Prometheus 不经提供了强大的存储功能, 其查询语法也都是类 SQL 的, 功能强大方面易用
Prometheus 强大的函数查询操作:
https://prometheus.io/docs/prometheus/latest/querying/functions/
Prometheus 语法与 MySQL 比较:
https://songjiayang.gitbooks.io/prometheus/content/promql/sql.html
存储最佳: Prometheus 存储上更优秀
-
数据收集
完成了数据的可视化和数据的存储, 我们还需要做的是如何获取我们的数据
- Grafana:没有数据收集支持。同样,Grafana只是一个可视化解决方案。无论是时间序列存储还是时间序列收集都不是其核心功能的一部分。
- Graphite:也没有数据收集支持,至少不是直接支持。您需要包含statd,collectd等解决方案才能使数据收集部分正常运行。 Graphite将从这些来源获取所有数据,并将此数据作为时间序列存储在其存储后端中。
-
Prometheus:是的,Prometheus可以与存储和可视化一起完成数据收集部分。这是一个非常完整的解决方案。
备注: 类似 Graphite 、zabbix以及nagios 是需要主动的 push 数据的, 而 Prometheus 是主动的拉取数据。 push 数据的系统是通常由采集的agent来决定和哪一个监控服务进行通讯, 而 Prometheus 这种类型的 pull 数据的监控平台则由server侧决定采集的目标有哪些。
image
相比于Push System而言, Pull System:
- 只要Exporter在运行,你可以在任何地方(比如在本地),搭建你的监控系统
- 你可以更容器的去定位Instance实例的健康状态以及故障定位
当然我觉得,Pull System更利于DevOps的实施。每一个团队可以搭建自己的监控系统,并关注自己关心的监控指标,并构建自己的DevOps Dashboard。
promethus 服务发现.png数据收集最佳: Prometheus 无疑是数据收集方面的胜者
-
插件架构和可扩展性
-
Grafana:是的,支持,并且有大量插件应用于数据源,应用程序和仪表板编辑。更多信息:https://grafana.com/plugins
grafna插件支持.png
- Graphite:是的,以某种方式。 Graphite并不真正提供或拥有插件库。相反,有很多工具已经与Graphite兼容。可访问以下链接:http://graphite.readthedocs.io/en/latest/tools.html
- Prometheus:以某种方式。Prometheus 他们为出口商。出口商允许第三方工具将其数据导出到Prometheus(例如 graphite-exporter)。此外,开源世界中的一些软件组件已经与Prometheus兼容。更多信息,请访问以下链接:
https://prometheus.io/docs/instrumenting/exporters/
插件架构和可扩展性最佳:所有人,真的。 Grafana可能是具有扩展其核心功能的真正插件的那个,但是有很多工具以这种或那种方式兼容Graphite和Prometheus。
报警:
-
Grafana: 报警规则可以使用现有的图表控制面板设置,阈值可以通过拖拉右边的线控制,非常简单。Grafana服务器会不断评估设置的规则,在规则条件符合的时候发送出通知。配置比较简单,不能复杂的告警功能。
grafna报警.png -
Graphite: 不能直接执行报警部分。
-
Prometheus: 完全支持报警管理, 包含了对报警事件的 Grouping、Inhibition、Silences等操作, 并且为了高可用性允许 Alertmanager 的集群化配置。虽然没有包含直接事件跟踪,但Prometheus非常强大的查询语言允许您执行一些魔术来间接执行事件跟踪部分。
总结
最终我们选择什么样的工具或者组合可以依据我们的场景来定。