Prometheus 专注于现在正在发生的事情,而不是追踪数周或数月前的数据。它基于这样一个前提,即大多数监控查询和警报都是从最近的(通常是一天内的)数据中生成的。
Prometheus 通过抓取或拉取应用程序中暴露的时间序列数据来工作。时间序列数据通常由应用程序本身通过客户端库或称为 exporter(导出器)的代理来作为 HTTP 端点暴露。Prometheus 还有一个推送网关(push gateway),可用于接收少量数据——例如,来自无法拉取的目标数据(如临时作业或者防火墙后面的目标)。
Prometheus 架构
Prometheus 称其可以抓取的指标来源为端点(endpoint)。端点通常对应单个进程、主机、服务或应用程序。为了抓取端点数据,Prometheus 定义了名为目标(target)的配置。生成的时间序列数据将被收集并存储在 Prometheus 服务器本地,也可以设置从服务器发送数据到外部存储器或其他时间序列数据库。
Prometheus 服务器没有内置警报工具,而是将警报从 Prometheus 服务器推送到名为 Alertmanager(警报管理器)的单独服务器。Alertmanager 可以管理、整合和分发各种警报到不同目的地——例如,它可以在发出警报时发送电子邮件,并能够防止重复发送。
冗余和高可用性侧重弹性而非数据持久性。Prometheus 团队建议将 Prometheus 服务器部署到特定环境和团队,而不是仅部署一个单体 Prometheus 服务器。如果你确实要部署高可用 HA 模式,则可以使用两个或多个配置相同的 Prometheus 服务器来收集时间序列数据,并且所有生成的警报都由可消除重复警报的高可用 Alertmanager 集群来处理。
Prometheus 冗余架构
标签共有两大类:插桩标签(instrumentation label)和目标标签(targetlabel)。插桩标签来自被监控的资源——例如,对于与 HTTP 相关的时间序列,标签可能会显示所使用的特定 HTTP 动词。这些标签在由诸如客户端或 exporter 抓取之前会被添加到时间序列中。目标标签更多地与架构相关——它们可能会识别时间序列所在的数据中心。目标标签由 Prometheus 在抓取期间和之后添加。
时间序列的真实值是采样(sample)的结果,它包括两部分:一个 float64 类型的数值和一个毫秒精度的时间戳。
Prometheus 及其组件不提供任何服务器端的身份验证、授权或加密。如果你在一个更加安全的环境中工作,则需要自己实施安全控制——例如,通过反向代理访问 Prometheus 服务器或者正向代理 exporter。
Prometheus 官网:https://prometheus.io/。