EventBridge 生态实践:融合 SLS 构建一体化日志服务

简介: 本文将从 SLS 在 EventBridge上 的使用以及若干最佳实践场景等方面,为大家介绍如何基于 EventBridge 构建 SLS 相关应用。

作者: 昶风


引言


阿里云日志服务 SLS 是一款优秀的日志服务产品,提供一站式地数据采集、加工、查询与分析、可视化、告警、消费与投递等服务。对于使用 SLS 的用户业务而言,SLS 上存储的日志信息反映着业务的运行状态,通过适当地流转加工即可创建一定价值。


另一方面,阿里云 EventBridge 作为云上事件枢纽,每天承载着大量事件的流转。云上资源的操作事件、消息队列中的数据、用户业务中的自定义事件等,是否有一站式的配置工具来将这些数据统一收敛到 SLS,进而使用 SLS 强大的加工、分析能力也是一个具有价值的问题。


为了支持上述日志、数据流入流出 SLS 的场景,阿里云 EventBridge 在近期支持了 SLS 能力。用户在 EventBridge 上通过简单地配置,即可实现数据写入 SLS 和将 SLS 中日志路由到不同的 EventBridge 目标端。EventBridge 对 SLS 的支持是全面的,用户既可以在事件总线中使用 SLS,也可以在事件流中使用。本文将从 SLS 在 EventBridge上 的使用以及若干最佳实践场景等方面,为大家介绍如何基于 EventBridge 构建 SLS 相关应用。


基于 EventBridge 使用 SLS


阿里云 SLS


日志服务 SLS[1]是一款云原生观测与分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务,提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能。


1.png


SLS 在 EventBridge 上的应用


阿里云 EventBridge 提供了事件总线[2]事件流[3]两款不同应用场景的事件路由服务。


事件总线底层拥有事件的持久化能力,可以按照需要将事件经事件规则路由到多个目标。而事件流则更轻量化,对源端产生的事件实时抽取、转换和分析并加载至目标端,无需创建事件总线,端到端转储效率更高,使用更轻便,适用于端到端的流式数据处理场景。SLS 目前对事件总线与事件流均已支持。


针对 SLS 事件源,EventBridge 会构造一个 SLS source connector,其会实时地从 SLS 服务端拉取日志。数据拉取到 EventBridge 后,会进行一定的结构封装,保留用户日志、SLS 系统参数等数据,同时增加 event 所需要的一些系统属性。


2.png


SLS Event 样例可参考如下示例。


data 部分代表用户日志内容,其中以“__”开头和结尾的字段表示日志项的 SLS 系统属性。


{
    "datacontenttype": "application/json;charset=utf-8",
    "aliyunaccountid": "175********6789",
    "data": {
        "key1": "value1",
        "key2": "value2",
        "__topic__": "TopicCategory",
        "__source__": "SourceCategory",
        "__client_ip__": "122.231.***.***",
        "__receive_time__": "1663487595",
        "__pack_id__": "59b662b225779628-0"
    },
    "subject": "acs:log:cn-qingdao:175********6789:project/demoproject/logstore/logstore-1",
    "aliyunoriginalaccountid": "175********6789",
    "source": "test-SLS",
    "type": "sls:connector",
    "aliyunpublishtime": "2022-09-18T07:53:15.387Z",
    "specversion": "1.0",
    "aliyuneventbusname": "demoBus",
    "id": "demoproject-logstore-1-1-MTY2MzExODM5ODY4NjAxOTQyMw==-0",
    "time": "2022-09-18T07:53:12Z",
    "aliyunregionid": "cn-qingdao",
    "aliyunpublishaddr": "10.50.132.112"
}

针对 SLS 事件目标,EventBridge 使用 logProducer 将 event 整体作为一个字段投递到 SLS,字段 key 名称为“content”。


3.png


使用介绍


  • SLS 事件源
     

在使用 SLS 作为事件源时(这里包含了事件总线中的事件源和事件流中的事件源),需要提供以下参数:


  • 日志项目(SLS Project)
  • 日志库(SLS LogStore)
  • 起始消费位点
  • 调用角色 


在创建 SLS 事件源时,EventBridge 会自动在对应 LogStore 下创建一个以“eventbridge-”开头的消费组,事件源或事件流被删除时,对应消费组资源也会被清理。


日志项目与日志库参数,用户根据已创建的 Project 和 LogStore 去填写即可。


起始消费位点参数指定了新任务启动时的初始消费位点。这里可以选择“最早位点”、“最新位点”与“指定时间”。“最早位点”即从当前 LogStore 中最早的日志开始消费,会导致大量历史日志被读取,建议结合业务谨慎选择;“最新位点”则表示消费对应 EventBridge 任务启动后的日志;“指定时间”需要用户填写时间戳(以秒为单位),消费从此时刻开始的日志。


针对调用角色,其实是允许 EventBridge 以这个角色的身份去调用读取用户 SLS 日志。用户需要创建一个自定义角色,并将其授信给事件总线 EventBridge。角色的权限方面则可以按照需要去进行设置,在权限最小的原则基础上,权限策略提供的角色应保证事件总线 EventBridge 可以读取对应 LogStore 日志与消费组的增删操作,至少赋予角色 LogStore 消费权限与消费组的增删操作。参考示例:

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "log:ListShards",
        "log:GetCursorOrData",
        "log:GetConsumerGroupCheckPoint",
        "log:UpdateConsumerGroup",
        "log:ConsumerGroupHeartBeat",
        "log:ConsumerGroupUpdateCheckPoint",
        "log:ListConsumerGroup",
        "log:CreateConsumerGroup",
        "log:DeleteConsumerGroup"
      ],
      "Resource": [
        "acs:log:*:*:project/<指定的project名称>/logstore/<指定的Logstore名称>",
        "acs:log:*:*:project/<指定的project名称>/logstore/<指定的Logstore名称>/*"
      ],
      "Effect": "Allow"
    }
  ]
}
  • SLS 事件目标
     

在使用 SLS 作为事件目标时(这里包含了事件总线中的事件目标和事件流中的事件目标),需要提供以下参数:


  • 日志项目(SLS Project)
  • 日志库(SLS LogStore)
  • Topic
  • 调用角色 


日志项目、日志库参数含义同 SLS 事件源。Topic 即 SLS 日志主题,用户可以根据需要进行设置,非必填内容。


在创建 SLS 事件目标时,确保使用的调用角色有写入给定日志库权限即可。参考示例:


{
  "Version":"1",
  "Statement":[
    {
      "Effect":"Allow",
      "Action":[
        "log:PostLogStoreLogs"
     ],
      "Resource":[
        "acs:log:*:*:project/<指定的Project名称>/logstore/<指定的Logstore名称>"
      ]
    }
  ]
}

使用示例


SLS 事件源和事件目标,其事件总线与事件流的参数配置相同,这里示例了如何创建  SLS 事件源和事件目标的 EventBridge 事件流。


  • 前期准备
     

1. 开通 EventBridge 服务;

2. 开通 SLS 服务并创建 Project 与 Store。


  • 创建 SLS 事件源
     

1. 登陆 EventBridge 控制台,点击左侧导航栏,选择“事件流”,在事件流列表页点击“创建事件流”;


2. “基本信息”中“事件流名称”与“描述”按照需要填写即可;


3. 在创建事件流,选择事件提供方时,下拉框选择“日志服务 SLS”;


4. 在“日志服务 SLS”一栏中选配置 SLS Project、LogStore、起始消费位点与角色配置。


4.png


  • 创建 SLS 事件目标
     

1. 在创建事件流的事件目标时,服务类型选择“日志服务”;


2. 配置 SLS Project、LogStore、日志主题、日志内容、角色配置等参数。


5.png


3. 保存启动即可创建事件流。


6.png


最佳实践示例


异步架构完备性校验


在使用消息队列搭建异步应用架构时,会偶发遇到消息丢失的情况,这种情况下的问题排查通常较为麻烦,需要确定问题到底是出在发送端、消费端还是消息队列上,这种场景可以使用 SLS + EventBridge 来进行相关预警和现场保留。


1. 业务 1 发送消息到消息队列,业务 2 异步消费 MQ 中的消息,实现架构解耦;


2. 消息发送端和消费端,在完成消费发送、消费的相关操作后,均将操作日志打印出来,并采集到 SLS 上,日志中可以包含消息 ID 等字段以确保可溯源;


3. 配置 EventBridge 事件流,事件提供方为 SLS,事件接收方为函数计算 FC;


4. FC 中的服务读取 SLS 中日志内容,若发现针对某条消息,若仅有发送日志无消费日志,则说明可能存在漏消息的可能性,需要相关人员及时介入排查。


7.png


异常业务异步处理


部分消息队列如 RocketMQ 有死信队列能力,当用户消费失败达到一定次数时,消息会被投递到死信队列。用户也可以使用 SLS + EventBridge 构建业务死信队列,以完成对异常情况的处理。


例如下图是一个电商平台的订单处理系统,当订单处理成功时,相关信息会被写入 DB 或者进行后续操作。但如果订单处理异常用户又不想要阻塞现有订单处理流程,则可以将处理异常订单的流程异步处理。


1. 用户下单/付款,订单系统进行业务处理,处理成功则将数据变更写入 DB;


2. 订单处理异常,记录相关信息日志;


3. 搭建 EventBridge 事件规则。事件源为 SLS,事件目标为函数计算 FC;


4. 当有异常业务日志产生时,日志内容被 SLS 事件源拉取,随后投递到 FC,由专门的服务来处理异常订单。当然,在架构设计时也可以将异常订单信息直接投递到函数计算,但对于大部分业务系统而言,当有异常出现时通常都会进行相关日志的打印,即异常日志大概率是存在的,这个时候使用 SLS + EventBridge 则无需再使用函数计算的发送客户端,仅按需打印日志即可,对业务的侵入性更小。


8.png


消息备份


目前阿里云上的消息队列产品种类丰富,用户在使用消息队列实现业务解耦的同时,也会产生对消息内容进行加工分析的需求。SLS 拥有强大的数据加工能力,使用 EventBridge 将消息路由到 SLS,在实现消息备份的同时也可以利用 SLS 的分析加工能力来提升业务的可观测性。


1. 搭建 EventBridge 事件流。事件提供方为各种云上消息队列,事件目标方为日志服务 SLS;


2. 使用 SLS 的能力完成消息的加工、查询、分析与可视化。


9.png


自建 SQL 审计


目前 EventBridge 已经支持了 DTS 作为事件源的能力,使用 EventBridge 可以轻松实现构建自定义 SQL 审计的需求。


1. 用户新建 DTS 数据订阅任务,捕获数据库变更;


2. 搭建 EventBridge 事件流,事件提供方为 DTS,事件接收方为日志服务 SLS;


3. 用户需要对 SQL 进行审计时,通过查询 SLS 进行。


10.png


相关链接


[1] 日志服务SLS

https://www.aliyun.com/product/sls


[2] 事件总线

https://help.aliyun.com/document_detail/163897.html


[3] 事件流

https://help.aliyun.com/document_detail/329940.html


感兴趣的小伙伴们可以扫描下方二维码加入钉钉群讨论(群号:44552972)


11.png


点击此处,进入 EventBridge 官网了解更多信息~

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
2月前
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
659 55
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
991 21
|
人工智能 安全 Cloud Native
阿里云事件总线 EventBridge 正式商业化,构建智能化时代的企业级云上事件枢纽
阿里云事件总线EventBridge自2020年发布以来,致力于构建统一的事件枢纽,支持微服务架构演进。其核心特性包括稳定安全、高性能低成本、开放集成及统一事件标准,适用于EDA、流式ETL、AI数据集成等多种场景。EventBridge于2025年6月3日正式商业化,提供灵活计费模式,包括事件量和CU配额计费,帮助企业高效实现松耦合、分布式的事件驱动架构。
|
6月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
798 54
|
9月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
769 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
8月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
826 13
|
9月前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
430 5
图解MySQL【日志】——Redo Log
|
8月前
|
缓存 Java 编译器
|
8月前
|
SQL 存储 自然语言处理
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
174 1