1、Prometheus架构图
如上图,Prometheus主要由以下部分组成:
Prometheus Server: 用于抓取和存储时间序列化数据
Exporters: 主动拉取数据的插件
Pushgateway: 被动拉取数据的插件
Altermanager: 告警发送模块
Prometheus web UI: 界面化,也包含结合Grafana进行数据展示或告警发送
组件详细介绍:
Prometheus Server: 用于收集和存储时间序列数据。
Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。
Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端
Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。
Grafana: 监控仪表盘
pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。
2、工作流程:
(1) Prometheus server可定期从活跃的(up)目标主机上(target)拉取监控指标数据,目标主机的监控数据可通过配置静态job或者服务发现的方式被prometheus server采集到,这种方式默认的pull方式拉取指标;也可通过pushgateway把采集的数据上报到prometheus server中;还可通过一些组件自带的exporter采集相应组件的数据;
(2) Prometheus server把采集到的监控指标数据保存到本地磁盘或者数据库;
(3) Prometheus采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的报警发送到alertmanager;
(4) Alertmanager通过配置报警接收方,发送报警到邮件,微信或者钉钉等;
(5) Prometheus 自带的web ui界面提供PromQL查询语言,可查询监控数据;
(6) Grafana可接入prometheus数据源,把监控数据以图形化形式展示出来。
3、Prometheus 客户端库主要提供四种主要的 metric 类型:
Counter: 一种累加的 metric,典型的应用如:请求的个数,结束的任务数, 出现的错误数等等。
例如:,查询 http_requests_total{method=“get”, job=“Prometheus”, handler=“query”} 返回 8,10 秒后,再次查询,则返回 14。
Gauge: 一种常规的 metric,典型的应用如:温度,运行的 goroutines 的个数。可以任意加减。
例如: go_goroutines{instance=“172.17.0.2”, job=“Prometheus”} 返回值 147,10 秒后返回 124。
Histogram: -可以理解为柱状图,典型的应用如:请求持续时间,响应大小。
4、Prometheus数据的特点:
(1)多维度数据模型;
时间序列数据由metrics名称和键值对来组成
可以对数据进行聚合,切割等操作
所有的metrics都可以设置任意的多维标签。
(2)灵活的查询语言(PromQL):可以对采集的metrics指标进行加法,乘法,连接等操作;
(3)可以直接在本地部署,不依赖其他分布式存储;
(4)通过基于HTTP的pull方式采集时序数据;
(5)可以通过中间网关pushgateway的方式把时间序列数据推送到prometheus server端;
(6)可通过服务发现或者静态配置来发现目标服务对象(targets)。
(7)有多种可视化图像界面,如Grafana等。
(8) 高效的存储,每个采样数据占3.5 bytes左右,300万的时间序列,30s间隔,保留60天,消耗磁盘大概200G。