日志服务数据加工最佳实践: 从其他logstore拉取数据做富化

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 本篇覆盖日志服务数据加工最佳实践: 从其他logstore拉取数据做富化的各种场景, 包括定期刷新拉取所有, 拉取部分数据, 拉取后再过滤数据, 调整返回表格结构等

概述

使用全局富化函数做富化时, 需要传递一个字典或者表格结构做富化. 参考构建字典与表格做数据富化的各种途径比较.
本篇介绍从使用资源函数res_log_logstore_pull从其他logstore拉取数据的做富化的详细实践.关于res_log_logstore_pull的参数说明, 参考这里. 该语法目前支持两种模式去logstore拉取数据,一种是拉取指定时间间隔内的logstore 的数据内容,另外一种是不设置结束时间,持续的拉取目标logstore内容

背景

这里我们有两个logstore,一个是存储个人信息的source_logstore,一个是酒店存储客人入住信息的target_logstore ,我们现在将酒店的入住信息拿来做富化。
注意: 这里采用pull_log接口拉取数据, 富化的logstore并不依赖索引.

个人信息 source_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

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

基本语法

res_log_logstore_pull(
        endpoint,
        ak_id,
        ak_secret,
        project,
        logstore,
        fields,
        from_time=None,
        to_time=None,
        fetch_include_data=None,
        fetch_exclude_data=None,
        primary_keys=None,
        delete_data=None,
        refresh_interval_max=60,
        fetch_interval=2):

具体的参数说明请参考res_log_logstore_pull需要注意的地方是,res_log_logstore_pull 是一个单独的语法,只负责从目标logstore 拉取数据下来,本身自己并没有做任何富化的操作,所以请不要单独使用res_log_logstore_pull语法,结合e_table_map和e_search_table_map语句一起使用才是有意义的,本篇也会结合e_table_map和e_search_map_table的使用给出一些例子进行演示。

场景1: 获取指定时间内所有的数据

注意: 这里的时间是日志获取时间.

DSL编排语法

res_log_logstore_pull(..., ["cid","name","room_number"],from_time=1567038284,to_time=1567038500)

获取到的数据

#这里我们的语法中 field 填入了 cid,name,room_number 三个字段,,并且指定了时间范围,将会获取这个时间范围内的logstore的所有数据的这三个字段的值

cid:12345
name:maki
room_number:1111

cid:12346
name:vicky
room_number:2222

cid:12347
name:mary
room_number:3333

cid:12345
name:maki
room_number:1111

场景2: 设置黑白名单参数来过滤拉取的数据

1.DSL 编排语法(只设置白名单)

# 设置白名单,只有 room_number 值等于 1111的的数据会被拉去下来
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_include_data="room_number:1111")

获取到的数据

# 设置了 ferch_include_data 白名单,只有包含 room_numver:1111的数据会被拉去下来,其他数据不会被拉取。

status: check in
cid:12345
name:maki
room_number:1111

status:leave
cid:12345
name:maki
room_number:1111

2.DSL 编排语法(只设置黑名单)

res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="room_number:1111")

获取到的数据

# 设置黑名单 fetch_exclude_data 当数据包含 room_number:1111的时候丢弃这条数据。
status:check in
cid:12346
name:vicky
room_number:2222


status:check in
cid:12347
name:mary
room_number:3333

3.DSL编排语法(同时设置黑白名单)

res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="status:leave",fetch_include_data="status:check in")

获取到的数据

# 黑白名单同时存在的情况下,优先进行黑名单数据的匹配,这里我们填入的是 status:leave的值,当数据包含status:leave的值时候,数据会被直接丢弃,而后匹配白名单,白名单我们填入的是 status:check in 当数据包含 status: check in 的值时候,该数据才会被拉取下来.
status:check in
cid:12345
name:maki
room_number:1111


status:check in
cid:12346
name:vicky
room_number:2222


status:check in
cid:12347
name:mary
room_number:3333

场景3: 开通持续拉取目标logstore 数据

DSL编排语法

如果目标logstore 的数据是持续写入,我们需要持续的去拉取时候,设置 to_time 参数为None 就可以,同时可以设置fetch_interval 设置拉取的时间间隔,和refresh_interval_max 当拉取遇到错误的时候退火重试的最大时间间隔

res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=None,fetch_interval=15,refresh_interval_max=60)
# 需要注意的是,在持续拉取的过程中,如果遇到错误,服务器会一直退火重试,直到成功为止,不会停止数据加工进程。

场景4: 开启主键维护拉取的目标logstore数据(暂时不推荐)

注意事项

目前该功能仅限使用所有数据存储在logstore的同一个shard中,所以暂时不推荐使用该功能。

背景

以我们的个人信息logstore 和 酒店信息logstore的数据进行举例,因为logstore和数据库不同,logstore中的数据只能写入,无法删除,所以有的时候我们希望匹配的时候将已经删除的数据不要进行匹配,这时候就需要开启主键维护功能。

需求演示

现在我们想拉取酒店信息logstore中,所有入住还没有离开的客人信息,当status=leave的时候,表示客人已经离开酒店,所以不需要将该信息进行拉取。

DSL编排语法

res_log_logstore_pull(..., ["cid","name","room_number","status","time"],from_time=1567038284,to_time=None,primary_keys="cid",delete_data="status:leave")

得到的数据

## 可以看到 name为maki 的客人的最后更新status为leave ,已经离开酒店,所以并没有将 maki的数据拉取下来,
time:1567038284
status:check in
cid:12346
name:vicky
room_number:2222

time:1567038500
status:check in
cid:12347
name:mary
room_number:3333

注意

需要注意的是 primary_keys 目前只支持设置单字符串,这个需要设置logstore数据中 值为唯一的字段,比如样例中的cid , 类似数据库的唯一主键,并且当设置primary_keys的时候,delete_data 也必须不为 None,这样才有意义。

进一步参考

欢迎扫码加入官方钉钉群获得实时更新与阿里云工程师的及时直接的支持:
image

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
我使用flinkcdc的sql形式进行全量同步,4张表,有两张表数据没进去,看日志,id怎么是null呢?
我使用flinkcdc的sql形式进行全量同步,4张表,有两张表数据没进去,看日志,id怎么是null呢?
117 40
|
5天前
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断2
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
10 0
|
6天前
|
机器学习/深度学习 前端开发 数据挖掘
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
37 0
|
2月前
|
JSON 监控 Java
Java Web开发中的异常处理与日志记录最佳实践
Java Web开发中的异常处理与日志记录最佳实践
|
21天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
75 1
|
22天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
77 1
|
26天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
49 0
|
1月前
|
存储 数据库
ALTER MATERIALIZED VIEW LOG :语句来更改现有物化视图日志的存储特征或类型。
`ALTER MATERIALIZED VIEW LOG` 语句用于修改已有的物化视图日志的存储属性或类型。配合示例中的动画图像(由于格式限制无法显示),该语句帮助优化数据库的性能和管理。
44 0
|
1天前
|
Java
log4j异常日志过滤规则配置
log4j异常日志过滤规则配置
7 0

相关产品

  • 日志服务