目录
什么是 Prometheus?
Prometheus 是一款开源系统监控和警报工具包,最初由 SoundCloud 的前 Google 员工构建,他们希望监控服务器和应用程序的指标。Prometheus 于 2016 年加入 云原生计算基金会,成为继 Kubernetes 之后的第二个托管项目。Prometheus 是一种独立于任何公司提供的开源产品,并且作为 Kubernetes 指标的监控解决方案非常受欢迎。Prometheus 与 InfluxDB 一样,使用 Go 语言编写。
Prometheus 如何作为监控解决方案工作?
Prometheus 网站为 Prometheus 监控解决方案和底层时序基础设施提供了 出色的概述。基本上,要使用 Prometheus 监控您的服务,您的服务需要公开一个 Prometheus 端点。此端点是一个 HTTP 接口,用于公开指标列表和指标的当前值。然后,Prometheus 服务器轮询服务上的指标接口并存储数据。此架构被称为基于轮询的监控,或拉取式监控。
对于 Kubernetes 环境,服务发现集成良好,Prometheus 将轮询指标端点并将指标收集到 Prometheus 服务器中,以进行监控和警报。拉取方法很好,因为它不需要安装代理来收集指标,尽管您仍然需要部署“exporter”来公开您正在从中收集指标的系统的指标。
推送与拉取式指标收集和监控
在拉取式方法中,监控代理定期轮询被监控的目标,并根据该数据发出警报。在推送方法中,遥测和指标被推送到监控代理(或更频繁地推送到 时序数据库),并且监控通过代理或其他查询数据库的进程完成。在检测您自己的应用程序代码时,需要在推送和拉取之间做出选择。您可以将指标通过客户端库发送到另一个服务,也可以通过某些网络可寻址目标(例如 HTTP API)使它们可供其他人使用。
形式化拉取方法的真正优势,正如 Prometheus 所做的那样,在于它为各种服务和应用程序提供了一种标准语言,以标准格式公开目标,从中拉取指标数据。Prometheus 已成为 Kubernetes 拉取式指标的标准语言。
拉取式方法的主要缺点是它们不适用于事件驱动的时序(例如对 API 的单个请求,或基础设施中的事件)。另一个缺点是所有指标端点都必须可从服务器访问,这意味着需要更精细的安全网络配置。对于大规模部署或需要集群来实现高可用性的情况,这也可能成为问题。
仅对于 Kubernetes,监控拉取式指标收集可能就足够了,但对于分布式环境,尤其是在物联网架构中,推送式监控更可取。在大多数环境中,通常需要监控指标(规则的时间间隔)和事件(不规则的时间间隔)并发出警报,因此最好同时支持推送和拉取。这是 Prometheus 目前的一个限制,但这正是 InfluxData 的 Telegraf 和 Kapacitor 可以用来增强 Prometheus 环境的地方。
增强 Prometheus 以支持使用推送和拉取进行监控
Kapacitor 可以读取所有按照 Prometheus 标准生成的指标。这意味着任何与 Prometheus 配合使用的服务发现目标都将与 Kapacitor 配合使用。此外,借助 InfluxDB 对 Prometheus 远程读取和写入协议的本机支持,Prometheus 可以用作收集器,并让 InfluxDB 成为其长期、高可用性、可扩展的数据存储。
使用 Kapacitor 监控 Prometheus 抓取目标可以实现进一步的流式分析、高级异常检测或添加自定义逻辑的能力,这些逻辑甚至在流式数据存储在底层数据存储之前就被触发。
Prometheus 服务器架构
Prometheus 的核心价值和主要设计目标之一是简单性。为了实现这一目标,Prometheus 专注于单节点架构,并增强服务器以在此单节点基础设施中实现越来越高的性能。Prometheus 在其路线图中可能没有集群,因为这会增加额外的复杂性,并且这与其简单性的设计目标背道而驰。
增强 Prometheus 以实现高可用性
InfluxData 的 InfluxDB 具有类似的单节点方法和一些类似的设计目标,但 InfluxDB Enterprise 包括集群,以支持需要高可用性的环境。由于 InfluxDB Enterprise 包括 Kapacitor 和 Telegraf,因此构建 Prometheus 端点的所有投资都得以保留,但数据可以存储在集群 InfluxDB Enterprise 部署中的多个节点上。InfluxData 正在开发一种 新的查询语言,该语言将支持 PromQL,以进一步减少编写查询到两个数据存储的麻烦。
结论
在需要拉取式监控和指标警报的 Kubernetes 环境中使用 Prometheus 是一个不错的选择。对于需要监控指标和事件或需要高可用性的环境,请考虑增强您的架构以包含 InfluxData 的 InfluxDB Enterprise 或 InfluxDB 和 Kapacitor。InfluxData 将继续增强对 Prometheus 的支持。要了解最新进展,请在 GitHub 上关注该项目。
更多资源
- 博客:InfluxDB 现在原生支持 Prometheus 远程读取和写入
- GitHub:Prometheus 远程读取和写入 API 支持
- 博客:InfluxDB 和 Kapacitor:增强的数据模型和函数式查询语言
- GitHub:在 InfluxDB 的新查询语言中支持 PromQL
- 新闻稿:最新 InfluxData 版本推出业界首个高级 Kubernetes 自动扩展和 Prometheus 读取/写入支持
- 新闻报道:IoT Innovator | 新的 InfluxData 更新增加了高级 Kubernetes 自动扩展、Prometheus 读取/写入支持
- 新闻稿:InfluxData 发布更新的 Prometheus 支持;入选在 KubeCon + CloudNativeCon Europe 2018 上展示
- 新闻报道:Container Journal | InfluxData 为 Prometheus 监控提供实时分析优势
- 博客:使用 Nginx InfluxDB 模块监控 Kubernetes Nginx Ingress
- 博客:监控 Kubernetes 架构
- 博客:推送与拉取式监控:InfluxDB 使用 Kapacitor 添加拉取支持
- 博客:InfluxDB 1.4 现已发布:InfluxQL 增强功能、Prometheus 读取/写入、更好的压缩以及更多!
- 博客: Percona Live Dublin 回顾
- 博客:Prometheus + InfluxDB:Austin Monitoring Meetup 之后的思考
- 词汇表:边缘计算