Prometheus是强大的开源监控工具,能够实现数据采集、数据加工、可视化展示以及告警推送一系列端到端的监控处理流程。本文简要介绍Prometheus的架构原理,以及从采集到展示到告警推送这一系列流程的实现。
1、Prometheus基本架构及原理Prometheus是一款开源的监控工具,它的基本实现原理是从exporter拉取数据,或者间接地通过网关gateway拉取数据(如果在k8s内部署,可以使用服务发现的方式),它默认本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中,采集到的数据有两个去向,一个是报警,另一个是可视化。以下是Prometheus最新版本的架构图:
Prometheus具有以下特点:提供多维度数据模型和灵活的查询语言:通过将监控指标关联多个Tag将监控数据进行任意维度的组合;提供HTTP查询接口;可以很方便的结合Grafana等组件展示数据。
支持服务器节点的本地存储:通过prometheus自带的时序数据库,可以完成每秒千万级的数据存储。同时在保存大量历史数据的场景中,prometheus还可以对接第三方时序数据库如OpenTSDB等。
定义了开放指标数据标准:支持pull和push两种方式的数据采集,以基于HTTP的Pull方式采集时序数据,只有实现了prometheus监控数据格式才可以被prometheus采集;以Push方式向中间网关推送时序数据,能更灵活地应对各种监控场景。
支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。prometheus目前已经支持Kubernetes、Consul等多种服务发现机制,可以减少运维人员的手动配置环节。
1.1 组件介绍从Prometheus的架构图中可以看到,Prometheus主要有四大组件PrometheusServer、Pushgateway、Exporters和Alertmanager,分别如下:
PrometheusServer:负责从Exporter拉取和存储监控数据,根据告警规则产生告警并发送给Alertmanager,并提供一套灵活的查询语言PromQL
Exporters/Jobs:Prometheus的数据采集组件,负责收集目标对象(host,container…)的性能数据,并通过HTTP接口提供给PrometheusServer。支持数据库、硬件、消息中间件、存储系统、