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 设置自动备份数据库失败
|
18天前
|
SQL Java 数据库连接
JDBC的连接参数的设置导致rowid自动添加到sql
JDBC的连接参数的设置导致rowid自动添加到sql
20 1
|
10天前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错之遇到设置之后报错:java.sql.BatchUpdateException: ORA-01461:,如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
18天前
|
SQL 分布式计算 DataWorks
实时数仓 Hologres产品使用合集之查询分区表的生命周期(即之前设置的'auto_partitioning.num_retention'值)的SQL语句,可以使用什么查询
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
18天前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_32 体育馆的人流量
「SQL面试题库」 No_32 体育馆的人流量
|
18天前
|
Oracle Java 关系型数据库
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
35 0
|
18天前
|
SQL Java 关系型数据库
在IDEA中配置MySQL数据库连接以及在使用mybatis时设置sql语句的代码提示功能
在IDEA中配置MySQL数据库连接以及在使用mybatis时设置sql语句的代码提示功能
|
18天前
|
SQL 安全 数据库
SQL Server 2022 安装步骤——SQL Server设置身份验证教程
SQL Server 2022 安装步骤——SQL Server设置身份验证教程
267 0
|
8月前
|
SQL 关系型数据库 MySQL
可以使用SQL语句来声明变量、设置自变量以及根据计算结果赋值
可以使用SQL语句来声明变量、设置自变量以及根据计算结果赋值
66 3