利用阿里云Eventbridge在CDN边缘应用程序中访问日志服务SLS

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在Web前端领域,追求极致性能是个永恒的话题。这些年的一些新兴理念都是为了提升站点访问性能而提出,无论是Jamstack技术理念或者或者 ESR (边缘渲染),都是Client侧进行性能优化的基础上,进一步拓展到了网络Infra层面,就是我们现在经常讨论的边缘计算。而阿里云的CDN EdgeRoutine 就是为广大客户提供可自由编程的边缘计算能力,我们可以用他来构建边缘节点的网关应用,来访问静态资源或者后端服务。当这个边缘网关在业务上承担的角色越来越重要的时候,我们就对他内部的业务逻辑产生了可观测的诉求,希望能够记录日志到日志服务上,然而日志服务提供的SDK,在ER的环境中暂时不被支持,这个

相关概念

EdgeRoutine (以下简称er)阿里云边缘程序,是阿里云CDN推出的边缘Serverless计算环境。针对CDN场景,通过ER可在CDN边缘节点执行您自行编写的JavaScript代码。您无需关心代码部署的机器硬件配置、部署region、调度和弹性扩容。ER代码一经上传,即可完成全球阿里云CDN节点的部署,在全球边缘执行,根据您的代码逻辑个性化处理全球各地的请求。

事件总线 EventBridge (以下简称eb)是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,并能够以标准化的 CloudEvents 1.0 协议在这些应用之间路由事件,帮助您轻松构建松耦合、分布式的事件驱动架构。

日志服务SLS(以下简称sls) 是云原生观测分析平台,为Log/Metric/Trace等数据提供大规模、低成本、实时平台化服务。一站式提供数据采集、加工、分析、告警可视化与投递功能,全面提升研发、运维、运营和安全等场景数字化能力。

一图说明

简单来说,我们只需要在eb程序中用原生fetch方法, 向由eb创建的endpoint发起请求即可,其余的都交给eb转发给sls。

操作步骤

  1. 开通EB并且创建一条自定义总线
  2. 在自定义总线中创建 HTTP/HTTPS触发的事件源
  3. 创建一个可以处理这个http事件源的事件规则
  4. 选择“日志服务”的事件目标,(需要提前准备好相同region 下的sls project 和logstore)

需要特别注意的是,刚eb需要你提供一个授权角色来对sls进行操作,这里可以点击“授权创建新角色”进入阿里云RAM界面创建Eventbridge的授信角色,RAM创建授信角色的教程放到附录。之后点击角色配置右边的刷新按钮,就可以看到创建好的角色,选中即可

5.查看事件源中的 HTTP/HTTPS触发信息,复制公网请求URL

6.在ER应用程序中增加访问eb的代码(下方代码59行)

constinit= {
headers: {
"content-type": "text/html;charset=UTF-8",
    },
}
constAPI_ROUTER_REG=/^\/(prod-api|api)/g;
constUPLOAD_ROUTER_REG=/^\/(uploads)\/?/g;
constADMIN_OR_PORTAL_ROUTER_REG=/^\/(admin|portal)\/?/g;
constAPI_PATH='/api';
constGET_TYPE= { type: "text" };
asyncfunctiongatherResponse(response) {
constheaders=response.headersconstcontentType=headers.get("content-type") ||""if (contentType.includes("application/json")) {
returnJSON.stringify(awaitresponse.json())
    } elseif (contentType.includes("application/text")) {
returnresponse.text()
    } elseif (contentType.includes("text/html;charset=UTF-8")) {
returnresponse.text()
    } else {
returnresponse.blob()
    }
}
asyncfunctionhandleRequest(request) {
try {
constrequestHeaders=request.headers||init;
constedgeKv=newEdgeKV({ namespace: "myweb"});
conststaticUrl=awaitedgeKv.get('staticUrl', GET_TYPE);
constapiUrl=awaitedgeKv.get('apiUrl', GET_TYPE);
constportalUrl=awaitedgeKv.get('portalUrl', GET_TYPE);
constebUrl=awaitedgeKv.get('ebUrl', GET_TYPE);
constbody=request.body;
constmethod=request.method;
consturl=newURL(request.url)
const { pathname, search } =url;
letresponse= {};
if (pathname.match(API_ROUTER_REG)) {
constmatchedData=pathname.match(API_ROUTER_REG)[0];
letfinalurl= (apiUrl+pathname+search).replace(matchedData, API_PATH);
response=awaitfetch(finalurl, { headers: requestHeaders, method,body });
        } elseif (pathname.match(UPLOAD_ROUTER_REG)) {
letfinalurl=apiUrl+pathname+search;
response=awaitfetch(finalurl, { headers: requestHeaders, method ,body})
        }  elseif(pathname.match(ADMIN_OR_PORTAL_ROUTER_REG)){
letfinalurl=staticUrl+pathname+search;
response=awaitfetch(finalurl, { headers: requestHeaders, method });
        } else {
letfinalurl=portalUrl+pathname+search;
response=awaitfetch(finalurl, init);
        }
constresults=awaitgatherResponse(response)
constfinalResponse=newResponse(results, response.headers);
try { // 这里开始插入访问eb的代码awaitfetch(ebUrl, {method,body:JSON.stringify({path: pathname}) });
        }catch(e){}
returnfinalResponse;
    } catch (e) {
returnnewResponse(JSON.stringify({ message: e.message }), {
headers: {
"content-type": "application/json;charset=UTF-8"            }
        })
    }
}
addEventListener("fetch", event=> {
returnevent.respondWith(handleRequest(event.request))
})

上面实例代码没有明文显示请求地址,而是将eb的请求地址存放到了边缘存储,这样做好处是,将配置部分跟逻辑代码分离,方便做替换变更。同时避免重要信息在源代码中泄露

数据测试

可以在两个地方查看数据信息

第一个地方在eventbridge的事件追踪部分,导航目录是自定义事件->事件追踪,你可以在这里查看所有发送过来的事件信息,以及投递情况

你可以访问一下使用ER的站点,然后查询最近5分钟访问事件

可以看到事件已经投递过来,查看一下啊事件轨迹,目标投递到sls已经ready,再查看一下事件体的内容,body部分有我们传入的path属性。接下来去sls日志的控制台查看一下

第二个地方查看sls日志控制台

同样的,你得到了相关的日志信息。

更多处理

eventbridge 也可以以sls日志写入作为触发的事件源,这就意味着我们可以处理这样的场景。我们对自己关注的日志数据,比如错误访问信息,或者重要商机功能访问信息做“精确的”事件通知,所谓精确就是将事件目标用函数计算处理,可以做到@钉群的具体人员,他的访问架构如下

更多的能力集成等你发掘


附录  

创建Eventbridge授信服务角色,并给其授权操作日志服务的策略

1.访问阿里云RAM控制台 ,进入角色页面,点击“创建角色”

2.选择 “阿里云服务”

输入角色名称, 选择授信服务选中“事件总线”

4 为角色授权,如果你不清楚具体应该选择哪种权限策略可以先选择“AdminstratorAccess”进行测试,之后确认操作权限后以最小权限为原则替换 AdminstratorAccess确保安全

目录
相关文章
|
2月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
535 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
28天前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
3月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
380 3
|
6天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
1月前
|
缓存 负载均衡 安全
什么是CDN服务
CDN(内容分发网络)是全球分布的服务器网络,旨在加速互联网内容的传输。它通过将内容缓存至靠近用户的服务器,减少延迟,提升访问速度与性能,同时实现负载均衡、减轻源服务器压力并提供安全防护。广泛应用于网站加速、视频直播等领域,优化用户体验。
122 5
|
1月前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
|
3月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1761 14
MySQL事务日志-Redo Log工作原理分析
|
2月前
|
存储 监控 安全
什么是日志管理,如何进行日志管理?
日志管理是对IT系统生成的日志数据进行收集、存储、分析和处理的实践,对维护系统健康、确保安全及获取运营智能至关重要。本文介绍了日志管理的基本概念、常见挑战、工具的主要功能及选择解决方案的方法,强调了定义管理目标、日志收集与分析、警报和报告、持续改进等关键步骤,以及如何应对数据量大、安全问题、警报疲劳等挑战,最终实现日志数据的有效管理和利用。
172 0
|
3月前
|
存储 人工智能 缓存
AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片
本案例介绍如何利用AI助理快速实现OSS存储的图片接入CDN,以加速图片访问。通过AI助理提炼关键操作步骤,避免在复杂文档中寻找解决方案。主要步骤包括开通CDN、添加加速域名、配置CNAME等。实测显示,接入CDN后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
5499 16
|
3月前
|
缓存 网络安全 数据安全/隐私保护
使用阿里云国际CDN加速后网站无法访问的排查步骤
使用阿里云国际CDN加速后网站无法访问的排查步骤
下一篇
开通oss服务