Nuclio实战及源码分析:基于Kubernetes的Serverless FaaS平台
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.4 监控和告警系统——Prometheus

Prometheus是一个开源系统监控和告警工具包,最初在SoundCloud构建。自2012年发布以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发者和社区用户。它现在是一个独立的开源项目,独立于任何公司维护。为了强调这一点,并明确项目的开源价值,Prometheus于2016年加入云原生计算基金会,成为继Kubernetes之后的第二个托管项目。

Prometheus将其指标收集并存储为时间序列数据,即将指标信息与记录它的时间戳一起存储。

(1)Prometheus的优势

1)具有由度量指标和键-值对标识的时间序列数据多维数据模型。

2)具有一种强大的灵活查询语言PromQL。

3)不依赖分布式存储,单个服务器节点是自治的。

4)时间序列数据指标收集是通过HTTP从服务端拉取的。

5)通过中间网关支持推送时间序列监控数据。

6)通过服务发现或静态配置来获取监控目标。

7)支持多种类型图表和仪表盘。

(2)指标的含义

对普通大众来说度量是数字度量。时间序列意味着记录随着时间的推移变化。用户想要测量的内容因应用程序而异。对于Web服务器来说,它可能是请求时间;对于数据库来说,它可能是活动连接数或活动查询数等。

指标在理解为什么应用程序以某种方式工作方面起着重要作用。假设正在运行的一个Web应用程序很慢,就需要收集一些信息来了解应用程序发生了什么。例如,当请求数量很高时,应用程序可能会变慢。如果此时有请求计数指标,便可以方便地找出原因并通过增加服务器数量来处理负载。

(3)Prometheus生态系统

Prometheus生态系统由多个组件组成,其中许多是可选的。

1)最主要的是Prometheus Server服务器,用于抓取和存储时间序列数据。

2)用于检测应用程序代码的客户端程序库。

3)Push Gateway,支持数据推送。

4)监控特殊指标的Exporter服务,例如HAProxy、StatsD、Graphite等。

5)告警处理器alartmanager。

6)其他周边工具。

上述大多数Prometheus组件都是用Go语言编写的,这使得它们易于构建和部署为静态二进制文件。

图1-6所示为Prometheus的架构及其一些生态系统组件。

Prometheus从监控目标中直接或通过中间网关推送来抓取指标。它在本地存储所有抓取的指标数据,并对这些数据运行一系列规则过滤,以从现有数据聚合和记录新的时间序列或生成告警。对于监控后的数据可以通过Grafana或其他工具实现可视化。

(4)Prometheus的适用场景

Prometheus可以很好地记录任何纯文本时间序列。它既适合以机器为中心的监控,也适合监控面向服务的高度动态架构。在微服务世界中,它在多维数据收集和查询方面有特殊的优势。

图1-6 Prometheus的架构及其一些生态系统组件

Prometheus专为可靠性而设计,可以在断电期间快速诊断问题。每个Prometheus服务器都是相互独立的,不依赖于网络存储或其他远程服务。当基础设施的其他部分损坏时,可以使用它,因为它不需要消耗大量的基础资源。

(5)Prometheus的不适用场景

Prometheus重视可靠性,即使在故障情况下,也可以随时查看有关系统的可用统计信息。如果需要100%的准确性,例如按请求计费,那么Prometheus不是一个好的选择,因为收集的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析数据以进行计费,而使用Prometheus进行其余的监控。