Prometheus简介:
Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes 的项目。
作为新一代的监控框架,Prometheus 具有以下特点:
- 由指标名称和和键/值对标签标识的时间序列数据组成的多维数据模型。
- 灵活强大的查询语言PromQL。
- 不依赖分布式存储;单个服务节点具有自治能力。
- 时间序列数据是服务端通过 HTTP 协议主动拉取(Pull)获得的。
- 也可以通过中间网关来推送(Push)时间序列数据。
- 可以通过静态配置文件(Prometheus.yml)或服务发现来获取监控目标。
Prometheus主要组件:
Prometheus系统有多个组件构成,并且其中部分组件是可选的。大部分Prometheus组件是由Go语言编写,所以使得这些组件很容易编译和部署。
- Prometheus Server:核心的服务器端,主要负责存储时间序列数据。
- Prometheus Client: 客户端,将需要被监控的服务生成对应的metrics,并暴露给Prometheus Server。
- Push Gateway:除了Pull方式,Prometheus还支持通过Push Gateway主动向服务端推送数据。该组件主要用于存在时间较短的任务,由于这类任务存在时间较短,可能当Prometheus来拉取(pull)之前,数据已经消失了,所以,这些任务可以直接向Prometheus Server主动端推送自己的metrics。这种方式主要用于服务层面的metrics,如果是机器层面的metrics,则需要用到exporter。
-
Exporter:类似Agent,安装在客户端上,用来监控数据,并向服务器端提供监控数据样本,常见的有:node_exporter用来收集硬件信息、mysqld_ exporter用于收集MySQL信息等等,可以根据自身需要选择不同的Exporter。更多Exporter可以在https://prometheus.io/docs/instrumenting/exporters/中查看
- Alertmanager:用来处理报警,将告警信息发送给用户。
Prometheus 架构图:
结合上面的架构图可以知道,Prometheus获取监控数据的流程一般是:Prometheus Server 从监控目标(Prometheus target)中或者间接通过推送网关(Pushgateway)来获取监控指标,在本地存储所有抓取到的样本数据,并对此数据执行一系列规则,来汇总和记录现有数据的新时间序列或生成告警。最终通过 Grafana 或者其他工具来实现监控数据的可视化。
Prometheus三种高可用(HA)方案介绍:
Prometheus的本地存储给Prometheus带来了简单高效的使用体验,可以让Promthues在单节点的情况下满足大部分用户的监控需求。但是本地存储也同时限制了Prometheus的可扩展性,带来了数据持久化等一系列的问题。通过Prometheus的Remote Storage(远程存储)特性可以解决这一系列问题,包括Promthues的动态扩展,以及历史数据的存储。
而除了数据持久化问题以外,影响Promthues性能表现的另外一个重要因素就是数据采集任务量,以及单台Promthues能够处理的时间序列数。因此当监控规模大到Promthues单台无法有效处理的情况下,可以选择利用Promthues的联邦集群的特性,将Promthues的监控任务划分到不同的实例当中。
下面介绍三种Prometheus常用的高可用方案:
1
2
3
由上面3种高可用方案可知:最完善的是第三种,即部署多套prometheus服务 + 远程存储+ 联邦集群的方案。但成本也最高,实际部署时需要根据自身情况灵活选择。