SQL老司机:流量骤增骤减,可以这样设置告警

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 面向用户的在线产品,例如游戏行业,需要实时的关注流量情况,如果流量突然降低,那么我们得立刻检查,是否是宕机了,或者进程异常,避免影响用户体验。那么怎么设置这样的告警呢?接下来通过日志服务来介绍。 完整的报警语句 先贴个完整的告警语句: * | select time,pvPerSec, lastPvPerSec, diff,diff >1.

面向用户的在线产品,例如游戏行业,需要实时的关注流量情况,如果流量突然降低,那么我们得立刻检查,是否是宕机了,或者进程异常,避免影响用户体验。那么怎么设置这样的告警呢?接下来通过日志服务来介绍。

完整的报警语句

先贴个完整的告警语句:

* |  select time,pvPerSec, lastPvPerSec, diff,diff >1.2 or diff < 0.8  from(

   select time,pvPerSec, lastPvPerSec, pvPerSec*1.0/lastPvPerSec as diff  from( 
        select  time , pvPerSec , lag(pvPerSec,1,pvPerSec) over() as lastPvPerSec  from(
             select   count( )/(max(__time__) - min(__time__)) as  pvPerSec  , from_unixtime(__time__ - __time__ % 300) as time from log group by time order by time limit 10000  ) 
             )
   )

查询结果:

image.png

整个告警,为了逻辑清晰,用了四层嵌套查询,下边逐步拆解:

1. 获取每5分钟的平均流量

select   count( )/(max(__time__) - min(__time__)) as  pvPerSec  , from_unixtime(__time__ - __time__ % 300) as time from log group by time order by time limit 10000  

image.png

在查询中,之所以要除以(max(__time__) - min(__time__),是为了保持每个窗口内的单位是一致的,因为我们在查询时,可能最后一个窗口,和第一个窗口,不是一个完整的5分钟。看一个样例:

image.png

从样例中可以看到,最后一个区间和其他差别非常大,完全没法比较。所以要除以区间内的时间范围,保持单位一致,都是每秒钟的请求数。

2. 利用窗口函数,把前一个区间的值,和当前区间的值,放到同一行

select  time , pvPerSec , lag(pvPerSec,1,pvPerSec) over() as lastPvPerSec 

lag() over() 表示获取前边第N行的值。lag(pvPerSec,1,pvPerSec)表示,获取pvPerSec这一列,前一行的值,如果前一行不存在,则那当前行作为结果。看个查询结果:

image.png

可以看到,lastPvPerSec是拿pvPerSec前一行的结果。

3. 求两个相邻窗口的比例

 select time,pvPerSec, lastPvPerSec, pvPerSec*1.0/lastPvPerSec as diff 

在求比例时,必须先乘以1.0,转化成整数。结果样例:

image.png

4. 判断是否满足报警条件

 select time,pvPerSec, lastPvPerSec, diff,diff >1.2 or diff < 0.8 

通过判断diff >1.2 or diff < 0.8 ,表示增加20%,或降低20%时,触发报警。 结果展示:

image.png

如果最后一列是true,则触发报警,可以在报警设置中,判断_col4 =true是触发短信报警。

目录
相关文章
|
SQL 分布式计算 算法
Hive关联时丢失数据问题和常用的Hive SQL参数设置
针对结果的发生,本文从以下方面分析原因及提供解决方案: - 右表没有匹配的数据 - 关联键数据类型不匹配 - 受count列null值影响 - Hive版本问题,在某些版本中,左连可能导致右表为null - 数据倾斜 并在文末附属了`Hive SQL常用参数设置`的说明。
Hive关联时丢失数据问题和常用的Hive SQL参数设置
|
SQL 安全 Go
SQL Server 2012 设置自动备份数据库失败
SQL Server 2012 设置自动备份数据库失败
SQL Server 2012 设置自动备份数据库失败
|
4月前
|
SQL Java 关系型数据库
在IDEA中配置MySQL数据库连接以及在使用mybatis时设置sql语句的代码提示功能
在IDEA中配置MySQL数据库连接以及在使用mybatis时设置sql语句的代码提示功能
|
4月前
|
SQL 安全 数据库
SQL Server 2022 安装步骤——SQL Server设置身份验证教程
SQL Server 2022 安装步骤——SQL Server设置身份验证教程
182 0
|
6月前
|
SQL 关系型数据库 MySQL
可以使用SQL语句来声明变量、设置自变量以及根据计算结果赋值
可以使用SQL语句来声明变量、设置自变量以及根据计算结果赋值
51 3
|
8月前
|
SQL 消息中间件 关系型数据库
使用Flink SQL实现对连续的异常告警进行合并
使用Flink SQL实现对连续的异常告警进行合并
268 40
|
10月前
|
SQL Java
JPA原生sql中in的参数设置
JPA原生sql中in的参数设置
190 0
|
11月前
|
SQL Java 数据库连接
【Mybatis】Mybatis中特殊SQL的执行,模糊查询,批量删除,动态设置表名,添加功能获取自增的主键
【Mybatis】Mybatis中特殊SQL的执行,模糊查询,批量删除,动态设置表名,添加功能获取自增的主键
|
SQL 网络协议 程序员
【Sql Server】2019设置远程访问
本地电脑安装的ssms连接到服务器的ssms
1219 0
【Sql Server】2019设置远程访问
|
关系型数据库 MySQL
MySQL中sql_mode的设置
在升级MySQL版本到8.0的过程中,需要关注sql_mode参数默认值的变化,8.0版本sql_mode不支持 NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有 NO_AUTO_CREATE_USER
620 0