概述
什么是 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 则用于您其余的监控。