阿里云日志服务SLS 数据加工之多源分发详解

阿里云日志服务(SLS)的数据加工功能是一个可托管、高可用、可扩展的数据加工服务,广泛适用于数据的规整、富化、分发、汇总、重建索引等场景。使用自建的DSL编排语法,让用户可以通过短短几行代码实现数据清洗和再投递的功能。这篇文章我们主要来介绍下数据加工下的投递功能。
在这里插入图片描述

本文要点:

1.e_output/e_coutput语法详解。
2.不使用e_output/e_couput函数的最简单投递配置。
3.使用e_output/e_couput 函数进行多源分发实践。
4.如何将一个logstore中不同数据通过多源分发投递到不同logstore。

数据加工e_output 语法详解
首先我们可以根据官方文档来了解其参数作用 e_output。参数图示如下:
在这里插入图片描述

1.参数区别。
当我们使用e_output 函数的时候,需要在里面填入name, project, logstore 等参数,其中name参数对应的是右边保存数据加工时候需要填入的存储目标的名称。那么这时候有的小伙伴可能会有点蒙,既然在存储目标里面已经填入了project, logstore 的名称,为什么在e_output里面还有这两个参数,如果在e_output 里面填入的project,logstore参数和存储目标里面填入的 project,logstore 参数不一致,那么我的数据又会被发送到哪里? 那么我们从下面这个表格里去详细解释他们之间的区别:
在这里插入图片描述

用法 语法示例 说明
只填写name参数 e_output(name=“target”) 会发送数据到目标"target"中配置的logstore 中去。
同时填写name,project,logstore 参数 e_output(name=“target”,project=“test_project”,logstore=“test_logstore”) 数据会发送到"test_logstore"当中去,使用的ak 为目标"target"下配置的AK 信息。
不填写name 参数,只填project/logstore参数 e_output(project=“test_project”,logstore=“test_logstre”) 数据会发送到"test_logstore"当中去。使用的 AK 信息为当前登录账号的AK 信息。
2.如何配置默认目标。
要注意的是当我们使用e_output这个函数时候,需要在目标中配置一个默认目标,经过加工DSL层层处理,能够达到最后(没有在中间被丢弃)的行,默认的行为会写到第一个存储目标(不论目标的名称是什么)。
在这里插入图片描述

3.如何设置高级参数。
有些时候我们需要从加工的数据中动态的去获取分发目标,例如e_output(logstore=v(“name”)), 这个语法会动态的去取值进来,那么假如此时目标logstore 不存在,我们的数据加工任务就会在此停住,进行不断的重试,直到目标logstore 被创建出来为止。那么如何才能不让我们的加工任务继续进行加工呢? 这时可以通过配置高级参数来跳过不存在的目标Logstore: config.sls_output.failure_strategy: {“drop_when_not_exists”:”true”}
Note: 需要注意的是,当我们配置这个参数的时候,如果出现目标logstore 不存在的情况,这时候会将数据丢弃,所以请大家谨慎使用该参数。
在这里插入图片描述

4.e_output和e_coutput的区别
当数据加工语法执行到e_output语句的时候不会在执行后续的语法,而e_coutput 是可以继续执行后续的语句的。

案例实践
1.不使用e_output语法的 最基本简单分发
最基本的数据分发,我们不需要使用e_output 语法去进行动态的分发,只需要配置最基础的分发目标,加工后的数据就会被投递到目标logstore 当中去。我们来做一个最简单的分发,将日志设置一个新字段后投递到另外两个目标logstore。

在这里插入图片描述

小结: 以上我们就配置成功了最简单的数据加工任务,这里我们没有使用e_output/e_coutput语法一样可以达到多目标投递效果。

  1. 案例实践: 通过解析user-agent请求头并使用e_output函数进行多源分发
    现有某公司对一款游戏进行了广告投放,现在关于该游戏的所有API请求信息都存储在一个logstore当中,公司希望通过解析useragent请求头,将来自不同设备的请求进行归档分发存储(ios/android/windows), 并且对method方法进行数据分析。

需求分析
首先针对上述需求,需要使用ua_parse_os 函数首先对数据中的useragent 进行解析拿到该设备的os信息,后根据所得信息调用 e_output 函数进行动态分发。

原始数据样例
以下logstore 数据中,我们将会对 user_agent 字段的值进行解析,并对解析后的信息进行清洗和转发。
在这里插入图片描述

可以看出用户在IOS 端发送GET/POST请求的比例基本是7:3。

同样的分析语句,我们来看目标target3,用来存储Android数据的logstore中的GET/POST请求占比:
undefined
通过仪表盘可以看出,通过Android客户端进行的GET/POST请求基本上是6:4 ,证明在使用Android系统的用户中,该广告转化率较高。

3.使用e_split和e_output将logstore中不同字段分发到不同logstore中
背景:
​ 在使用数据加工多源分发的任务中,有的用户希望通过多源分发函数,将不同的字段输出到不同的目标logstore 当中去。这里我们用e_split函数结合 e_output函数来实现该需求。

需求图示:
在这里插入图片描述

日志样例:
在这里插入图片描述
语法解析:
1.我们首先设置了一个新字段 tag , 并且给予其 "t1,t2"的值,
2.接下来我们使用e_split()函数将数据按照 t1,t2 分裂成两份数据。
3.然后通过e_if 和 e_search 组合语法,针对t1, t2 两份数据做不同的加工和分发。

在这里插入图片描述

写在最后
​ 关于多源分发函数的使用,只是数据加工诸多函数中其中一个,目前数据加工提供的加工函数类型有100+,能够覆盖绝大多数数据加工的场景,其他的函数的使用还需要用户移步 阿里云日志服务数据加工函总览。数据加工目前经历了大量场景的锤炼,我们对用户提出的需求也在不断改进中,期望将来持续为用户提供更贴心的服务,更畅快的使用感受。

参考博客
https://developer.aliyun.com/article/768488?spm=a2c6h.12873581.0.0.18c1767dQr2Bjw
https://www.998.com/shtml/50/zh/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值