普罗米修斯(Prometheus)介绍
Prometheus是一个时间序列数据库。但是,它不仅仅是一个时间序列数据库。
它涵盖了可以绑定的整个生态系统工具集及其功能。
Prometheus主要用于对基础设施的监控。包括服务器,数据库,VPS,几乎所有东西都可以通过Prometheus进行监控。Prometheus希望通过对Prometheus配置中定义的某些端点执行的HTTP调用来检索度量标准。
各个组件介绍
下面是对于里面主要的组件的介绍:
用于采集和存取时间序列数据的 Prometheus server
用于监测应用的客户端库 (client lib,在客户端这里,图中没有标出)
用于支持短期的作业(Short-lived jobs)的 push gateway(下面有Short-lived jobs和push gateway的定义)
诸如 HAProxy,StatsD,Graphite 等服务的专用 exporter (下面有他的定义)
用于处理告警的 alertmanager
PromQL是Prometheus内置了一个强大的数据查询语言。
Grafana是可视化的工具。
docker镜像是有Prometheus的,所以Prometheus能够在K8s上迅速的部署
Exporters/Jobs:Prometheus的数据采集组件,负责收集目标对象(host, container…)的性能数据,并通过HTTP接口提供给Prometheus Server。支持数据库、硬件、消息中间件、存储系统、http服务器、jmx等。
Short-lived jobs:瞬时任务的场景,无法通过pull方式拉取,需要使用push方式,与PushGateway搭配使用
PushGateway:应对部分push场景的组件可选组件,这部分监控数据先推送到Push Gateway上,然后再由Prometheus Server端拉取 。用于存在时间较短,可能在Prometheus来拉取之前就消失了的 jobs
怎么采集监控数据?
要采集目标(主机或服务)的监控数据,首先就要在被采集目标上安装采集组件,这种采集组件被称为Exporter。
这些exporter能为我们采集目标的监控数据,然后传输给普罗米修斯。这时候,exporter会暴露一个http接口,普罗米修斯通过HTTP协议使用Pull的方式周期性拉取相应的数据。
不过,普罗也提供了Push模式来进行数据传输,通过增加Push Gateway这个中间商实现,你可以将数据推送到Push Gateway,普罗再通过Pull的方式从Push Gateway获取数据。
这就是为什么你从架构图里能看到两个 Pull metrics 的原因,一个是采集器直接被Server拉取数据(pull);另一个是采集器主动Push数据到Push Gateway,Server再对Push Gateway主动拉取数据(pull)。
采集数据的主要流程如下:
-
Prometheus server 定期从静态配置的主机或服务发现的 targets 拉取数据(zookeeper,consul,DNS SRV Lookup等方式)
-
当新拉取的数据大于配置内存缓存区的时候,Prometheus会将数据持久化到磁盘,也可以远程持久化到云端。
-
Prometheus通过PromQL、API、Console和其他可视化组件如Grafana、Promdash展示数据。
-
Prometheus 可以配置rules,然后定时查询数据,当条件触发的时候,会将告警推送到配置的Alertmanager。
-
Alertmanager收到告警的时候,会根据配置,聚合,去重,降噪,最后发出警告。
普罗米修斯的主要特点是:
多维数据模型
一种灵活的查询语言,可利用此维度查询
不依赖分布式存储,单个服务器节点
时间序列收集采用HTTP上的Pull模型
通过PushGateway推送时间序列指标与联邦查询
通过服务发现或静态配置发现目标
图形和仪表板支持的多种模式
Docker、Kubernetes原生支持