prometheus
Prometheus:
在k8s集群中,采用metrics server方式监控核心指标,其他监控由普罗米修斯完成
go语言开发,cncf的毕业项目
可结合PushGateway、Altermanager、Grafana成完整的itg监控系统
所有被监控的指标数据叫target
负责时序型指标数据的采集存储、但数据分析、聚合、告警功能本身不具备,需要其他组件完成
基于http call。从配置文件中指定的网络端点上周期性获取指标数据(server端从监控端抓取数据)
访问方式:
http://2.2.2.10:9090 #默认ui
http://2.2.2.10:9090/metircs #采集的指标数据,'#'行是指标描述
学习文档:
官方:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
https://www.prometheus.wang/quickstart/
https://p8s.io/docs/promql/query/set/
https://prometheus.fuckcloudnative.io/di-yi-zhang-jie-shao/overview
特点:
- 键值对方式保存数据
- 时序数据库,TSDB(文件存储)
- 不依赖存储,数据可本地保存,远程保存
- 特有的查询语句,PromQL
- 数据收集用exporter
- 主动从server中拉取数据
时序数据:
在一段时间内通过重复测量而获得的观测值的集合
将这些观测绘制于图形之上,会有一个数据轴和时间轴
服务器指标、应用程序性能监控指标、网络数据等都是时序数据
架构:
- server: 主服务
- exporters 静态收集的目标服务数据,收集第三方应用
- discovery 动态发现服务,支持k8s的svc、consul、etc等
- alerting 报警,可连接邮件等
- pushgateway 数据收集代理服务
- data visualization adn export 数据可视化和导出
支持3种类型从目标上抓取指标数据:
- exporters:: 本身不支持pro数据,需要额外的客户端采集,转化成pro能识别的数据,当pro来抓取时响应它
- instrumentation: 测量数据,内嵌了pro兼容的指标数据
- pushgateway: 用于短期,开始时间不确定,结束时间不确定,所以只能主动发给gateway,pro来网关抓取
指标类型:
学习文档: https://prometheus.fuckcloudnative.io/di-er-zhang-gai-nian/metric_types
counter(计数器):
保存单调递增的数据,如网站访问次数等,不能为负值,也不能减少,但可重置为0
通常需要rate(速率)、topk(前n个最大值)、increase(max-min的值)、irate(精确速率)等函数来生成数据变化状况
rate(http_requests_total[2h]) #2小时内http请求总数的增长速率
topk(http_requests_total) #http请求总数排名前3的
irate(http_requests_total[2h]) #高灵敏度函数,计算指标的瞬时速率
gauge(仪表盘):
存储有着起伏特征的指标数据,如内存空闲大小
是计数器的超集,但存在指标数据丢失的可能性,可能随时间流逝,精准度越来越低
常用于求和、去平均值、最小、最大值等,结合predict_linear(线性回归预测)和delta函数
predict_lineat #预测四件序列v在t秒后的值,预测样本数据的变化趋势
delta #计算区间向量中每个时间序列元素的第一个值和最后一个值的差
delta(cpu_temp_celsius{host='web01.hj.com'}[2h]) 返回当前服务器上的cpu温度与2h前的温度差异
histogram(直方图):
在一段时间范围内对数据采样,可存储更多信息,保存样本值分部在每个bucket(包括自身配置)的数量、所有样本值之和、总的样本数量
对于这些数据,可用内置函数histogram_quantile操作:
计算样本平均值: 以值的总和/值的数量
计算样本分为值: 分位数有助于了解符合特点标准的数据个数
评估响应时间超过1秒的请求比例,超过20%就发警告可用于分析异常值引起的平均值过大的问题
一般横轴为指标维度的数据取值区间,纵轴为统计的频率或频数
统计时需要将值的范围进行分段,将所有值的整个可用范围分成一系列连续、相邻但不重叠的间隔。再统计每个间隔有多少值,如网站的响应时间,整个区间在1ms在20s,做划分:
1ms~10ms 1段
10ms~100ms 2段
100ms~1s 3段
...
取2h内,多少个请求是1段的,和是多少,占所有段的比例是多少
直方图指标类型:
每个类型的指标有一个基础指标名称(basename),有多个指标
名称_bucket{le='上边界'} #样本区间的最大区间
名称_bucket{le='+Inf'} #所有样本期间的最大区间
名称_sum #所有样本观测值的总和
名称_count #总的观测次数
summary(摘要):
historagam的扩展类型,直接由被检测端自行聚合计算出分位数,并将计算结果响应给pro。计算过程由监控端完成
不支持sum或avg一类的聚合运算,而且分位数由客户端计算并生成,Server端无法获取客户端未定义的分位数
相关名词概念:
Job:
类似于组的概念,一组mysql监控叫做job
Instance(实例):
可以接收pro数据和scrape操作的每个网络端点的叫实例
具有类似功能的Instance集合叫一个job
target:
被监控的指标
prosql:
pro内置的数据查询语言
Scalar(标量) - 一个浮点型的数据值
即时向量:
指定job的指定时间戳的指标数据
区间向量:
指定时间范围内的所有时间戳上的数据指标
alters:
报警插件
pro仅负责生成告警指示,而后面的行为由另外的独立程序AlterManager负责:
告警由pro基于用户提供的告警规则周期性计算生成
AlterManager接收到pro发来的告警指示后。基于用户定义的告警路由(route)向告警接收人(recevier)发送报警
时间序列:
按时间记录数据样本
以特定周期性采集,并不会同一秒同时发起采集,会错开采集,所以会生成一个离散的样本数据序列
该序列成为向量(Vector),将多个序列放在同一个坐标系内(时间为横轴,序列为纵轴),形成一个有数据点组成的矩阵。默认存一个月
以时间纵轴取一个时间区间叫即时向量
以数据序列横轴取一个数据区间叫范围向量