SLS【数据加工】实现数据汇总与分发

简介

【数据加工】是一个可托管、高可用、可扩展的数据处理服务,广泛适用于数据的规整、富化、分发、汇总、重建索引等场景。这里详细介绍如何通过数据加工实现数据的分发与汇总,从而实现统一存储管理或分类精细化查询分析,以及存储成本优化等目的。

分发与汇总

场景

数据分发

从源 logstore 中读取数据,进行加工后,根据给定条件分别输出到多个不同的目标 logstore 中。
SLS【数据加工】实现数据汇总与分发

数据汇总

将多个源 logstore 中读取数据,汇集到同一个目标 logstore 中。需要在每一个源 logstore 中配置一个数据加工任务。
SLS【数据加工】实现数据汇总与分发

跨账号数据流转

通过数据加工实现跨账号数据流转,主要涉及的问题是如何授权:RAM 账号授权、STS 角色授权。请参考另一篇文章 SLS【数据加工】授权配置

跨区域数据流转

跨区域数据流转支持直接走公网,也可以选择阿里云 DCDN。请参考 数据加工 - 跨Region传输功能介绍

相关算子

  1. e_output/e_coutput:输出事件,不再继续加工。e_coutput 会对数据进行拷贝
  2. e_keep/e_drop:指定条件,保留/丢弃事件
  3. e_search:事件检查,输入查询语句,比如 e_search("field=value")
  4. e_if/e_if_else/e_switch:流程控制

案例

我们的测试服务器部署在上海和北京,对应的访问日志采集到了上海区域的 project/logstore:test-app-sh/access-log,和北京区域的project/logstore:test-app-bj/access-log,数据保存时间是30天。访问日志样例如下:

{
  "__time__": 1607655081,
  "bytes_sent": "666",
  "host": "xxxx.com.cn",
  "hostname": "xxxx.ali.dm",
  "http_referer": "https,//xxxx.com.cn/",
  "http_user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
  "remote_addr": "10.0.0.0",
  "remote_user": "-",
  "request_method": "GET",
  "request_protocol": "HTTP/1.1",
  "request_time": "0.035",
  "request_trace_id": "xxxx-9092-7974215498-0-1596182547.188",
  "request_uri": "/xxx/type?id=203298390015668&name=yyyy",
  "status": "200",
  "time_local": "11/Dec/2020,10,51,21",
  "upstream_addr": "10.0.0.0,8080"
}

我们需要实现两个目标:

  1. 将北京区域的访问日志汇集到上海的 logstore,做统一存储和查询分析,需要标记日志的service区域“app-bj”
  2. 拆分出返回状态码 status 为4xx(客户端错误)和5xx(服务端错误)的访问日志,保存到独立的 logstore 中,保存时间分别为90天和180天,以保证能够长时间检索。

汇集北京的数据到上海 logstore

在北京的logstore:test-app-bj/access-log 配置数据加工,脚本为:

e_set("__service__", "app-bj")
e_output("logstore-sh")

保存配置为:
SLS【数据加工】实现数据汇总与分发

这里的“目标名称”与 e_output 所填的名称保持一致,project/logstore 选定为上海数据存储的logstore。
数据汇集后,在上海logstore可看到:
SLS【数据加工】实现数据汇总与分发

分发错误访问日志

在access-log中,可以看到status字段的统计信息如下图,可以看出我们的数据中,返回4xx和5xx的数据占比是很小的(这是模拟数据,实际线上业务会更小),也就是说只有很少一部分数据需要长期存储。所以,根据时间条目重要程度将其分发,并做差异化存储,除了可以做精细分析,还可以实现存储成本优化。
SLS【数据加工】实现数据汇总与分发

在上海的 logstore:test-app-bj/access-log 配置数据加工,脚本如下:

  1. 首先判断事件是否满足status>=500,如果满足则直接输出到目标access-5xx
  2. 否则继续往下执行,判断事件是否满足status>=400,如果满足则直接输出到目标access-4xx
  3. 如果都没有满足,则丢弃事件(不会输出到任何目标)
e_if(e_search("status>=500"), e_output("access-5xx"))
e_if(e_search("status>=400"), e_output("access-4xx"))
e_drop()

加工完成以后的数据如下图,在 logstore:access-5xx 里面,只保存返回状态码为5xx的访问日志。
SLS【数据加工】实现数据汇总与分发

后记

以上就是使用 SLS【数据加工】功能,实现数据的分发和汇集的详细步骤。如果您在使用 SLS 过程中有任何问题,请加入我们钉钉服务群,也欢迎关注 SLS 的微信技术公众号和B站视频号。

SLS【数据加工】实现数据汇总与分发

上一篇:jquery动画 -- 6.制作带鼠标和键盘引导功能的图片浏览器


下一篇:IDeaS针对酒店管理者推出理想定价功能