Prometheus 是一个开源的系统监控和警报工具,最初是在 SoundCloud 上构建的。自2012年启动以来,许多公司和组织都采用了 Prometheus,该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点,并阐明该项目的治理结构,Prometheus 于2016年加入 CNCF (云原生计算基金会),成为继 Kubernetes 之后的第二个托管项目。2018 年 8 月 9 日,CNCF 宣布开放源代码监控工具 Prometheus 已从孵化状态进入毕业状态。
特性
Prometheus 的主要特性有:
- 一个多维数据模型,包含由 metric 和 key/value 标识的时间序列数据
- PromQL是一种灵活的查询语言
- 不依赖分布式存储,单个服务器节点是自治的
- 基于 HTTP 协议通过 pull 形式进行收集时间序列数据
- push 形式的时间序列数据是通过一个中间网关来支持的
- targets 可以通过服务发现或静态配置发现的
- 多种模式的图形和仪表盘支持
组件
Prometheus 生态系统由多个组件组成,其中许多是可选的:
Prometheus Server:主要的 Prometheus 服务器,它抓取和存储时间序列数据
Client Libraries:用于检测应用程序代码的库,主要用于客户端。
Push Gateway:支持短期生命周期的 Jobs
Exporter:为 HAProxy、StatsD、Graphite 等服务提供数据。
Alert Manager:一个告警处理工具
各种支持工具
大多数的 Prometheus 组件是用 Go 语言来编写的,这使得他们可以很容易的构建并且使用静态的二进制文件来部署。
架构
这张图展示了 Prometheus 的架构及其生态系统的一些组成部分:
【图片来自官方网站】
Prometheus 从各种采集端的 Job 中获取 Metric,要么直接获取,要么通过 Push Gateway 获取短生命周期 Job 。它在本地存储所有抓取的数据,并对这些数据处理聚合和记录以生成新的时间序列,或者生成警报消息。Grafana 或其他 API 使用者可以使用 PromQL 语法来查询使用数据。
Prometheus 适合做什么
Prometheus 可以很好地记录任何纯数字的时间序列。它既适合以机器为中心的监视,也适合高度动态的面向服务的体系结构的监视。在微服务的世界中,它对多维数据收集和查询的支持是一个特别的优势。
Prometheus 是为可靠性而设计的,它是您在停机期间使用的系统,允许您快速诊断问题。每台Prometheus 服务器都是独立的,不依赖于网络存储或其他远程服务。当您的基础设施的其他部分被破坏时,您可以依赖它,并且您不需要设置广泛的基础设施来使用它。
Prometheus 不适合做什么
Prometheus 的值是很可靠的。您总是可以查看有关系统的统计信息,即使在出现故障的情况下也是如此。如果您需要100%的准确性,例如按请求计费,Prometheus不是一个好的选择,因为收集的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析用于计费的数据,并使用 Prometheus 来完成剩下的监视工作。
并且 Prometheus 并不适合监控字符串类的监控指标。
关于日志类的监控,请使用其他日志系统,比如 Grafana 的 Loki ,可以在 Grafana 中进行展示。Loki 目前还在测试阶段,可以进行尝试,请在稳定后再用于生产系统。