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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储OSS,敏感数据保护2.0 200GB 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是触发短信报警。

目录
相关文章
|
5月前
|
SQL 机器学习/深度学习 数据挖掘
【Uber 面试真题】SQL :每个星期连续5星评价最多的司机
本文是【SQL周周练】系列的第一篇,作者“蒋点数分”分享了一道来自Uber面试的真题及其解法。题目要求找出每周连续获得5星好评最多的司机ID。文章详细解析了利用SQL窗口函数解决“连续”问题的思路,并通过Python和NumPy生成模拟数据,最终提供Hive SQL解答方案。后续还将涉及Streamlit应用、时间序列分析、AB实验设计等内容,欢迎关注。
156 16
|
SQL 存储 Unix
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
157 2
|
6月前
|
SQL XML Java
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
135 0
|
10月前
|
Prometheus Kubernetes 监控
告警规则设置方法
告警规则设置方法
316 3
|
10月前
|
SQL
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
151 1
|
11月前
|
SQL 存储 数据库
SQL部分字段编码设置技巧与方法
在SQL数据库管理中,设置字段的编码对于确保数据的正确存储和检索至关重要
|
Web App开发 存储 DataWorks
DataWorks产品使用合集之对实时同步任务设置告警时支持哪些告警接收方式
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
SQL JSON 关系型数据库
"SQL老司机大揭秘:如何在数据库中玩转数组、映射与JSON,解锁数据处理的无限可能,一场数据与技术的激情碰撞!"
【8月更文挑战第21天】SQL作为数据库语言,其能力不断进化,尤其是在处理复杂数据类型如数组、映射及JSON方面。例如,PostgreSQL自8.2版起支持数组类型,并提供`unnest()`和`array_agg()`等函数用于数组的操作。对于映射类型,虽然SQL标准未直接支持,但通过JSON数据类型间接实现了键值对的存储与查询。如在PostgreSQL中创建含JSONB类型的表,并使用`-&gt;&gt;`提取特定字段或`@&gt;`进行复杂条件筛选。掌握这些技巧对于高效管理现代数据至关重要,并预示着SQL在未来数据处理领域将持续扮演核心角色。
212 0
|
SQL 关系型数据库 MySQL
SQL自动启动设置指南:详细步骤与技巧
在数据库管理中,确保SQL服务能够自动启动对于保持数据服务的连续性和稳定性至关重要
|
SQL 存储 缓存
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
635 0