概览
什么是 Prometheus?
Prometheus 是一个开源的系统监控和告警工具包,最初由 SoundCloud 创建。自 2012 年问世以来,许多公司和组织都采用了 Prometheus,该项目拥有非常活跃的开发者和用户社区。它现在是一个独立的开源项目,并由任何公司独立维护。为了强调这一点,并阐明项目的治理结构,Prometheus 于 2016 年加入了 云原生计算基金会 ,成为继 Kubernetes 之后的第二个托管项目。
Prometheus 将其指标作为时间序列数据收集和存储,即指标信息与记录时的时间戳以及可选的键值对(称为标签)一起存储。
有关 Prometheus 的更详细概览,请参阅媒体部分中链接的资源。
特性
Prometheus 的主要特性包括:
- 一个多维数据模型,时间序列数据由指标名称和键/值对标识
- PromQL,一种灵活的查询语言,以利用这种多维特性
- 不依赖分布式存储;单个服务器节点是自治的
- 通过 HTTP 的拉取模型进行时间序列收集
- 通过中间网关支持推送时间序列
- 通过服务发现或静态配置发现目标
- 支持多种图形和仪表盘模式
什么是指标?
通俗地说,指标是数值测量。时间序列指随时间记录的变化。用户希望测量的内容因应用程序而异。对于 Web 服务器,它可能是请求时间;对于数据库,它可能是活动连接数或活动查询数等等。
指标在理解应用程序为何以某种方式运行时扮演着重要角色。假设您正在运行一个 Web 应用程序,并发现它运行缓慢。要了解应用程序发生了什么,您需要一些信息。例如,当请求数量很高时,应用程序可能会变慢。如果您有请求计数指标,就可以确定原因并增加服务器数量以处理负载。
组件
Prometheus 生态系统由多个组件组成,其中许多是可选的:
- 主要的 Prometheus 服务器 ,用于抓取和存储时间序列数据
- 客户端库,用于仪表化应用程序代码
- 一个推送网关 ,用于支持短期作业
- 用于 HAProxy、StatsD、Graphite 等服务的专用导出器
- 一个Alertmanager ,用于处理告警
- 各种支持工具
大多数 Prometheus 组件都使用 Go 编写,这使得它们易于构建和部署为静态二进制文件。
架构
此图展示了 Prometheus 及其部分生态系统组件的架构:
Prometheus 从已仪表化的作业中抓取指标,可以直接抓取,也可以通过中间推送网关(用于短期作业)进行。它在本地存储所有抓取的样本,并对这些数据运行规则,以聚合并从现有数据中记录新的时间序列或生成告警。Grafana 或其他 API 消费者可用于可视化收集到的数据。
何时适用?
Prometheus 非常适合记录任何纯数字时间序列。它既适用于以机器为中心的监控,也适用于高度动态的服务导向型架构的监控。在微服务世界中,它对多维数据收集和查询的支持是一大优势。
Prometheus 旨在提供可靠性,使其成为您在系统中断期间快速诊断问题的首选系统。每个 Prometheus 服务器都是独立的,不依赖网络存储或其他远程服务。当基础设施的其他部分出现故障时,您可以依赖它,并且无需设置复杂的额外基础设施即可使用它。
何时不适用?
Prometheus 重视可靠性。即使在故障条件下,您也始终可以查看有关系统的可用统计数据。如果您需要 100% 的准确性,例如用于按请求计费,Prometheus 不是一个好的选择,因为收集到的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析用于计费的数据,而 Prometheus 则用于其他监控。