Prometheus 介绍
Prometheus 是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。
Prometheus 特点
-
多维度数据模型
- 每一个时间序列数据都由metric度量指标名称和它的标签labels键值对集合唯一确定:这个metric度量指标名称指定监控目标系统的测量特征(如:http_requests_total- 接收http请求的总计数)。labels开启了Prometheus的多维数据模型:对于相同的度量名称,通过不同标签列表的结合, 会形成特定的度量维度实例。(例如:所有包含度量名称为/api/tracks的http请求,打上method=POST的标签,则形成了具体的http请求)。这个查询语言在这些度量和标签列表的基础上进行过滤和聚合。改变任何度量上的任何标签值,则会形成新的时间序列图。
-
灵活的查询语言(PromQL):可以对采集的metrics指标进行加法,乘法,连接等操作;
-
可以直接在本地部署,不依赖其他分布式存储;
-
通过基于HTTP的pull方式采集时序数据;
-
可以通过中间网关pushgateway的方式把时间序列数据推送到prometheus server端;
-
可通过服务发现或者静态配置来发现目标服务对象(targets)。
-
有多种可视化图像界面,如Grafana等。
-
高效的存储,每个采样数据占3.5 bytes左右,300万的时间序列,30s间隔,保留60天,消耗磁盘大概200G。
-
做高可用,可以对数据做异地备份,联邦集群,部署多套prometheus,pushgateway上报数据
Prometheus 组件介绍
- Prometheus Server: 用于收集和存储时间序列数据。
- Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。
- Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端,所有向promtheus server提供监控数据的程序都可以被称为exporter
- Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。
- Grafana:监控仪表盘,可视化监控数据
- pushgateway: 各个目标主机可上报数据到pushgateway,然后prometheus server统一从pushgateway拉取数据。
从上图可发现,Prometheus整个生态圈组成主要包括prometheus server,Exporter,pushgateway,alertmanager,grafana,Web ui界面,Prometheus server由三个部分组成,Retrieval,Storage,PromQL
- Retrieval负责在活跃的target主机上抓取监控指标数据
- Storage存储主要是把采集到的数据存储到磁盘中
- PromQL是Prometheus提供的查询语言模块。
Prometheus工作流程
-
Prometheus server可定期从活跃的(up)目标主机上(target)拉取监控指标数据,目标主机的监控数据可通过配置静态job或者服务发现的方式被prometheus server采集到,这种方式默认的pull方式拉取指标;也可通过pushgateway把采集的数据上报到prometheus server中;还可通过一些组件自带的exporter采集相应组件的数据;
-
Prometheus server把采集到的监控指标数据保存到本地磁盘或者数据库;
-
Prometheus采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的报警发送到alertmanager
-
Alertmanager通过配置报警接收方,发送报警到邮件,微信或者钉钉等
-
Prometheus 自带的web ui界面提供PromQL查询语言,可查询监控数据
-
Grafana可接入prometheus数据源,把监控数据以图形化形式展示出