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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 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日志并进行多维度分析。
目录
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
我使用flinkcdc的sql形式进行全量同步,4张表,有两张表数据没进去,看日志,id怎么是null呢?
我使用flinkcdc的sql形式进行全量同步,4张表,有两张表数据没进去,看日志,id怎么是null呢?
117 40
|
1天前
|
机器学习/深度学习 前端开发 数据挖掘
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断(下)
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
32 11
|
6天前
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断2
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
13 0
|
7天前
|
机器学习/深度学习 前端开发 数据挖掘
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
38 0
|
2月前
|
JSON 监控 Java
Java Web开发中的异常处理与日志记录最佳实践
Java Web开发中的异常处理与日志记录最佳实践
|
4月前
|
SQL 存储 监控
使用CloudLens for SLS监控Project资源配额最佳实践
本文主要介绍如何使用CloudLens for SLS中全局错误日志、监控指标做Project 资源配额的水位监控 、超限监控 以及 如何提交资源配额提升申请。
79337 19
使用CloudLens for SLS监控Project资源配额最佳实践
|
4月前
|
SQL 关系型数据库 MySQL
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
38 0
|
6天前
|
存储 数据库 流计算
Flink CDC为什么我几张表十来条数据就产生了那么大日志?
Flink CDC为什么我几张表十来条数据就产生了那么大日志?
111 0
|
5月前
|
存储 数据采集 监控
从存储统一到数据融合,SLS在可观测场景的思考和行动
介绍SLS在可观测数据融合分析的一系列技术升级,融合Trace、全栈监控、Continuous Profiling、移动端监控等功能,帮助大家更快速地构筑全栈、自动化的观测能力。
127616 52
|
5月前
|
JSON 运维 安全
系统日志规范及最佳实践(2)
系统日志规范及最佳实践
100 0
系统日志规范及最佳实践(2)

相关产品

  • 日志服务