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

简介: 跨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


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
3月前
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
774 59
|
3月前
|
数据采集 运维 监控
不重启、不重写、不停机:SLS 软删除如何实现真正的“无感数据急救”?
SLS 全新推出的「软删除」功能,以接近索引查询的性能,解决了数据应急删除与脏数据治理的痛点。2 分钟掌握这一数据管理神器。
253 30
|
4月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
553 1
|
4月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
412 0
|
4月前
|
数据采集 运维 监控
|
6月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
736 4
|
7月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
834 54
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
370 9