日志服务数据加工最佳实践: 跨账号多目标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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
2月前
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
650 53
|
2月前
|
数据采集 运维 监控
不重启、不重写、不停机:SLS 软删除如何实现真正的“无感数据急救”?
SLS 全新推出的「软删除」功能,以接近索引查询的性能,解决了数据应急删除与脏数据治理的痛点。2 分钟掌握这一数据管理神器。
234 28
|
2月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
305 1
日志收集和Spring 微服务监控的最佳实践
|
2月前
|
负载均衡 监控 安全
5 个 IIS 日志记录最佳实践
IIS日志记录是监控Web服务器性能与安全的关键。本文介绍启用日志、应用池配置、负载均衡、敏感数据防护、日志集中管理及保留策略等五大最佳实践,助力高效分析与合规审计。
233 1
|
3月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
480 1
|
3月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
321 0
|
3月前
|
数据采集 运维 监控
|
5月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
642 4

相关产品

  • 日志服务
  • 下一篇
    oss云网关配置