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是触发短信报警。

目录
相关文章
|
3月前
|
SQL 存储 Unix
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
Flink SQL 在快手实践问题之设置 Window Offset 以调整窗口划分如何解决
56 2
|
18天前
|
SQL
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
29 1
|
1月前
|
SQL 存储 数据库
SQL部分字段编码设置技巧与方法
在SQL数据库管理中,设置字段的编码对于确保数据的正确存储和检索至关重要
|
3月前
|
SQL 关系型数据库 MySQL
SQL自动启动设置指南:详细步骤与技巧
在数据库管理中,确保SQL服务能够自动启动对于保持数据服务的连续性和稳定性至关重要
|
3月前
|
SQL 存储 缓存
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
80 0
|
4月前
|
SQL 存储 安全
SQL装机设置深度解析:从规划到实施的全面指南
SQL装机设置是一个复杂而重要的过程,它直接影响到数据库系统的性能和安全性。通过充分的规划、仔细的实施以及持续的优化和维护,可以确保SQL数据库系统为企业或个人提供稳定、高效的数据存储和管理服务。希望本文能为您提供有益的指导和启示,帮助您在SQL装机设置的道路上走得更远、更稳。在未来的发展中,随着技术的不断进步和需求的不断变化,SQL装机设置也将继续演变和完善。因此,作为数据库管理员或相关技术人员,我们需要不断学习新知识、掌握新技能,以适应这一领域的快速发展。同时,我们还应关注最佳实践和行业标准的更新,以便将最新的技术和方法应用到实际工作中。通过不断学习和实践,我们可以更好地应对SQL装机设置
47 0
|
5月前
|
SQL 数据管理 关系型数据库
数据管理DMS产品使用合集之如何设置SQL执行的超时时间
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
47 1
|
5月前
|
SQL 分布式计算 前端开发
MaxCompute操作报错合集之SQL脚本设置参数set odps.mapred.reduce.tasks=18;没有生效,是为什么
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
161 5
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错之遇到设置之后报错:java.sql.BatchUpdateException: ORA-01461:,如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
存储 分布式计算 大数据
MaxCompute产品使用合集之在sql里调用自定义的udf时,设置一次同时处理的数据行数,是并行执行还是串行执行的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。