构建中央亚马逊 CloudWatch 控制面板来监控 Lambda @Edge 日志和指标

简介

Lambda @Edge 是 Amazon CloudFront 的一项强大功能,它允许您在离应用程序用户更近的地方执行无服务器代码,从而提高性能并减少延迟。通过将 Lambda @Edge 函数分发到全球边缘站点,亚马逊云科技 确保代码在离最终用户更近的地方执行,从而缩短响应时间。此外,Lambda @Edge 的无服务器特性使您无需在多个位置管理应用程序计算基础架构,您只需为所消耗的计算时间付费。但是,在分布式计算占用空间的情况下,Lambda @Edge 日志存储在离执行 Lambda @Edge 函数最近的区域的亚马逊 CloudWatch 中。在 Amazon CloudFront 中,日志分散在不同的区域,因此很难统一地查看 Lambda @Edge 执行的错误和指标。

在这篇博客文章中,我们将探索一种解决方案,该解决方案允许我们从在各种区域边缘缓存中运行的 Lambda @Edge 收集日志、错误和指标,并将其显示在集中式的 Amazon CloudWatch 控制面板中。在 Amazon CloudWatch 中集中管理日志和指标可确保便于监控、简化故障排除,并使您能够做出以数据为依据的决策来优化 Web 应用程序的性能和用户体验。

先决条件

在继续操作之前,请确保您拥有一个具有创建和管理 亚马逊 CloudFront、Amazon CloudWatc h 、Amazon Lambda 和 亚马逊云科技 IAM 资源 所需的角色和策略 的 亚马逊云科技 账户。

解决方案概述

下图说明了 Lambda @Edge 在不同区域的执行情况,每个区域都在 Amazon CloudWatch 中登录到各自的区域。随着区域数量的增加,在每个地区设置类似的警报变得至关重要,这使得流程效率低下。

Lambda@Edge executing in different AWS Regions create AWS CloudWatch logs locally in the Region where they execute.
Figure 1: Lambda@Edge in different regions

在这篇博客文章中,我们将使用一个简单的用例场景来演示如何监控 Lambda @Edge 的执行情况。

Lambda 的用例场景 @Edge

  1. 我们有一个具有各种功能的 Web 应用程序,每个功能都由不同的 REST API 支持。
  2. 应用程序用户对 Web 资源的访问由自定义授权 API 管理。
  3. 当用户登录应用程序并导航到主页时,将从 CloudFront 加载该应用程序。
  4. 当用户尝试访问网络资源时,请求会通过亚马逊 CloudFront,其中 Lambda @Edge 函数通过调用授权 API 来检查用户授权。

— 如果用户有权访问资源,则允许请求进入源。

— 如果用户无权访问资源,则 亚马逊云科技 Lambda 会生成错误并拒绝请求。

要求

为了有效监控 Lambda @Edge 的执行情况,我们需要以下内容:

  1. 运行 Lambda @Edge 函数的 亚马逊云科技 区域的可见性。
  2. 单个仪表板显示所有区域和每个区域的授权拒绝次数。
  3. 将 Amazon CloudWatch 警报设置为在拒绝授权超过特定阈值时触发。
This image represents the logic for a single AWS Region. Based on the users authorization outcome that is performed by a custom authorization service, the user will either be granted access to the resource or the Lambda@Edge will deny access. The same flow of logic happens in every AWS Region, that the Lambda@Edge is running in.
Figure 2: Lambda@Edge Use Case

让我们逐步深入研究拟议架构的技术方面:

Lambda @Edge 调用

当用户通过亚马逊 CloudFront 访问您的网络应用程序时,CloudFront 会触发与请求相关的相应 Lambda @Edge 函数。这些 Lambda @Edge 函数会自动部署到多个 亚马逊云科技 区域,以确保它们在更接近最终用户的地方执行,从而减少延迟并提高性能。

登录到云观察

当 Lambda @Edge 函数执行时,它们会生成日志和错误。默认情况下,这些日志存储在特定于执行 Lambda @Edge 的每个 亚马逊云科技 区域的亚马逊 CloudWatch 日志组中。每个日志组都包含该区域内的 Lambda @Edge 函数生成的日志。这种日志的区域隔离可确保隔离来自不同位置的日志,以便进行有效的监控和分析。

用于日志聚合的订阅筛选器

为了将来自多个区域日志组的日志和错误整合到一个中心位置,我们使用了 Amazon CloudWatch Logs 订阅过滤器。对于每个日志组,我们添加了一个指定特定字符串模式的订阅过滤器。订阅筛选器配置为将匹配指定模式的日志事件转发到名为 “订阅 Lambda” 的中央 亚马逊云科技 Lambda 函数。这个中央的 亚马逊云科技 Lambda 函数将充当日志聚合器。

集中式 “订阅 Lambda” 功能

“订阅 Lambda” 功能部署在主区域或指定的集中区域。它旨在接收来自不同区域的不同日志组的日志事件。当这些日志事件到达时,“订阅 Lambda” 会检查每个事件,提取相关信息,并根据日志内容生成自定义指标。这些自定义指标代表来自不同区域的所有 Lambda @Edge 执行的汇总数据。

CloudWatch 的自定义指标

一旦 “订阅 Lambda” 函数生成了自定义指标,它就会将这些指标发送到亚马逊 CloudWatch。这些自定义指标现在可以通过 Amazon CloudWatch 服务进行可视化和监控。

集中式云观测控制面板

为了提供跨多个区域的 Lambda @Edge 执行情况的统一视图,我们创建了一个集中式亚马逊 CloudWatch 控制面板。此仪表板包含由 “订阅 Lambda” 函数生成的自定义指标,全面概述了 Lambda @Edge 的性能和遇到的任何错误。

通过遵循此架构,您可以高效地监控 Lambda @Edge 的执行情况,获得有关其性能的宝贵见解,并主动解决可能出现的任何问题。在 Amazon CloudWatch 中集中管理日志和指标可确保便于监控、简化故障排除,并使您能够做出以数据为依据的决策来优化 Web 应用程序的性能和用户体验。

The Final Architecture. In here, the AWS CloudWatch logs that are generated in each AWS Region will be forwarded to a central Subscription Lambda based on the AWS CloudWatch Subscription Filter. The Subscription Lambda will generate custom metrics and forward in it’s own AWS Region’s CloudWatch, thus unifying all the logs generated in different Regions into a single, central Region.
Figure 3: Centralize logging with Subscription Filters

成本注意事项

当您使用订阅筛选条件时,数据会从全球多个区域的 Amazon CloudWatch 日志传输到您部署订阅 Lambda 的区域。从亚马逊 CloudWatch Logs 传输数据的价格与从亚马逊 EC2 传输数据和从亚马逊 EC2 向互联网传输数据的价格相同。 此 EC2 定价页面 包含有关数据传输费用的详细信息。

最大限度地降低跨区域数据传输的成本

  1. 在您预计大部分流量的地区部署 亚马逊云科技 Lambda。
  2. 优化您的订阅过滤器,仅选择仪表板所需的精确日志事件。

清理

完成监控工作后,清理资源至关重要。这包括删除所有未使用的日志组、亚马逊云科技 Lambda 函数和其他相关资源。

结论

监视各个区域边缘缓存中的 Lambda @Edge 执行情况,对于确保最佳性能和主动发现潜在问题至关重要。通过将日志和指标集中到单个 Amazon CloudWatch 控制面板中,我们可以获得宝贵的见解并简化监控流程。亚马逊云科技 提供了一组强大的工具和服务来促进这项监控任务,通过遵循本博客文章中概述的步骤,您可以成功构建中央亚马逊 CloudWatch 控制面板来高效监控 Lambda @Edge 日志和指标。在我们的 Lambda 开发者指南中了解有关 L amb da @Edge 的更多信息。 要了解有关如何创建自定义 CloudWatch 指标和构建控制面板的更多信息,请访问我们的 CloudWatch 开发者指南

作者简介

Samrat Lamichhane

S amrat 是一名高级解决方案架构师,在 亚马逊云科技 工作了 4 年以上。他曾与企业、中小型企业和创业公司的多个细分客户合作,在那里他帮助我们的客户架构解决方案并迁移到 亚马逊云科技。他专门研究 亚马逊云科技 中的无服务器、存储和配置、合规性和审计。

Sagar Das

Sagar Das 是 亚马逊云科技 的解决方案架构师。Sagar 专注于解决业务问题,其技术技能针对当今快速变化的解决方案。此外,出色的沟通和个人技巧可增强萨加尔的技能。
工作之余,萨加尔喜欢与家人共度时光,并尽可能地打板球和网球。萨加尔总部设在乔治亚州亚特兰大。

Vipan Kumar

Vipan Kumar 是亚马逊网络服务的高级解决方案架构师,他在那里为战略客户提供建议。他在设计、构建和更新企业应用程序方面拥有丰富的经验。他热衷于使用微服务、无服务器技术和事件驱动架构解决复杂的问题。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。