日志服务数据加工最佳实践: 跨账号多目标logstore数据分发

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
对象存储 OSS,内容安全 1000次 1年
简介: 本篇介绍日志服务数据将: 跨账号多目标logstore数据分发最佳实践, 覆盖如何动态多目标灵活分发.

概述

数据分发主要包含两种方法:跨账号多目标Logstore的分发动态目标Logstore的分发, 其特点如下表. 需要时也可以合并两种方法.

注意 目前数据加工仅支持同Region下分发

方法 优点 缺点
配置多个目标Logstore 支持不同账号(AK)的目标Logstore 多个目标时, 配置与使用较为繁琐. 目标一般在代码中静态指定.
目前最多20个目标.
配置少量目标, 再代码中重置project, logstore参数 目标project, logstore可以在LOG DSL规则中动态获取与设置.
可以发送超过20个以上目标.
秘钥使用目标中的配置, 不能动态改. 因此最多跨20个账号.

场景1:跨账号多目标Logstore的分发

原始日志

"""
以下日志都存储在同一个logstore中,该logstore的默认逻辑名为target0
"""
"日志1"
http_host:  m1.abcd.com
http_status:  200
request_method:  GET
request_uri:  /pic/icon.jpg
scheme:  https

"日志2"
http_host:  m2.abcd.com
http_status:  301
request_method:  POST
request_uri:  /data/data.php
scheme:  http

"日志3"
http_host:  m3.abcd.com
http_status:  404
request_method:  GET
request_uri:  /category/abc/product_id
scheme:  https
  
"日志4"
http_host:  m4.abcd.com
http_status:  504
request_method:  GET
request_uri:  /data/index.html
scheme:  https

分发目标

  • http_status2XX的日志事件保留在源logstore target0中,并设置主题为success_event
  • http_status3XX的日志事件分发到logstore target1中,并设置主题为redirection_event
  • http_status4XX的日志事件分发到logstore target2中,并设置主题为unauthorized_event
  • http_status5XX的日志事件分发到logstore target3中,并设置主题为internal_server_error_event

LOG DSL编排

e_switch(e_match("status", r"2\d+"), e_set("__topic__", "success_event"),
               e_match("status", r"3\d+"), e_compose(e_set("__topic__", "redirection_event"), e_output("target1")),
               e_match("status", r"4\d+"), e_compose(e_set("__topic__", "unauthorized_event"), e_output("target2")),
               e_match("status", r"5\d+"), e_compose(e_set("__topic__", "internal_server_error_event`"), e_output("target3"))
    )

加工后的日志

"""
源logstore: target0
"""
__topic__:  success_event
http_host:  m1.abcd.com
http_status:  200
request_method:  GET
request_uri:  /pic/icon.jpg
scheme:  https

"""
目标logstore: target1
"""
__topic__:  redirection_event
http_host:  m2.abcd.com
http_status:  301
request_method:  POST
request_uri:  /data/data.php
scheme:  http

"""
目标logstore: target2
"""
__topic__: unauthorized_event
http_host:  m3.abcd.com
http_status:  404
request_method:  GET
request_uri:  /category/abc/product_id
scheme:  https
  
"""
目标logstore: target3
"""
__topic__: internal_server_error_event
http_host:  m4.abcd.com
http_status:  504
request_method:  GET
request_uri:  /data/index.html
scheme:  https
  • 不同Logstore的逻辑名(target0, target1等)可在LOG DSL规则配置项中的存储目标设置, 在这里可以通过AccessKey配置多账号下的Project和Logsotre.
    image
  • 调用e_output之后,对应事件会在源logstore被删除,如果输出之后仍然想在源Logstore中保留对应事件,可调用e_coutput

场景2:动态目标Logstore的分发

原始日志

'''
project1和project2属于同一账号
project1下有两个Logstore:logstore1, logstore2
project2中也有两个Logstore:logstore1, lostore2
'''
"日志1"
host:  a.b.c.com
project: project1
logstore: logstore1
http_status:  200
request_method:  GET
request_uri:  /pic/icon.jpg
scheme:  https

"日志2"
host:  m.n.q.com
project: project1
logstore: logstore2
http_status:  301
request_method:  POST
request_uri:  /data/data.php
scheme:  http

"日志3"
host:   e.f.d.com
project: project2
logstore: logstore1
http_status:  404
request_method:  GET
request_uri:  /category/abc/product_id
scheme:  https
  
"日志4"
host:   p.q.t.com
project: project2
logstore: logstore2
http_status:  504
request_method:  GET
request_uri:  /data/index.html
scheme:  https

分发目标

  • 根据日志事件projectlogstore字段值的不同,进行日志事件的动态分发。
  • 为日志事件添加标签__tag:__type,值为dynamic_dispatch

LOG DSL编排

e_output(project=v("project"), logstore=v("logstore"), tags={"type": "dynamic_dispatch"})
  • 动态目标分发默认使用的AccessKey信息是加工配置项中配置的第一个存储目标对应的AccessKey账号信息。
  • 因此第一个存储目标的project和logstore信息对以上加工规则不会有影响,因为该加工规则中的e_output会动态提取project和logstore的值进行事件分发。

加工后日志

"project1 logstore1"
__tag__:type: dynamic_dispatch
host:  a.b.c.com
project: project1
logstore: logstore1
http_status:  200
request_method:  GET
request_uri:  /pic/icon.jpg
scheme:  https

"project1 logstore2"
__tag__:type: dynamic_dispatch
host:  m.n.q.com
project: project1
logstore: logstore2
http_status:  301
request_method:  POST
request_uri:  /data/data.php
scheme:  http

"project2 logstore1"
__tag__:type:  dynamic_dispatch
host:   e.f.d.com
project: project2
logstore: logstore1
http_status:  404
request_method:  GET
request_uri:  /category/abc/product_id
scheme:  https
  
"project2 logstore2"
__tag__:type: dynamic_dispatch
host:   p.q.t.com
project: project2
logstore: logstore2
http_status:  504
request_method:  GET
request_uri:  /data/index.html
scheme:  https

场景3:跨账号动态目标Logstore的分发

本场景是场景1和场景2的结合使用场景。

原始日志

"""
project1属于账号1,该Project中有两个Logstore:logstore1, lostore2
project2属于账号2,该Project中有两个Logstore:logstore1, lostore2
"""
"日志1"
host:  a.b.c.com
project: project1
logstore: logstore1
http_status:  200
request_method:  GET
request_uri:  /pic/icon.jpg
scheme:  https

"日志2"
host:  m.n.q.com
project: project1
logstore: logstore2
http_status:  301
request_method:  POST
request_uri:  /data/data.php
scheme:  http

"日志3"
host:   e.f.d.com
project: project2
logstore: logstore1
http_status:  404
request_method:  GET
request_uri:  /category/abc/product_id
scheme:  https
  
"日志4"
host:   p.q.t.com
project: project2
logstore: logstore2
http_status:  504
request_method:  GET
request_uri:  /data/index.html
scheme:  https

分发目标

  • 根据日志事件projectlogstore字段值的不同,进行日志事件的动态分发。
  • 分发的目标属于不同的账号, project1属于账号1,project2属于账号2。

LOG DSL编排

e_switch(e_match(v("project"), "project1"), e_output(name="target0", project=v("project"), logstore=v("logstore")),
                e_match(v("project"), "project2"), e_output(name="target1", project=v("project"), logstore=v("logstore")))
  • 在任务配置项中为存储目标target0target1分别配置账号1和账号2的AccessKey信息
  • 存储目标target0target1的project和logstore信息对以上加工规则不会有影响,因为该加工规则中的e_output会动态提取project和logstore的值进行事件分发。

加工后日志

"""
账号1
project1 logstore1
"""
host:  a.b.c.com
project: project1
logstore: logstore1
http_status:  200
request_method:  GET
request_uri:  /pic/icon.jpg
scheme:  https

"""
账号1
project1 logstore2
"""
host:  m.n.q.com
project: project1
logstore: logstore2
http_status:  301
request_method:  POST
request_uri:  /data/data.php
scheme:  http

"""
账号2
project2 logstore1
"""
host:   e.f.d.com
project: project2
logstore: logstore1
http_status:  404
request_method:  GET
request_uri:  /category/abc/product_id
scheme:  https
  
"""
账号2
project2 logstore2
"""
host:   p.q.t.com
project: project2
logstore: logstore2
http_status:  504
request_method:  GET
request_uri:  /data/index.html
scheme:  https

进一步参考

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
142 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
2月前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
61 1
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
2月前
|
数据采集 机器学习/深度学习 存储
使用 Python 清洗日志数据
使用 Python 清洗日志数据
47 2
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
55 2
|
3月前
|
开发者 Python
基于Python的日志管理与最佳实践
日志是开发和调试过程中的重要工具,然而,如何高效地管理和利用日志常常被忽略。本文通过Python中的logging模块,探讨如何使用日志来进行调试、分析与问题排查,并提出了一些实际应用中的优化建议和最佳实践。
|
3月前
|
SQL 人工智能 运维
在阿里云日志服务轻松落地您的AI模型服务——让您的数据更容易产生洞见和实现价值
您有大量的数据,数据的存储和管理消耗您大量的成本,您知道这些数据隐藏着巨大的价值,但是您总觉得还没有把数据的价值变现出来,对吗?来吧,我们用一系列的案例帮您轻松落地AI模型服务,实现数据价值的变现......
244 3
|
4月前
|
SQL 数据库 Java
Hibernate 日志记录竟藏着这些秘密?快来一探究竟,解锁调试与监控最佳实践
【8月更文挑战第31天】在软件开发中,日志记录对调试和监控至关重要。使用持久化框架 Hibernate 时,合理配置日志可帮助理解其内部机制并优化性能。首先,需选择合适的日志框架,如 Log4j 或 Logback,并配置日志级别;理解 Hibernate 的多级日志,如 DEBUG 和 ERROR,以适应不同开发阶段需求;利用 Hibernate 统计功能监测数据库交互情况;记录自定义日志以跟踪业务逻辑;定期审查和清理日志避免占用过多磁盘空间。综上,有效日志记录能显著提升 Hibernate 应用的性能和稳定性。
54 0
|
4月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
65 0
|
4月前
|
开发者 前端开发 编解码
Vaadin解锁移动适配新境界:一招制胜,让你的应用征服所有屏幕!
【8月更文挑战第31天】在移动互联网时代,跨平台应用开发备受青睐。作为一款基于Java的Web应用框架,Vaadin凭借其组件化设计和强大的服务器端渲染能力,助力开发者轻松构建多设备适应的Web应用。本文探讨Vaadin与移动设备的适配策略,包括响应式布局、CSS媒体查询、TouchKit插件及服务器端优化,帮助开发者打造美观且实用的移动端体验。通过这些工具和策略的应用,可有效应对屏幕尺寸、分辨率及操作系统的多样性挑战,满足广大移动用户的使用需求。
69 0

相关产品

  • 日志服务