Prometheus 监控

Prometheus 监控指南 - 定义、用例、应用和资源

什么是 Prometheus?

Prometheus 是一个开源系统监控和告警工具包,最初由 SoundCloud 的前 Google 员工构建,他们希望监控服务器和应用程序上的指标。Prometheus 在 2016 年加入 云原生计算基金会,成为继 Kubernetes 之后的第二个托管项目。Prometheus 是一种独立于任何公司提供的开源产品,作为 Kubernetes 指标的监控解决方案非常受欢迎。Prometheus 与 InfluxDB 一样,都是用 Go 编写的。

Prometheus 如何作为监控解决方案工作?

Prometheus 网站为 Prometheus 监控解决方案和底层的时序基础设施提供了 出色概览。基本上,要使用 Prometheus 监控您的服务,它们需要暴露一个 Prometheus 端点。此端点是一个 HTTP 接口,用于暴露 指标 列表和指标的当前值。然后,Prometheus 服务器轮询服务上的指标接口并存储数据。此架构被称为基于轮询的监控,或 拉模式监控

对于 Kubernetes 环境,服务发现集成良好,Prometheus 轮询指标端点并将指标收集到 Prometheus 服务器中以进行监控和告警。拉模式方法的一个好处是,它不需要您安装代理来收集指标,尽管您仍然需要部署“Exporter”以从您正在收集指标的系统暴露指标。

Prometheus-Monitoring-Diagram

推模式与拉模式指标收集和监控

在拉模式方法中,监控代理定期轮询被监控的目标,并根据该数据发出告警。在推模式方法中,遥测数据 和指标被推送到监控代理(或更常见的是 时序数据库),监控通过代理或其他进程查询数据库来完成。

在检测您自己的应用程序代码时,您需要在推模式和拉模式收集方法之间进行选择。您可以将指标通过客户端库发送到另一个服务,也可以通过某些网络可寻址目标(例如 HTTP API)使其可供其他人使用。

Prometheus 已成为 Kubernetes 拉模式指标的标准语言。通过形式化拉模式方法,Prometheus 为各种服务和应用程序提供了一种标准语言,使用标准格式暴露目标以从中拉取指标数据。

拉模式方法的主要缺点是它们不适用于事件驱动型时序(例如对 API 的单个请求,或基础设施中的事件)。另一个缺点是所有指标端点都必须可从服务器访问,这意味着需要更精细的安全网络配置。对于需要集群来实现高可用性的大规模部署,这也可能成为一个问题。

仅对于 Kubernetes 而言,监控拉模式指标收集可能就足够了,但对于分布式环境,尤其是在物联网架构中,推模式监控更可取。在大多数环境中,通常既需要监控和告警指标(规则的时间间隔),也需要监控和告警事件(不规则的时间间隔),因此最好同时支持推模式和拉模式。这是 Prometheus 当前的一个限制,但这正是 InfluxData 的 TelegrafKapacitor 可以增强 Prometheus 环境的地方。

增强 Prometheus 以支持使用推模式和拉模式进行监控

Kapacitor 可以读取所有按照 Prometheus 标准生成的指标。这意味着任何与 Prometheus 一起使用的服务发现目标都将与 Kapacitor 一起使用。此外,借助 InfluxDB 对 Prometheus 远程读写协议的原生支持,您可以使用 Prometheus 收集数据,并将 InfluxDB 用作您的长期、高可用性、可扩展的数据存储。

使用 Kapacitor 监控 Prometheus 抓取目标可以实现进一步的流式分析、高级异常检测,或在将流式数据存储在底层数据存储之前添加自定义逻辑的能力。

Telegraf Operator 项目 为使用 InfluxDB 平台补充或替换 Prometheus 监控解决方案提供了更多选择。

Prometheus 服务器架构

Prometheus 的核心价值和主要设计目标之一是简洁性。为了实现这一目标,Prometheus 专注于单节点架构,并增强服务器以在此单节点基础设施中实现更高的性能。Prometheus 在其路线图中没有集群,可能是因为这将产生额外的复杂性,这与其简洁性的设计目标背道而驰。

PromQL

Prometheus 查询语言 (PromQL) 是一种函数式查询语言,使用户能够实时选择和聚合时序数据。表达式的结果可以显示为图表,在 Prometheus 的表达式浏览器中以表格数据形式查看,或通过 HTTP API 被外部系统使用,例如,作为告警或通知。

增强 Prometheus 以实现高可用性

InfluxData 的 InfluxDB 具有类似的单节点方法和一些类似的设计目标,但 InfluxDB Enterprise 包括集群以支持需要高可用性的环境。由于 InfluxDB Enterprise 包括 Kapacitor 和 Telegraf,您可以保持在构建 Prometheus 端点方面的任何投入,但您可以将数据存储在集群 InfluxDB Enterprise 部署中的多个节点上。InfluxDB 的原生脚本和查询语言 Flux 支持 PromQL,进一步减少了必须为两个数据存储编写查询的麻烦。

Prometheus 数据限制

InfluxData 的 InfluxDB 具有类似的单节点方法和一些类似的设计目标,但 InfluxDB Enterprise 包括集群以支持需要高可用性的环境。由于 InfluxDB Enterprise 包括 Kapacitor 和 Telegraf,您可以保持在构建 Prometheus 端点方面的任何投入,但您可以将数据存储在集群 InfluxDB Enterprise 部署中的多个节点上。InfluxDB 的原生脚本和查询语言 Flux 支持 PromQL,进一步减少了必须为两个数据存储编写查询的麻烦。

结论

在需要拉模式指标监控和告警的 Kubernetes 环境中,使用 Prometheus 进行监控是一个不错的选择。对于需要监控或告警指标和事件的环境,或者高可用性是要求的环境,请考虑增强您的架构以包括 InfluxData 的 InfluxDB Enterprise 或 InfluxDB 和 Kapacitor。InfluxData 将继续增强对 Prometheus 的支持。要及时了解最新进展,请在 GitHub 上关注该项目。

资源

视频

博客

GitHub

Prometheus 新闻

InfluxDb-cloud-logo

最强大的时序
数据库即服务

免费开始
Influxdbu

开发者教育

为时序应用开发者提供的培训。

查看所有教育内容