SLS数据加工实现跨Logstore维表富化

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 跨Logstore维表富化指的是数据加工中通过资源函数(res_log_logstore_pull)从另一个Logstore中获取数据,并对获取到的数据进行富化,精准的过滤出预期数据,便于直观的得到预期信息。

阿里云日志服务介绍

日志服务(Log Service,简称SLS)是云原生观测与分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务。日志服务一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能,全面提升您在研发、运维、运营、安全等场景的数字化能力。

数据加工服务是阿里云SLS推出的面向日志ETL处理的服务,主要解决数据加工过程中转换、过滤、分发、富化等场景。


什么是跨Logstore维表富化

跨Logstore维表富化指的是数据加工中通过资源函数(res_log_logstore_pull)从另一个Logstore中获取数据,并对获取到的数据进行富化,精准的过滤出预期数据,便于直观的得到预期信息。如某酒店将客人个人信息存储在ALogstore中,将客人入住信息存储在BLogstore中,现在酒店希望从BLogstore中获取部分字段数据,与ALogstore中的数据拼接。针对该需求,日志服务提供res_log_logstore_pull函数从ALogstore中获取数据,提供e_table_map函数或e_search_table_map函数实现数据富化,快速获取到客人信息。

下文将详细介绍如何通过资源函数(res_log_logstore_pull)从其他Logstore中获取数据,并进行数据富化。

函数简介

函数格式

res_log_logstore_pull(

   endpoint,

   ak_id,

   ak_secret,

   project,

   logstore,

   fields,

   from_time="begin",

   to_time=None,

   fetch_include_data=None,

   fetch_exclude_data=None,

   primary_keys=None,

   fetch_interval=2,

   delete_data=None,

   base_retry_back_off=1,

   max_retry_back_off=60,

   ttl=None,

   role_arn=None,

)

参数说明

名称

类型

是否必填

说明

endpoint

String

访问域名。更多信息,请参见服务入口。默认为HTTPS格式,也支持HTTP格式。特殊情况下,需使用非80、非443端口。

ak_id

String

阿里云账号的AccessKey ID。为了数据安全,建议在高级参数配置中配置。关于如何配置高级参数,请参见创建数据加工作业

ak_secret

String

阿里云账号的AccessKey Secret。为了数据安全,建议在高级参数配置中配置。关于如何配置高级参数,请参见创建数据加工作业

project

String

待拉取数据的Project名称。

logstore

String

待拉取数据的Logstore名称。

fields

String List

字符串列表或者字符串别名列表。日志中不包含某个字段时,该字段的值为空。例如需要将["user_id", "province", "city", "name", "age"]name改名为user_name时,可以配置为["user_id", "province", "city", ("name", "user_name"), ("nickname", "nick_name"), "age"]

from_time

String

首次开始拉取日志的服务器时间,默认值为begin,表示会从第一条数据开始拉取。支持如下时间格式:

  • Unix时间戳。
  • 时间字符串。
  • 特定字符串,例如beginend
  • 表达式:dt_类函数返回的时间。例如dt_totimestamp(dt_truncate(dt_today(tz="Asia/Shanghai"), day=op_neg(-1))),表示昨天拉取日志的开始时间,如果当前时间是2019-5-5 10:10:10 8:00,则上述表达式表示时间2019-5-4 10:10:10 8:00。

to_time

String

首次结束读取日志的服务器时间。默认值为None,表示当前的最后一条日志。支持如下时间格式:

  • Unix时间戳。
  • 时间字符串。
  • 特定字符串。例如beginend
  • 表达式:dt_类函数返回的时间。

不配置或者配置为None表示持续拉取最新的日志。

说明 如果填入的是一个未来时间,只会将该Logstore所有数据拉取完毕,并不会开启持续拉取任务。


fetch_include_data

String

配置字段白名单,满足fetch_include_data时保留数据,否则丢弃。

  • 不配置或配置为None时,表示关闭字段白名单功能。
  • 配置为具体的字段和字段值时,表示保留该字段和字段值所在的日志。

fetch_exclude_data

String

配置字段黑名单,满足fetch_exclude_data时丢弃数据,否则保留。

  • 不配置或配置为None时,表示关闭字段黑名单功能。
  • 配置为具体的字段和字段值时,表示丢弃该字段和字段值所在的日志。

说明 如果您同时设置了fetch_include_datafetch_exclude_data参数,则优先执行fetch_include_data参数,再执行fetch_exclude_data参数。

primary_keys

字符串列表

维护表格时的主键字段列表。如果fields参数中对主键字段进行修改,这里应使用修改后的字段名,将修改后的字段作为主键字段。

说明

  • primary_keys参数只支持单个字符串,且必须存在于fields参数配置的字段中。
  • 待拉取数据的目标Logstore中只能有一个Shard。

fetch_interval

Int

开启持续拉取任务时,每次拉取请求的时间间隔,默认值为2,单位:秒。该值必须大于或者等于1。

delete_data

String

对满足条件且配置了primary_keys的数据,在表格中进行删除操作。更多信息,请参见查询字符串语法

base_retry_back_off

Number

拉取数据失败后重新拉取的时间间隔,默认值为1,单位:秒。

max_retry_back_off

Int

拉取数据失败后,重试请求的最大时间间隔,默认值为60,单位:秒。建议使用默认值。

ttl

Int

开启持续拉取任务时,拉取日志产生时间开始ttl时间内的日志,单位为秒。默认值为None,表示拉取全部时间的日志。

role_arn

String

阿里云账号的角色。为了数据安全,建议在高级参数配置中配置。关于如何配置高级参数,请参见创建数据加工作业

返回结果

返回多列表格。

场景应用

某酒店将客人个人信息存储在名为user_logstore的Logstore中,将客人入住信息存储在名为check-in_logstore的Logstore中,现在酒店希望从check-in_logstore中获取部分字段数据,与user_logstore中的数据拼接。此处通过res_log_logstore_pull函数从check-in_logstore中获取数据,使用e_table_map函数或e_search_table_map函数实现数据富化。

原始数据

  • 用于存储个人信息的Logstore(user_logstore)

topic:xxx

city:xxx

cid:12345

name:maki


topic:xxx

city:xxx

cid:12346

name:vicky


topic:xxx

city:xxx

cid:12347

name:mary

  • 用于存储入住信息的Logstore(check-in_logstore)

time:1567038284

status:check in

cid:12345

name:maki

room_number:1111


time:1567038284

status:check in

cid:12346

name:vicky

room_number:2222


time:1567038500

status:check in

cid:12347

name:mary

room_number:3333


time:1567038500

status:leave

cid:12345

name:maki

room_number:1111

场景一  使用e_table_map筛选cid字段相同的客户信息

通过两个Logstore中相同的cid字段进行匹配,设置起始时间("08-31 19:00:02 8:00"),只有cid字段的值完全相同,才能匹配成功。匹配成功后,返回Logstore(check-in_logstore)中的room_number字段和字段值,与Logstore(check-in_logstore)中的数据拼接,生成新的数据。

加工规则

e_table_map(

   res_log_logstore_pull(

       "cn-chengdu.log.aliyuncs.com",

       "LT***6F",

       "9D***R7",

       "test-gy-cd",

       "check-in_logstore",

       fields=["cid", "room_number"],

       from_time="08-31 19:00:02 8:00",

   ),

   "cid",

   "room_number",

)

加工结果

topic:xxx

city:xxx

cid:12345

name:maki

room_number:1111


topic:xxx

city:xxx

cid:12346

name:vicky

room_number:2222


topic:xxx

city:xxx

cid:12347

name:mary

room_number:3333


场景二 使用e_search_table_map筛选出cid字段相同的客户信息

使用e_search_table_map函数对Logstore(check-in_logstore)和Logstore(user_logstore)做搜索匹配,搜索Logstore(check-in_logstore)中cid字段,返回该数据中的room_number字段和字段值,与Logstore(user_logstore)中的数据拼接,生成新的数据。

加工规则

e_search_table_map(

   res_log_logstore_pull(

       "cn-chengdu.log.aliyuncs.com",

       "LT***6F",

       "9D***R7",

       "test-gy-cd",

       "check-in_logstore",

       fields=["cid", "room_number"],

       from_time="begin",

   ),

   "cid",

   "room_number",

)

加工结果

topic:xxx

city:xxx

cid:12345

name:maki

room_number:1111


topic:xxx

city:xxx

cid:12346

name:vicky

room_number:2222


topic:xxx

city:xxx

cid:12347

name:mary

room_number:3333

场景三 获取到房号为某值的客户信息

通过fetch_include_data设置白名单,获取指定字段的数据。例如fetch_include_data="room_number:1111"表示在获取数据过程中,获取room_number值为1111的数据,与Logstore(user_logstore)中的数据拼接,生成新的数据。

加工规则

e_table_map(

   res_log_logstore_pull(

       "cn-chengdu.log.aliyuncs.com",

       "LT***6F",

       "9D***R7",

       "test-gy-cd",

       "check-in_logstore",

       fields=["cid", "name", "room_number", "status"],

       fetch_include_data="room_number:1111",

   ),

   "cid",

   "room_number",

)

加工结果

topic:xxx

city:xxx

cid:12347

name:mary


topic:xxx

city:xxx

cid:12346

name:vicky


topic:xxx

city:xxx

cid:12345

name:maki

room_number:1111

场景四 过滤掉房号为固定值的客户信息

通过fetch_exclude_data设置黑名单,过滤指定字段的数据。例如fetch_exclude_data="room_number:1111"表示在获取数据过程中,丢弃room_number值为1111的数据,与Logstore(user_logstore)中的数据拼接,生成新的数据。

加工规则

e_table_map(

   res_log_logstore_pull(

       "cn-chengdu.log.aliyuncs.com",

       "LT***6F",

       "9D***R7",

       "test-gy-cd",

       "check-in_logstore",

       fields=["cid", "name", "room_number", "status"],

       fetch_exclude_data="room_number:1111",

   ),

   "cid",

   "room_number",

)

加工结果

topic:xxx

city:xxx

cid:12347

name:mary

room_number:3333


topic:xxx

city:xxx

cid:12346

name:vicky

room_number:2222


topic:xxx

city:xxx

cid:12345

name:maki


场景五 获取已经离开的客户信息

通过配置primary_keys数据和设置delete_data,过滤不需要进行加工的数据。例如在名为check-in_logstore的Logstore中,获取已经离开的客户的信息,如果获取到的数据中包含status:check in表示客人未离开,则开启主键维护功能不加工该数据,即通过delete_data="status:check in"来过滤不需要进行加工的数据

加工规则

e_table_map(

   res_log_logstore_pull(

       "cn-chengdu.log.aliyuncs.com",

       "LT***6F",

       "9D***R7",

       "test-gy-cd",

       "check-in_logstore",

       ["cid", "name", "room_number", "status", "time"],

       primary_keys="cid",

       delete_data="status:check in",

   ),

   "cid",

   ["room_number", "status"],

)

加工结果

cid:12347

city:xxx

name:mary

topic:xxx


cid:12346

city:xxx

name:vicky

topic:xxx


cid:12345

city:xxx

name:maki

topic:xxx

room_number:1111

status:leave

场景六 密钥未知时,使用slr服务角色授权,获取cid字段相同的客户信息

使用slr服务角色授权,通过两个Logstore中相同的cid字段进行匹配,只有cid字段的值完全相同,才能匹配成功。匹配成功后,返回Logstore(check-in_logstore)中的room_number字段和字段值,与Logstore(check-in_logstore)中的数据拼接,生成新的数据。

加工规则

e_table_map(

   res_log_logstore_pull(

       "cn-chengdu.log.aliyuncs.com",

       "",

       "",

       "test-gy-cd",

       "check-in_logstore",

       fields=["cid", "room_number"],

       from_time="08-31 19:00:02 8:00",

       role_arn="acs:ram::***:role/aliyunserviceroleforslsaudit",

   ),

   "cid",

   "room_number",

)

加工结果

cid:12347

city:xxx

name:mary

room_number:3333

topic:xxx


cid:12346

city:xxx

name:vicky

room_number:2222

topic:xxx


cid:12345

city:xxx

name:maki

room_number:1111

topic:xxx


场景七 密钥未知时,使用自定义角色授权,获取cid字段相同的客户信息

使用自定义(gy-new-role)角色授权,通过两个Logstore中相同的cid字段进行匹配,只有cid字段的值完全相同,才能匹配成功。匹配成功后,返回Logstore(check-in_logstore)中的room_number字段和字段值,与Logstore(check-in_logstore)中的数据拼接,生成新的数据。

加工规则

e_table_map(

   res_log_logstore_pull(

       "cn-chengdu.log.aliyuncs.com",

       "",

       "",

       "test-gy-cd",

       "check-in_logstore",

       fields=["cid", "room_number"],

       from_time="08-31 19:00:02 8:00",

       role_arn="acs:ram::***:role/gy-new-role",

   ),

   "cid",

   "room_number",

)

加工结果

cid:12347

city:xxx

name:mary

room_number:3333

topic:xxx


cid:12346

city:xxx

name:vicky

room_number:2222

topic:xxx


cid:12345

city:xxx

name:maki

room_number:1111

topic:xxx


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
8天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
113 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
8天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
1月前
|
数据采集 机器学习/深度学习 存储
使用 Python 清洗日志数据
使用 Python 清洗日志数据
35 2
|
2月前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
194 3
|
3月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
57 0
|
3月前
|
开发者 前端开发 编解码
Vaadin解锁移动适配新境界:一招制胜,让你的应用征服所有屏幕!
【8月更文挑战第31天】在移动互联网时代,跨平台应用开发备受青睐。作为一款基于Java的Web应用框架,Vaadin凭借其组件化设计和强大的服务器端渲染能力,助力开发者轻松构建多设备适应的Web应用。本文探讨Vaadin与移动设备的适配策略,包括响应式布局、CSS媒体查询、TouchKit插件及服务器端优化,帮助开发者打造美观且实用的移动端体验。通过这些工具和策略的应用,可有效应对屏幕尺寸、分辨率及操作系统的多样性挑战,满足广大移动用户的使用需求。
65 0
|
3月前
|
存储 运维 监控
Entity Framework Core 实现审计日志记录超棒!多种方法助你跟踪数据变化、监控操作,超实用!
【8月更文挑战第31天】在软件开发中,审计日志记录对于跟踪数据变化、监控用户操作及故障排查至关重要。Entity Framework Core (EF Core) 作为强大的对象关系映射框架,提供了多种实现审计日志记录的方法。例如,可以使用 EF Core 的拦截器在数据库操作前后执行自定义逻辑,记录操作类型、时间和执行用户等信息。此外,也可通过在实体类中添加审计属性(如 `CreatedBy`、`CreatedDate` 等),并在保存实体时更新这些属性来记录审计信息。这两种方法都能有效帮助我们追踪数据变更并满足合规性和安全性需求。
78 0
|
SQL 监控
日志服务数据加工最佳实践: 从RDS-MySQL拉取数据做富化
本篇覆盖日志服务数据加工最佳实践: 从RDS-MySQL拉取数据做富化的各种场景, 包括定期刷新拉取所有, 拉取部分数据, 拉取后再过滤数据, 调整返回表格结构等
1853 0
|
12天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
121 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
220 3