监控告警整理

一、系统可观测性三要素

1.1 系统指标(metric)

1.2 日志(log)

1.3 全链路(trace)

二、Prometheus基本认识

2.1 指标抓取

Push和Pull,其实就是两种指标抓取模型,其中Push(推送),Pull(拉取)。

1. Push

Push模型:被监控服务主动将指标推送到监控服务,可能需要对指标做协议适配,必须得符合监控要求的指标格式。

2. Pull

Pull模型:监控服务主动拉取被监控服务的指标,被监控服务一般通过主动暴露metric端口或者通过Exporter的方式暴露指标,监控服务依赖服务发现模块发现被监控服务,从而去定期的抓取指标。

2.2 指标存储和可视化查询

指标抓取后会存储在内置的时序数据库中,Prometheus也提供了PromQL查询语言给我们做指标的查询,我们可以在Prometheus的WebUI上通过PromQL,可视化查询我们的指标,也可以很方便的接入第三方的可视化工具,例如Grafana。

2.3 指标监控告警

Prometheus提供了alertmanager基于PromQL来做系统的监控告警,当PromQL查询出来的指标超过我们定义的阈值时,Prometheus会发送一条告警信息到alertmanager,manager会将告警下发到配置好的邮箱或微信。

2.4 Prometheus原理

Prometheus流程图

Prometheus原理解释
  1. Prometheus server定期从配置好的jobs或者exporters中拉取metrics,或者接受来自Pushgateway发过来的metric,或者从其他的Prometheus server中拉metrics。
  2. Prometheus server在本地存储收集到的metrics,并运行已定义好的alert.rules,记录新的时间序列或者向Alertmanager推送报警。
  3. Alertmanager根据配置文件,对接收到警报进行处理,发出告警。
  4. 在图形界面中,可视化采集数据。

三、Prometheus相关概念

3.1 数据模型

数据模型

Prometheus中存储的数据为时间序列,是由metric的名字和一序列的标签(键值对)唯一标识的,不同的标签则代表不同的时间序列。

  • metric名字:该名字应该具有语义,一般用于表示metirc的功能,例如:http_requests_total,表示http请求的总数。其中metric名字由ASCII字符,数字,下划线,以及冒号组成,且必须满足正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*
  • 标签:使同一个时间序列有了不同纬度的识别。例如http_requests_total{method=“Get”}表示所有http请求中的Get请求。当method="post"时,则为新的一个metric,标签中的键由ASCII字符,数字,以及下划线组成,且必须满足正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*。
  • 样本:实际的时间序列,每个序列包括一个float64的值和一个毫秒级的时间戳。
  • 格式:{=,…},例如:http_requests_total{method=“POST”,endpoint=“/api/tracks”}。

3.2 四种metric(指标)类型

  • Counter(基数器)
    一种累加的metric,典型的应用如:请求个数,结束的任务数,出现的错误数。counter数据只增不减,同时可以结合increase和rate等函数统计变化速率。
  • Gauge(仪表类型)
    一种常规的metric,典型的应用如:温度,内存占用,CPU利用率,GC次数等数据。和counter不同,Gauge是可增可减,可以反映一些动态变化的数据,在Prometheus上通过Gauge,可以不用经过内置函数直观的反映数据的变化情况。
  • Histogram(直方图类型)
    可以理解为柱状图,典型的应用如:请求持续时间,响应大小
    可以怼观察结果采样,分组和统计
  • Smmary(摘要类型)
    类似于Histogram,典型的应用如:请求持续时间,响应大小。
    提供观测值的count和sum功能
    提供百分位的功能,即可以按百分比划分跟踪结果

四、Prometheus PromQL使用(表达式)

PromQL(Prometheus Query Language)是Prometheus提供的函数式查询语言,可以查询实时数据和聚合时间序列的数据,在数据可视化和编写告警规则中使用。

4.1 瞬时查询

瞬间向量(Instant-Vector),一组时间序列,包含相同时间戳的单个样本,例如:http_requests_total

4.2 范围查询

区间向量(Range-Vector),一组时间序列,包含每个时间序列随时间变化的数据点范围,例如:http_requests_total[5m],在过去5分钟内指标名称为http_requests_total的所有时序

4.3 标量(Scalar)

Scalar(标量)通常为数值,可以将只有一个时序的Instance- Vector转换成Scalar。

4.4 String

简单字符串值

4.5 示例

1. 瞬时数据,即当前时刻的数据
mysql_slave_Seconds_Behind_Master

2. 区间数据,表示某一个时间范围内的数据,计量单位有以下这些:
ms:毫秒,s:秒,m:分,h:时,d:天,w:周,y:年
mysql_slave_Seconds_Behind_Master[1m]
查询从库延迟1分钟内的数据,采样周期是10s,可以看到1分钟内,每个指标有6个值

3. 条件匹配
匹配符:==,!==~,!~
其中=:是选择提供的字符串完全相同的数据,!=:选择不等于提供的字符串的数据
=~:选择与提供的字符串进行正则表达式匹配的数据,!~:选择与提供的字符串不匹配的数据

4. 算术运算
算术运算符有:+-*/%^,与数学里面的算术运算符含义一样,分别是:加,减,乘,除,取余,幂次方,**这里需要注意的是:算术运算符的两个指标,必须标签完全一样。**

5. 聚合运算
sum和counter
min、avg、max
topk:取前面几个较大值
bottomk:取后面几个较小值

6. 匹配运算
on:关联标签,将两个指标进行算术运算时,如果两个指标的标签不完全相同,可以匹配相同的标签进行计算
mysql_variables_innodb_buffer_pool_size/on(db,ident,service) mem_total

ignoring: 忽略标签,与on关联标签相反,如果两个指标的标签不完全相同,可以忽略不一样的标签进行计算

by:以某一个标签进行运算,通常结合sum聚合函数运算

without:舍弃某个标签进行计算,通常结合sum聚合函数运算

7. 函数
increase、rate和irate
increase:求增长值
rate和itrate区别:求增长率
rate会取指定时间范围内所有样本数据点,然后计算平均增长速率,可能容易陷入“长尾问题”,无法反映突出变化,比如机器在一个时间窗口内,可能出现CPU占用100%的情况,但通过计算在时间窗口内的平均增长率,数据就会被平均,就无法反映出该问题。
irate是通过在指定时间范围内“最后//近两个样本数据”来计算区间增长率。这种方式可以避免在时间窗口范围内的“长尾问题”,体现出更好的灵敏度,通过irate函数绘制出的图标/图形更好的反映样本数据的瞬时变化状态。
虽然rate和irate都会用于计算某个指标在一定时间间隔内的变化速率,irate适合快速变化的计数器(counter),而rate适合缓慢变化的计数器(counter)。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值