关于sql:基于-Scheduled-SQL-对-VPC-FlowLog-实现细粒度时间窗口分析

33次阅读

共计 2388 个字符,预计需要花费 6 分钟才能阅读完成。

简介:针对 VPC FlowLog 的五元组和捕捉窗口信息,在剖析时应用不同工夫窗口精度,可能失去不一样的流量特色,本文介绍一种办法将原始采集日志的工夫窗口做拆分,之后重新聚合为新的日志做剖析,达到更细粒度的剖析成果。

背景

阿里云专有网络(VPC)提供流日志性能,反对 VPC 网络中弹性网卡流量、VPC 流量及交换机流量的记录与存储。对流日志剖析能够监控访问控制规定、监控网络流量和排查网络故障。

流日志性能捕捉的流量信息以日志形式写入 SLS(阿里云日志服务)中。每条日志会捕捉特定捕捉窗口中的特定五元组网络流,捕捉窗口大概为 10 分钟,该段时间内流日志性能先聚合数据,再公布日志。

在 SLS 上能够通过关键词搜寻对指定指标地址被回绝的申请:

也能够通过 SLS 的 SQL 进行统计分析,但这里波及一个捕捉窗口的问题,例如上面两条流日志(字段做了简化):

Log#1
start: 2021-05-31 00:00:00 
end: 2021-05-31 00:08:30
bytes: 9000
packets: 18
Log#2
start: 2021-05-31 00:02:30 
end: 2021-05-31 00:03:15
bytes: 5000
packets: 10

采集窗口内产生的 bytes,落到 start 工夫点下来或是均匀落到整个采集窗口,对于流量剖析后果会产生显著的差别:

依据不同的业务背景,能够有不同的抉择:

一种办法是按采集窗口开始工夫计算,办法简略,select from_unixtime(start – start % 60) as dt, sum(bytes) as total_bytes group by dt order by dt asc limit 1000。

另一种较为简单,拆分采集窗口后计算,本文介绍基于 SLS SQL 拆分日志后重新聚合的剖析实际。

计划

如下是一条 start 与 end 相差 501 的日志,示意采集窗口横跨了 502 个秒级时间段(start、end 是左闭右闭区间):

利用数据函数 sequence 能够生成一个工夫序列到 ta 字段:

接着将 ta 序列做 unest 开展,失去 502 条日志:

到这里,基本思路就有了。但肯定请留神:

  1. packets、bytes 字段是在一个捕捉窗口中取得的,所以开展后的每条日志,应该将指标值均分到每个拆分后的时间段。
  2. 窗口数据开展后,意味着日志量会收缩,可能产生很大的计算压力与存储老本,倡议缩小聚合指标分组数目。
    为了缩小日志条数,咱们将拆分后的秒级日志再依照 10 秒级粒度重新聚合,502 条秒级日志变为 51 条十秒级日志:

Scheduled SQL 实际

将以上计划常驻执行,就能够实现对于新日志的增量解决,如果将预处理后果保留到 Logstore,咱们就能够在新的 Logstore 上做剖析,能够做到更低的提早。

Scheduled SQL 是一项由 SLS 全托管的性能,次要的场景包含:

• 定时剖析数据:依据业务需要设置 SQL 语句或查问剖析语句,定时执行数据分析,并将剖析后果存储到指标库中。
• 全局聚合:对全量、细粒度的数据进行聚合存储,汇总为存储大小、精度适宜的数据,相当于肯定水平的有损压缩数据。

执行如下 SQL 预览并确认后果合乎预期(如果心愿预处理后的数据量更少一些,能够依照分钟粒度做聚合,将 10 替换为 60),SQL 代码:

* | select (t.time - t.time % 10) as __time__, srcaddr, srcport, dstaddr, dstport, action, protocol,
    sum(bytes * 1.0 / ("end"-start + 1)) as bytes, sum(packets * 1.0 / ("end"-start + 1)) as packets
    from (select start, "end", srcaddr, srcport, dstaddr, dstport, action, protocol, bytes, packets,
    sequence(start, "end", 1) as ta from log), unnest(ta) as t(time)
    group by time, srcaddr, srcport, dstaddr, dstport, action, protocol order by __time__ asc limit 1000000

紧接着创立 Scheduled SQL 作业:

保留作业,抉择”增强型资源池“(免费、但资源可扩大,实用于有 SLA 要求的业务场景),设置存储预处理后果到指标 Logstore aligned_vpc_flowlog。

接下来,设置 SQL 作业从 5/28 日的数据开始解决,在存量数据追上进度后,新数据每 5 分钟执行一次,每次查问 5 分钟的数据做解决。

留神提早执行参数,如果上游 Logstore 的数据到来可能提早,倡议设置大一些的值来保障计算数据的完整性。

Scheduled SQL 作业每 5 分钟一次的实例,能够在管制台上查看到。对于 SQL 执行失败(权限、SQL 语法等起因)或者数据早退导致空跑状况,能够对指定实例做重试运行。

成果

在 SLS 上制作一个仪表盘比照两种计算形式的流量特色。

• 10 秒聚合 - 原始窗口

  • | select from_unixtime(start – start % 10) as dt, sum(packets) as packets, round(sum(bytes)/1024.0/1024.0, 3) as MB group by dt order by dt asc limit 10000

• 10 秒聚合 - 拆分窗口数据

  • | select from_unixtime(__time__ – time % 10) as dt, sum(packets) as packetes, round(sum(bytes)/1024.0/1024.0, 3) as MB group by dt order by dt asc limit 10000

通过比照能够看到,拆分窗口后的数据统计更加平均。

原文链接
本文为阿里云原创内容,未经容许不得转载。

正文完
 0