Prometheus介绍
# 什么是Prometheus
THEOREM
Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包。 自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。 现在,它是一个独立的开源项目,并且独立于任何公司进行维护。 为了强调这一点并阐明项目的治理结构,Prometheus于2016年加入了Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。
# 什么是指标
指标其实就是一个度量值,这个值因应用而异,可以是CPU、内存、也可以是是web服务中的请求数。这些值都会随着时间的变化而有所不同,下面是官方给出Prometheus生态架构图:
- Pushgateway: 类似代理模式,监控客户端把数据上传到Pushgateway应用,再由 Prometheus server 到 Pushgateway 集中 Pull 数据。
- Targets Discover:服务发现。
- PromQL: 指标查询语言,类似于MySQL的sql语句。
- Alertmanager: 根据配置规则以及指标分析,提供告警服务。
- Web UI :Prometheus提供的web界面,方便指标的查询。
笔记
上图我们一分为三进行分析
左边可以理解为Prometheus的数据采集模块,可以看到Prometheus主要是通过pull模式进行数据的指标的采集,这种方式指对的是被监控端主动暴露自身监控数据接口,或者使用特定能采集应用数据的 exporter进行监控指标数据的保存,当然对于如何发现监控端,Prometheus提供了比较丰富的采集目标发现机制,你可以手动配置,也可以使用基于配置文件的发现机制,或者基于 Kubernetes 的发现机制等等。
中间部分是Prometheus数据处理,Retrieval 负责定时去暴露监控指标的目标上抓取数据,Storage 负责将数据写入磁盘,promQL 暴露查询数据的 http server 能力。同时他也会根据告警规则,一旦达到阈值,那么就会向 Alertmanager 推送告警信息,然后由 Alertmanager 对接到外部平台,将应用异常信息推送给用户。
右边部分是Prometheus提供的数据查询,可以通过 Prometheus UI 访问 Prometheus server 能力。或者结合 Grafana,将 Prometheus 作为数据源接入,在 Grafana 自定义模版,以图表的方式展示应用指标的状态变化,以便于更加直观地观测应用的变化。
# 什么是时间序列数据
时间序列数据(TimeSeries Data):按照时间顺序记录系统、设备状态变化的数据被称为时序数据。应用场景很多,如:无人驾驶车辆中要记录信息、传统证券行业实时交易数据等等。
# 为什么要使用Prometheus
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。