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 数据可视化和导出

2022815214044

支持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),将多个序列放在同一个坐标系内(时间为横轴,序列为纵轴),形成一个有数据点组成的矩阵。默认存一个月
以时间纵轴取一个时间区间叫即时向量
以数据序列横轴取一个数据区间叫范围向量

posted @ 2023-11-06 18:01  suyanhj  阅读(16)  评论(0编辑  收藏  举报