Prometheus是一个开源监控解决方案,用于收集和聚合指标作为时间序列数据。更简单地说,Prometheus商店中的每个项目都是一个指标事件,并带有它发生的时间戳。
Prometheus最初是在Soundcloud开发的,但现在是一个由CloudNativeComputingFoundation(CNCF)支持的社区项目。在过去十年中,它迅速发展壮大,因为它结合了查询功能和云原生架构,使其成为现代应用程序的理想监控堆栈。
在本文中,我们将解释Prometheus的角色,浏览它如何存储和公开数据,并强调Prometheus的责任在哪里结束。其流行的部分原因在于该软件与其他平台的互操作性,这些平台可以以更方便的格式显示数据。
Prometheus有什么作用?
Prometheus实时存储事件。这些事件可以是与您的应用程序相关的任何事件,例如内存消耗、网络利用率或单个传入请求。
基本数据单位是“度量”。每个指标都分配了一个名称,也可以引用它和一组标签。标签是任意键值数据对,可用于过滤数据库中的指标。
指标始终基于四种核心工具类型之一:
计数器–一个稳定增加的值,从不减少或重置。
仪表–可以随时向任何方向变化的值。
直方图–多个值的采样,提供所有存储值的总和,以及记录事件的计数。
摘要–摘要的功能类似于直方图,但支持可配置的分位数,用于在滑动时间段内进行聚合监控。
Prometheus通过使用基于拉取的数据获取机制来确定指标的当前值。它会定期轮询支持每个指标的数据源,然后将结果作为新事件存储在时间序列数据库中。被监控的应用程序负责实现用作数据源的端点;这样的数据提供者通常被描述为输出者。
基于拉取的模型简化了将Prometheus集成到您的应用程序中的过程。您需要做的就是提供一个兼容的端点,该端点显示要收集的指标的当前值。Prometheus处理其他一切。尽管这可能会导致效率低下——例如,如果Prometheus在其数据更改之前再次轮询端点——这意味着您的代码不需要处理度量传输。
更多关于出口商
导出器负责公开您的应用程序指标,以供Prometheus收集。许多用户会从NodeExporter的简单部署开始,它从安装它的Linux主机收集基本系统指标。
各种各样的出口商提供了许多Prometheus本身或官方社群供应商提供。无论您是在监控MySQL、PostgreSQL和MongoDB等流行的数据库引擎,还是在跟踪HTTP服务器、日志引擎或消息总线,很可能已经存在导出器。
您可以通过编写自己的exporter来跟踪应用程序自己的指标。这种方法确实没有任何限制——您可以捕获在登陆页面、销售量、用户注册或任何对您的系统重要的其他方面所花费的时间。
导出器是简单的HTTPAPI端点,因此它们可以用任何编程语言构建。Prometheus为Go、Java/Scala、Python和Ruby提供官方客户端库,可以更轻松地检测您的代码。社区倡议也为大多数其他流行语言提供了非官方图书馆。
查询Prometheus数据
Prometheus中的数据使用PromQL进行查询,PromQL是一种内置查询语言,可让您使用各种运算符和函数来选择、解析和格式化指标。由于Prometheus使用时间序列存储,因此支持基于时间的范围和持续时间选择,可以轻松处理在特定时间段内添加的表面数据。
这是一个memory_consumption显示过去一小时内所有事件的示例:
memory_consumption[1h]
此示例仅显示过去一小时内记录的内存消耗事件。
您可以通过在大括号内添加键值对来按标签过滤:
memory_consumption{app="api"}[1h]
内置函数为更精确的分析提供了机会。下面是一个示例,该示例使用该rate()函数计算memory_consumption所选时间段内指标的增长率:
rate(memory_consumption[1h])
Prometheus数据可以通过内置的WebUI访问,通常暴露在端口或HTTPAPI上。后者提供了一种从Prometheus获取数据到其他工具(例如仪表板解决方案)的可靠方法。
警报
Prometheus带有一个Alertmanager组件,可以在指标更改时向您发送通知。它支持确定何时应该发送警报的基于规则的策略。
您可以接收关于您的电子邮件地址、任意HTTP网络钩子和流行的消息传递平台(如Slack)的警报。Alertmanager包括对聚合和静音重复警报的集成支持,因此当在短时间内发生多个事件时,您不会被淹没。
Alertmanager的配置独立于Prometheus主系统。您在Prometheus中设置警报规则,确定指标应向Alertmanager发送警报的条件。然后,后一个组件决定是否应将警报传送到每个配置的平台。
Prometheus不能做什么?
虽然Prometheus是一个全面的监控解决方案,但它不适合某些角色。Prometheus的设计以可靠性和性能为核心原则。这会导致衡量指标准确性的权衡。
Prometheus不保证收集到的数据是%准确的。它适用于偶尔丢失的事件不会影响全局的高容量场景。如果您正在跟踪需要正确的敏感统计数据,您应该使用其他平台来处理这些指标。对于系统中不太重要的值,您仍然可以采用Prometheus。
此外,Prometheus可能不是您想要的监控堆栈中的唯一组件。它专注于存储和查询您的事件,主要使用HTTPAPI。内置的WebUI提供基本的绘图功能,但不支持高级自定义仪表板。数据可视化场景通常通过部署一个Grafana实例来处理;这通过内置的Prometheus集成提供仪表板和指标分析功能。
结论
简而言之,Prometheus是一个时间序列数据存储,可用于管理任何基于时间的顺序数据。它最常用于监控堆栈中其他应用程序的指标。虽然Prometheus是用于存储和查询指标的有效系统,但它通常与其他解决方案集成,以支持图形仪表板和高级可视化。它的受欢迎程度取决于它能够处理自定义指标、支持丰富的查询以及与云原生生态系统的其他成员进行互操作。
Prometheus旨在实现最大的可靠性。它旨在成为您在发生事故时的首选工具,帮助您了解其他组件出现故障的原因。集群部署中的各个Prometheus节点是完全自治的,不依赖于远程存储。由于其可靠性,Prometheus不保证数据的准确性。在规划新部署时,此缺点应该是您的主要考虑因素。
虽然我们在本文中没有介绍安装Prometheus的实际步骤,但如果您想亲自试用该系统,官方文档提供了一个全面的快速入门指南。Prometheus通常部署为Docker容器,但也可以从源代码或作为流行Linux发行版的预编译二进制文件获得。Dockerized方法最容易使用,因为它在准备运行的配置中包含所有核心组件。
#知识创作官#