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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 阿里云日志服务(SLS)**的[数据加工](https://help.aliyun.com/document_detail/125384.html?spm=a2c4g.11186623.6.883.39dd5cb5EEa920)功能是一个可托管、高可用、可扩展的数据加工服务,广泛适用于数据的规整、富化、分发、汇总、重建索引等场景。使用自建的DSL编排语法,让用户可以通过短短几行代码实现数据清洗和再投递的功能。这篇文章我们主要来介绍下数据加工下的投递功能。

前言:

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

undefined

本文要点:

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

数据加工e_output 语法详解

首先我们可以根据官方文档来了解其参数作用 e_output。参数图示如下:
undefined

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层层处理,能够达到最后(没有在中间被丢弃)的行,默认的行为会写到第一个存储目标(不论目标的名称是什么)。
undefined

3.如何设置高级参数。

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

4.e_output和e_coutput的区别

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

案例实践

1.不使用e_output语法的 最基本简单分发

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

日志样例:
__time__ : 1591754815
__source__: 127.0.0.1
product: aliyun
product_2: ecs

加工语法:
e_set("new","new_name")

配置数据加工投递目标
undefined

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

2. 案例实践: 通过解析user-agent请求头并使用e_output函数进行多源分发

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

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

原始数据样例
以下logstore 数据中,我们将会对 user_agent 字段的值进行解析,并对解析后的信息进行清洗和转发。

__source__:127.0.0.1
__tag__:__receive_time__: 1589541467
ip:31.110.75.122
request_method: GET
user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0

数据加工语法与逻辑

# 使用ua_parse_os函数,解析user_agent字段,使用dct_get函数,拿到请求头中的os信息,并把值赋予新字段os。
e_set("os", dct_get(ua_parse_os(v("user_agent")),"family"))
# 根据os 字段的值,结合e_if 语法进行分发,根据解析出来不同值分发到不同logstore。
e_if(e_search("os==Windows"),e_output(name="target1"))
e_if(e_search("os=iOS"),e_output(name="target2"))
e_if(e_search("os==Android"),e_output(name="target3"))

保存数据加工任务:
undefined

通过上图我们可以看到数据经过清洗后分别发送到了配置的默认目标targe0 和其他三个用来分别存储windows请求,ios请求,Android请求的三个(target1,target2,target3)三个目标当中。我们先看发送到目标target2,用来存储IOS数据的logstore 中用户get/post两种请求占比:
这里我们在控制台输入sql 语句:
* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method
生成如下的仪表盘:
undefined

可以看出用户在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函数来实现该需求。

需求图示:
undefined

日志样例:

__time__ : 1591754815
__source__: 127.0.0.1
product: aliyun
product_2: ecs

DSL编排语法:

e_set("tag", "t1, t2")
e_split("tag")
e_if(e_search("tag==t1"),e_compose(e_keep_fields("__time__", "__source__","product", regex=False),e_output(name="t1")))
e_keep_fields("__time__","__source__","product_2", regex=False)
e_output(name="t2")

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

加工结果:

undefined

写在最后

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
28天前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
26天前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
14天前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
77 3
|
27天前
|
存储 监控 网络协议
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
|
18天前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
35 0
|
18天前
|
开发者 前端开发 编解码
Vaadin解锁移动适配新境界:一招制胜,让你的应用征服所有屏幕!
【8月更文挑战第31天】在移动互联网时代,跨平台应用开发备受青睐。作为一款基于Java的Web应用框架,Vaadin凭借其组件化设计和强大的服务器端渲染能力,助力开发者轻松构建多设备适应的Web应用。本文探讨Vaadin与移动设备的适配策略,包括响应式布局、CSS媒体查询、TouchKit插件及服务器端优化,帮助开发者打造美观且实用的移动端体验。通过这些工具和策略的应用,可有效应对屏幕尺寸、分辨率及操作系统的多样性挑战,满足广大移动用户的使用需求。
24 0
|
19天前
|
存储 运维 监控
Entity Framework Core 实现审计日志记录超棒!多种方法助你跟踪数据变化、监控操作,超实用!
【8月更文挑战第31天】在软件开发中,审计日志记录对于跟踪数据变化、监控用户操作及故障排查至关重要。Entity Framework Core (EF Core) 作为强大的对象关系映射框架,提供了多种实现审计日志记录的方法。例如,可以使用 EF Core 的拦截器在数据库操作前后执行自定义逻辑,记录操作类型、时间和执行用户等信息。此外,也可通过在实体类中添加审计属性(如 `CreatedBy`、`CreatedDate` 等),并在保存实体时更新这些属性来记录审计信息。这两种方法都能有效帮助我们追踪数据变更并满足合规性和安全性需求。
21 0
|
26天前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
19 0
|
2月前
|
监控 数据管理 关系型数据库
数据管理DMS使用问题之是否支持将操作日志导出至阿里云日志服务(SLS)
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
1月前
|
敏捷开发 前端开发 测试技术
阿里云云效产品使用合集之如何将云效构建执行过程中产生的日志通过邮件发送
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。

相关产品

  • 日志服务