SLS 基于维表的映射关系,将日志转发到不同的logstore

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: 通过简单场景介绍日志服务-数据加工通过oss维表映射去实现将日志转发到不同的logstore

背景介绍

什么是日志服务?

日志服务是针对日志类数据的一站式服,像Log、Metric这类数据我们可以提供大规模、低成本、实时的平台化服务。它的应用场景非常多,像一些监控、分析、诊断都可以通过日志服务去实现,无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能,提升运维、运营效率,建立DT时代海量日志处理能力

什么是数据加工?

数据加工是日志服务推出的一项功能,是面向日志进行实时的处理,实时性高且功能丰富。数据加工目前提供了两百多种DSL算子用作数据处理,我们可以在数据加工中根据需求做数据过滤、转换、复制、富化、分裂等操作。


场景介绍

  • 在我们使用数据加工时,若需要根据某种规则将日志分发到不同的logstore中,实现方式有以下两种:
  • 通过将转发规则写入到DSL中去实现
  • 维护一张维表,根据映射关系来实现(推荐)
  • 在此文章中将主要介绍基于维表的映射关系来实现日志分发至不同的logstore,比如我们要通过日志中不同的code值,将日志分发至维表所对应的logstore中,如下图所示

场景示例

根据日志中code值和维表映射将日志分发至不同的logstore

  • 准备一张维表,在这个示例中我们将拉取oss的csv文件
  • csv格式:

code,logstore

2xx,logstore_2xx

3xx,logstore_3xx

4xx,logstore_4xx

5xx,logstore_5xx

  • 原始日志:

host:www.xxx.mock.com

http_referer:www.xxx.mock.com

remote_user:2hdtk

request_method:GET

request_uri:/request/path-3/file-5

code:200



host:www.xxx.mock.com

http_referer:www.xxx.mock.com

remote_user:2hdtk

request_method:GET

request_uri:/request/path-3/file-5

code:301


host:www.xxx.mock.com

http_referer:www.xxx.mock.com

remote_user:2hdtk

request_method:GET

request_uri:/request/path-3/file-5

code:403



host:www.xxx.mock.com

http_referer:www.xxx.mock.com

remote_user:2hdtk

request_method:Get

request_uri:/request/path-3/file-5

code:500

  • 加工目标:
  • 将code值为2xx的日志分发到logstore_2xx中
  • 将code值为3xx的日志分发到logstore_3xx中
  • 将code值为4xx的日志分发到logstore_4xx中
  • 将code值为5xx的日志分发到logstore_5xx中
  • 实现DSL(基于维表映射):

#创建一个临时字段code_map 去和维表做映射 code:200->code_map:2xx  

e_set("code_map", str_join("",op_slice(v("code"),1), "xx"))

#通过res_oss_file拉取csv文本,tav_parse_csv将文本转换为维表,再通过e_table_map映射富化出目标logstore

#res_oss_file设置change_detect_interval,更新时会自动拉取,拉取间隔单位为s

e_table_map(

   tab_parse_csv(

       res_oss_file(

           "oss-cn-hangzhou.aliyuncs.com",

           "ak_id",

           "ak_key",

           "log-etl-staging",

           "code.csv",

           format="text",change_detect_interval=1000)),[("code_map","code")],"logstore")

#删除临时字段

e_drop_fields("code_map")

#输出日志

e_output(project="etl-test-zhy", logstore=v("logstore"))



为什么推荐使用维表映射而不是DSL内编写转发规则?

  • 基于DSL编写转发规则的实现:

#通过e_match正则匹配code值,分发至不同的logstore

e_switch(e_match("code", "2\d+"), e_output(project="etl-test-zhy", logstore="logstore_2xx"),

        e_match("code", "3\d+"), e_output(project="etl-test-zhy", logstore="logstore_3xx"),

        e_match("code", "4\d+"), e_output(project="etl-test-zhy", logstore="logstore_4xx"),

        e_match("code", "5\d+"), e_output(project="etl-test-zhy", logstore="logstore_5xx"))

  • 两种方案对比:



操作步骤

  • 选择需要加工的logstore, 进入数据加工页面



  • 编写DSL,在正确填写res_oss_file函数相关配置后可以通过高级预览查看加工结果




  • 预览加工结果





  • 保存加工任务,此处可以配置存储目标和加工范围等信息。

注:我们已经在e_output()函数中配置了输出的project和logstore,此处不需要再配置存储目标,但如果日志中存在无法匹配的日志,需要配置默认存储目标。如果配置的目标Project、Logstore不存在,您可以在此页面中将高级参数配置中的key设置为config.sls_output.failure_strategyvalue设置为{"drop_when_not_exists":"true"} 来跳过该日志,被跳过的日志会被丢弃,并且上报为warning级别的日志。如果不设置高级参数配置,数据加工任务将一直等待目标Project、Logstore被创建后再执行加工任务


如何将同一条日志分发到多个logstore中?

  • 我们可以这样维护一张维表,通过"#"来分割多个logstore

通过"#"来分割多个logstore

code,logstore

2xx,logstore_2xx#logstore_2#logstore_3

3xx,logstore_3xx#logstore_3

4xx,logstore_4xx#logstore_4#logstore5

5xx,logstore_5xx#logstore_5

  • 实现DSL:

这里由于目标logstore数量不固定,所以我们用到e_split通过"#"来分裂日志,同一条日志被分裂的个数由logstore的数量决定。

#创建一个临时字段code_map 去和维表做映射 code:200->code_map:2xx  

e_set("code_map", str_join("",op_slice(v("code"),1), "xx"))

#通过res_oss_file拉取csv文本,tav_parse_csv将文本转换为维表,再通过e_table_map映射富化出目标logstore

e_table_map(

   tab_parse_csv(

       res_oss_file(

           "oss-cn-hangzhou.aliyuncs.com",

           "ak_id",

           "ak_key",

           "log-etl-staging",

           "code.csv",

           format="text",change_detect_interval=1000)),[("code_map","code")],"logstore")

#删除临时字段

e_drop_fields("code_map")

#根据logstore分裂事件

e_split("logstore", sep='#')

#输出日志

e_output(project="etl-test-zhy", logstore=v("logstore"))

相关函数文档链接

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
5月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
629 54
|
11月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
2983 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
10月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
262 9
|
8月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
642 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
7月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
549 13
|
7月前
|
缓存 Java 编译器
|
8月前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
284 5
图解MySQL【日志】——Redo Log
|
9月前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
360 7
MySQL事务日志-Undo Log工作原理分析
|
7月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
857 0

热门文章

最新文章