亚马逊AWS官方博客

新功能:Amazon CloudWatch 跨账户可观察性

使用多个 AWS 账户部署应用程序是一种很好的实践,可以在团队之间建立安全和计费界限,减少运营事件的影响。当采用多账户策略时,您必须分析分散在多个账户中的遥测数据。为了让您能够灵活地从集中视图监控应用程序的所有组件,现在我们推出了 Amazon CloudWatch 跨账户可观察性,这是一项新的功能,用于搜索、分析和关联存储在 CloudWatch 中的跨账户遥测数据,例如指标、日志和跟踪。

现在,您可以设置一个中央监控 AWS 账户,并将您的其他账户作为源进行连接。然后,您可以在几秒钟内搜索、审核和分析应用程序中的日志,深入了解运营问题。您可以在同一位置发现和可视化来自多个账户的指标,并创建警报来评估属于其他账户的指标。您可以从应用程序的跨账户汇总视图开始,直观地识别出现错误的资源,然后深入研究关联的跟踪、指标和日志以找出根本原因。这种无缝的跨账户数据访问和导航有助于减少解决问题所需的时间和精力。

我们来看看这些步骤的实际操作。

配置 CloudWatch 跨账户可观察性
为了实现跨账户可观察性,CloudWatch 引入了监控和源账户的概念:

  • 监控账户是一个 AWS 中央账户,可以查看其他账户共享的可观察性数据并与之交互。
  • 源账户是与一个或多个监控账户共享可观察性数据和资源的个人 AWS 账户。

您可以配置多个具有所需可见性级别的监控账户。CloudWatch 跨账户可观察性还与 AWS Organizations 集成。例如,我可以为中央安全和运营团队创建一个可以广泛访问组织中所有账户的监控帐户,然后配置其他监控账户,使各个业务部门对个人服务所有者的可见性更为有限。

首先,我配置监控账户。在 CloudWatch console(CloudWatch 控制台)中,我在导航窗格中选择 Settings(设置)。在 Monitoring account configuration(监控账户配置)部分中,我选择 Configure(配置)。

控制台屏幕截图。

现在,我可以选择与监控账户共享哪些遥测数据:Logs(日志)、Metrics(指标)和 Traces(跟踪)。我将这三项都启用了。

控制台屏幕截图。

要列出将与该监控账户共享数据的源账户,我可以使用账户 ID、组织 ID 或组织路径。我可以使用组织 ID 来包含组织中的所有账户,也可以使用组织路径来包含部门或业务部门中的所有账户。就我而言,我只有一个源账户可以关联,所以我输入了账户 ID。

控制台屏幕截图。

在监控账户中使用 CloudWatch 控制台搜索和显示遥测数据时,我会看到共享该数据的账户 ID。因为账户 ID 不容易记住,所以我可以显示更具描述性的“账户标签”。 通过控制台配置标签时,我可以在账户名或用于识别账户的电子邮件地址之间进行选择。使用电子邮件地址时,我还可以选择是否包含域名。例如,如果所有用于识别我的账户的电子邮件都使用同一个域,则可以使用没有该域名的电子邮件地址作为标签。

提醒一下,跨账户可观察性仅适用于所选区域。如果我在多个区域均有资源,我可以在每个区域配置跨账户可观察性。要完成监控账户的配置,我选择 Configure(配置)。

控制台屏幕截图。

监控账户现已启用,我选择 Resources to link accounts(要关联账户的资源),以确定如何关联我的源账户。

控制台屏幕截图。

要链接 AWS 组织中的源账户,我可以下载一个 AWS CloudFormation 模板部署在 CloudFormation 代理管理账户中。

要关联各个账户,我可以下载要在每个账户中部署的 CloudFormation 模板,也可以复制一个帮助我使用控制台设置账户的 URL。我复制 URL 并将其粘贴到另一个浏览器中,以源账户的身份登录。然后,我可以配置要共享哪些遥测数据(日志、指标或跟踪)。监控账户配置的 Amazon 资源名称(ARN)是预先填写的,因为我在上一步中复制粘贴了 URL。如果我不使用 URL,我可以从监控账户复制 ARN 并将其粘贴到此处。我确认用于识别我的源账户的标签,然后选择 Link(链接)。

Confirm monitoring account permission(确认监控账户权限)对话框中,我键入 Confirm(确认)以完成源账户的配置。

使用 CloudWatch 跨账户可观察性
为了解跨账户可观察性是如何运作的,我使用两个 AWS Lambda 函数部署了一个简单的跨账户应用程序,一个在源账户(多账户函数 a)中,另一个在监控账户(多账户函数 b)中。触发后,源账户中的函数将事件发布到监控账户中的 Amazon EventBridge 事件总线。在那里,EventBridge 规则触发监控账户中函数的执行。这是一种仅使用两个账户的简化设置。您的工作负载可能会在多个源账户中运行。架构图。

Lambda console(Lambda 控制台)中,两个 Lambda 函数启用了 Active tracing(主动跟踪)和 Enhanced monitoring(增强监控)。为了收集遥测数据,我使用了 AWS Distro for OpenTelemetry(ADOT)Lambda layer(适用于 OpenTelemetry(ADOT)Lambda 层的 AWS Distro)。Enhanced monitoring(增强监控)选项可启用 Amazon CloudWatch Lambda Insights 来收集和聚合 Lambda 函数运行时的性能指标。

控制台屏幕截图。

我在源账户的 Lambda 控制台中准备了一个测试事件。然后,我选择 Test(测试)并运行该函数几次。

控制台屏幕截图。

现在,我想了解在不同账户中运行的应用程序组件在做什么。我从日志开始,然后转到指标和跟踪。

监控账户的 CloudWatch 控制台中,我在导航窗格的 Logs(日志)部分中选择 Log groups(日志组)。在那里,我搜索并找到由在不同的 AWS 账户中运行的两个 Lambda 函数创建的日志组。正如预期的那样,每个日志组都显示源自数据的账户 ID 和标签。我选择了两个日志组,然后选择了 View in Logs Insights(在 Logs Insights 中查看)。

控制台屏幕截图。

我现在可以使用 CloudWatch Logs Insights query syntax(CloudWatch Logs Insights 查询语法)搜索和分析来自不同 AWS 账户的日志。例如,我运行一个简单的查询来查看两个日志组中的最后二十条消息。我加入 @log 字段以查看日志所属的账户 ID。

控制台屏幕截图。

我现在还可以在跨账户日志组上创建 Contributor Insights rules(Contributor Insights 规则)。例如,这使我能够全面了解账户之间正在发生哪些安全事件,或者识别在多个账户中运行的无服务器应用程序中最昂贵的 Lambda 请求。

然后,我在导航窗格的 Metrics(指标)部分中选择 All metrics(所有指标)。 要查看 CloudWatch Lambda Insights 收集的 Lambda 函数运行时的性能指标,我选择 LambdaInsights,然后选择 function_name。在那里,我搜索多账户内存以查看内存指标。同样,我看到账户 ID 和标签告诉我,这些指标来自两个不同的账户。在这里,我可以选择我感兴趣的指标,然后创建跨账户控制面板和警报。选择指标后,我在 Actions(操作)下拉列表中选择 Add to dashboard(添加到控制面板)。

控制台屏幕截图。

我创建了一个新的控制面板,并选择 Stacked area(堆叠区域)小部件类型。然后,我选择 Add to dashboard(添加到控制面板)。

控制台屏幕截图。

我对 CPU 和内存指标执行相同操作(但使用了不同的小部件类型),以快速创建跨账户控制面板,在那里我可以控制我的多账户设置。好吧,现在流量还不是很多,但我有信心。

控制台屏幕截图。

最后,我从导航窗格的 X-Ray traces(X-Ray 跟踪)部分中选择 Service map(服务地图)来查看我的多账户应用程序的流程。在服务地图中,客户端触发源账户中的 Lambda 函数。然后,将一个事件发送到另一个账户来运行另一个 Lambda 函数。

控制台屏幕截图。

在服务地图中,我为在源账户中运行的函数(多账户函数 a)选择齿轮图标,然后选择 View traces(查看跟踪)以查看单个跟踪。跟踪包含来自多个 AWS 账户的数据。我可以使用以下语法搜索来自特定账户的跟踪:

service(id(account.id: "123412341234"))

控制台屏幕截图。

现在,服务地图将来自多个账户的遥测数据整合到同一个位置,提供一个综合视图来监控他们的跨账户应用程序。这有助于我快速查明问题并缩短解决时间。

可用性和定价
现在
Amazon CloudWatch 的跨账户可观察性在 AWS 管理控制台AWS 命令行界面 (CLI)AWS SDK 的所有商业 AWS 区域均可用。AWS CloudFormation 支持将在未来几天推出。CloudWatch 中的跨账户可观察性无需额外支付日志和指标费用,而且第一个跟踪副本是免费的。相关详细信息,请参阅 Amazon CloudWatch 定价页面

以中心视角监控您使用的所有 AWS 账户可以更好地了解自己的整体活动,并有助于解决跨多个账户的应用程序的问题。

开始使用 CloudWatch 跨账户可观察性来监控您的所有资源。

Danilo