

# 使用 CloudWatch 应用程序图查看您的应用程序拓扑并监控运行状况
<a name="ServiceMap"></a>

**注意**  
CloudWatch 应用程序图取代了服务地图。要按 AWS X-Ray 跟踪查看应用程序地图，请打开 [X-Ray 跟踪地图](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html)。在 CloudWatch 控制台中，在左侧导航窗格的 **X-Ray** 部分下选择**跟踪地图**。

为 Application Signals 启用应用程序后，应用程序图将显示代表您的组的节点。然后，您可以在这些组中进行深入研究，查看您的服务及其依赖项。使用应用程序图查看应用程序客户端拓扑、Synthetics 金丝雀、服务和依赖项，并监控运行状况。要查看应用程序图，请打开 [CloudWatch 控制台](https://console.aws.amazon.com/cloudwatch/)，然后选择左侧导航窗格的 **Application Signals** 部分下的**应用程序图**。



在[为 Application Signals 启用应用程序](CloudWatch-Application-Signals-Enable.md)后，使用应用程序图可以更轻松地监控应用程序的运行状况：
+ 查看客户端、Canary、服务和依赖项节点之间的连接，以便了解应用程序拓扑和执行流程。如果服务运营商不是您自己的开发团队，这一点尤其有用。
+ 查看哪些服务达到或未达到您的[服务级别目标（SLO）](CloudWatch-ServiceLevelObjectives.md)。如果某项服务未达到 SLO，则您可以快速确定是否有某个下游服务或依赖项导致此问题或影响多个上游服务。
+ 选择单个客户端、Synthetics Canary、服务或依赖项节点以查看相关指标。[服务详细信息](ServiceDetail.md)页面显示有关操作、依赖项、Synthetics Canary 和客户端页面的更多详细信息。
+ 筛选和缩放应用程序图，从而更便于重点关注应用程序拓扑的某一部分，或者查看整个地图。通过从筛选条件文本框中选择一个或多个属性来创建筛选条件。选择各个属性时，系统将引导您选择筛选条件。您将在筛选条件文本框下看到完整的筛选条件。随时选择**清除筛选条件**以移除筛选条件。
+ 在单个统一的应用程序图中监控多个 AWS 账户的服务。使用账户信息可以清楚地识别不同账户的服务，从而实现分布式应用程序的统一可观测性。
+ 识别应用程序中尚未埋点的服务。Application Signals 会自动检测和显示尚未进行埋点的服务，从而帮助您实现全面的可观测性覆盖。未埋点服务在地图上以视觉方式区分，可帮助您确定埋点工作的优先顺序。
+ 对服务进行分组和筛选以创建与工作流相匹配的自定义视图。此组织可帮助您快速查找和访问最常使用的服务
+ 保存经过筛选和分组的视图，以便快速返回常用配置

## 浏览应用程序图
<a name="Service-map-exploring"></a>

访问应用程序图时，默认情况下，地图会显示按**相关服务**分组的服务。相关服务根据依赖项对服务进行分组。例如，如果服务 A 调用服务 B，而服务 B 调用服务 C，则它们将分组到服务 A 下。您可以查看每个组中所有服务的 SLI 运行状况、指标和服务计数。

![\[按相关服务分组的 CloudWatch 默认应用程序图。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-overview.png)


选择选项卡，了解有关浏览每种节点及其之间的边缘（连接）的信息。

### 动态分组和筛选
<a name="Application-Map-Grouping"></a>

您可以单击**分组依据**下拉列表来使用不同的分组选项。默认情况下，应用程序图提供 2 个分组：
+ **相关服务** – 根据服务依赖项对服务进行分组
+ **环境** – 按服务环境对服务进行分组

如果要定义自己的自定义分组，请单击**管理组**以定义自定义组，然后使用组键标记服务或添加 OTEL 资源属性。

**注意**  
要启用通过 OTEL 资源属性进行分组，CloudWatch 代理版本必须为 v1.300056.0 或更高版本。

![\[创建自定义分组面板\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-create-custom-grouping.png)


Application Signals 中的默认分组会根据服务的下游依赖项自动整理服务。系统会分析服务依赖项图并创建组，其中根节点（没有上游依赖项的服务）变为组名称。所有直接或间接依赖于此根服务的服务都将自动包含在该组中。例如，如果服务 A 调用服务 B，而服务 B 调用服务 C，则所有三项服务将分组在一起，并将服务 A 作为组名称，因为它是依赖关系链的根。这种自动分组机制提供了一种自然的方法，可以根据相关服务的实际运行时交互和依赖项对这些服务进行可视化和管理。

### 组操作和见解
<a name="Application-Map-Group-Actions"></a>

您可以为每个组执行以下操作：
+ 单击**查看更多**可查看该组的指标图表、最近两个变更事件和上次部署时间  
![\[在应用程序图中查看组的更多抽屉\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-view-more.png)
+ 单击**查看控制面板**可查看该组的指标控制面板、变更事件表和服务列表  
![\[查看组的应用程序控制面板\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-team-overview.png)  
![\[使用指标图表查看组的应用程序控制面板\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-team-overview-2.png)

您可以使用左侧栏上的**分组和筛选**来筛选服务具有部署时间、SLI 运行状况或计算平台类型的组。

![\[在应用程序控制面板上对服务进行分组和筛选\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-grouping-filter.png)


您还可以在跨账户可观测性设置中，按账户筛选以查看特定 AWS 账户的服务。

![\[在应用程序控制面板上按账户筛选服务\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-account-filter.png)


使用**搜索和筛选**栏，按名称搜索组或搜索包含特定服务环境或依赖项的组。按账户 ID 筛选，重点关注特定账户的服务。

![\[在应用程序图中搜索和筛选服务\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-search-and-filter.png)


### 配置自定义组
<a name="Application-Map-Configure-Custom-Groups"></a>

通过自定义分组功能，可以根据业务需求和运营优先级以逻辑方式整理服务。此功能让您能够查看和保存按特定需求排定优先级的已定义视图，根据团队所有权创建组，并对关键业务交易所需的服务进行分组。

创建自定义组名称（将在用户界面中看到的组名称）和相应的组键名称。通过 Application Signals 用户界面或使用 [PutGroupingConfiguration](https://docs.aws.amazon.com/applicationsignals/latest/APIReference/API_PutGroupingConfiguration.html) API 完成此步骤。

组键名称可以是服务的 AWS 标签键，也可以是 OTEL 资源属性。在标签和 OTEL 资源属性之间作决定时，请考虑计算平台：
+ 对于单一服务平台（例如 Lambda 或自动扩缩组），请使用 AWS 标签
+ 对于多服务平台（例如 Amazon EKS 集群），请使用 OTEL 资源属性，以便进行更精细的分组

**添加 AWS 标签**

向 Amazon EKS 集群添加一个以自定义组键为键和值的 AWS 标签。如果一个 Amazon EKS 集群中运行多项服务，则所有服务都使用相同的自定义组键进行标记。例如，如果 Amazon EKS 集群 A 运行服务 1、服务 2 和服务 3，则将带有 *Team X* 键的 AWS 的标签添加到集群时，会将所有三项服务都添加到 *Team X*。要仅将特定服务添加到 *Team X*，请为服务添加 OTEL 资源属性，如下所示。

**添加 OTEL 资源属性**

要添加 OTEL 资源属性，请参阅以下配置：

**常规配置**

使用自定义组键值对在应用程序中配置 `OTEL_RESOURCE_ATTRIBUTES` 环境变量。键在 `aws.application_signals.metric_resource_keys` 下方列出，以 `&` 分隔。

例如，要使用 `Application=PetClinic` 和 `Owner=Test` 创建自定义组，请使用以下命令：

```
OTEL_RESOURCE_ATTRIBUTES=Application=PetClinic,Owner=Test,aws.application_signals.metric_resource_keys=Application&Owner
```

**平台特定的配置**

以下是部署规格。

**Amazon EKS 和原生 Kubernetes**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  ...
spec:
  replicas: 1
  ...
  template:
    spec:
      containers:
      - name: your-app
        image: your-app-image
        env:
          ...
          - name: OTEL_RESOURCE_ATTRIBUTES
            value: Application=PetClinic,Owner=Test,aws.application_signals.metric_resource_keys=Application&Owner
```

**Amazon EC2**

将 `OTEL_RESOURCE_ATTRIBUTES` 添加到应用程序启动脚本。有关完整示例，请参阅[添加 `OTEL_RESOURCE_ATTRIBUTES`](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Signals-Enable-EC2Main.html#CloudWatch-Application-Signals-Monitor-EC2)。

```
...
OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME,Application=PetClinic,Owner=Test,aws.application_signals.metric_resource_keys=Application&Owner" \
java -jar $MY_JAVA_APP.jar
```

**Amazon ECS**

将 `OTEL_RESOURCE_ATTRIBUTES` 添加到 TaskDefinition。有关完整示例，请参阅[在 Amazon ECS 上启用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Signals-Enable-ECSMain.html)。

```
{
  "name": "my-app",
   ...
  "environment": [
    {
      "name": "OTEL_RESOURCE_ATTRIBUTES",
      "value": "service.name=$YOUR_SVC_NAME,Application=PetClinic,Owner=Test,aws.application_signals.metric_resource_keys=Applicationmanagement portalOwner"
    }, 
    ...
  ]
}
```

**Lambda**

将 `OTEL_RESOURCE_ATTRIBUTES` 添加到 Lambda 环境变量。

```
OTEL_RESOURCE_ATTRIBUTES="Application=PetClinic,Owner=Test,aws.application_signals.metric_resource_keys=Application&Owner"
```

### 查看组内的服务
<a name="Application-Map-Service-View"></a>

要查看组中的服务及其依赖项，请单击组名称。随即将显示组内的服务地图。每个服务节点都将显示 SLI 运行状况、指标和平台详细信息。违反 SLI 的服务会突出显示以便于识别。

![\[组内的 CloudWatch 应用程序图服务。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/View-services-groups.png)


未埋点服务显示有独特的可视化指示器（例如虚线边框或不同的颜色）显示，以将其与已埋点服务区分开来。将鼠标悬停在未埋点服务节点上，查看埋点指南和设置文档的链接。

![\[按应用程序图上的未埋点服务进行筛选\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-uninstrumented-filter.png)


默认情况下，所有金丝雀、RUM 客户端和 AWS 服务节点都将折叠起来。如果此组中的服务调用不属于此组的服务，则默认情况下，这些服务也将折叠起来。

![\[金丝雀节点在应用程序图中折叠成一个组\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-canary-collapse.png)


如果地图仍然太大而无法进行有效调查，则可以应用嵌套分组来缩小调查范围。例如，在按**业务部门**对服务进行分组后，如果组中还有太多服务，请使用“分组依据”下拉列表选择**团队**，从而创建嵌套的分组结构。

![\[应用程序图中的嵌套分组\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-nested-grouping.png)


### 服务见解和详细信息
<a name="Application-Map-Service-Details"></a>

在此页面上，还可以单击搜索栏旁边的**保存视图**来保存视图，这样下次就不必再次应用相同的分组和筛选。

![\[保存分组配置\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-save-view.png)


单击服务节点中的**查看更多**，查看服务审计、变更事件、SLI 运行状况和指标图表。

![\[CloudWatch 应用程序图服务见解。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-service-view-more.png)


如果要查看服务操作和其他服务详细信息，请单击**查看控制面板**转到服务概览页面。

![\[CloudWatch 应用程序图服务概览。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-service-overview.png)


或者，可以单击“边缘”查看服务的特定依赖项调用指标。

![\[CloudWatch 应用程序图节点边缘抽屉\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-edge.png)


### 变更事件
<a name="Application-Map-Change-Events"></a>

借助 Application Signals 对 CloudTrail 事件的自动处理能力，全面跟踪应用程序中的变更事件。监控服务及其依赖项的配置和部署事件，为操作分析和问题排查提供即时背景信息。变更事件检测功能会随服务发现功能一同启用，可通过 CloudWatch 控制台或 StartDiscovery API 完成启用操作。对于 EKS 服务，部署检测需通过 Application Signals 埋点 SDK 为 EKS 服务进行埋点。Application Signals 会自动将部署时间与性能变化相关联，帮助您快速确定最近的部署是否导致了服务问题。无需进行额外的配置或设置，即可查看各项服务的变更事件历史记录和影响。

### 审计调查发现
<a name="Application-Map-Audit-Findings"></a>

通过 Application Signals 的审计调查发现，挖掘关键见解。该服务会对应用程序展开分析，反馈重要观测结果并识别潜在问题，大幅简化根本原因分析流程。这些自动化分析结果会整合相关跟踪数据，无需多次单击跳转即可查看。审计系统可帮助团队快速定位问题及其深层诱因，实现更快速解决问题。

对于在 Amazon Bedrock 上运行的服务，Application Signals 会自动监控生成式人工智能词元使用模式。审计系统会检测输入和输出词元消耗的异常情况，将当前使用量与历史基准进行比较。当词元使用量超过正常模式时，审计调查发现会提供详细的分析，包括词元消费趋势、成本影响和优化建议。这有助于团队识别效率低下的提示、预期外的词元峰值以及降低生成式人工智能运营成本的机会。

### 应用程序图上的跨账户可观测性
<a name="Application-Map-Cross-Account"></a>

Application Signals 支持跨账户可观测性，让您可在单个统一的应用程序图中监控和可视化分布在多个 AWS 账户中的服务。对于采用多账户架构且遵循 AWS 最佳实践的组织来说，此功能必不可少。

**关键功能：**
+ *统一视图*：可在单个应用程序图中查看多个 AWS 账户的服务，全面了解您的分布式应用程序架构。
+ *账户识别*：每个服务节点都清晰显示其账户 ID 和区域，便于识别服务所有权和位置。
+ *集中式监控*：通过一个监控账户监控所有关联账户中服务的运行状况、性能和 SLO 状态。
+ *跨账户筛选*：按账户 ID 对服务进行筛选和分组，重点关注特定账户或查看跨账户互动。

**工作原理：**

Application Signals 使用 AWS Organizations 和跨账户共享功能来实现跨多个账户的可观测性。要设置跨账户可观测性，请参阅 [CloudWatch 跨账户可观测性](CloudWatch-Unified-Cross-Account.md)。

------
#### [ View your application services ]

**服务（已埋点）**

您可以在**应用程序图**中查看您的应用程序服务，以及其 SLO 和服务级别指标（SLI）的状态。如果没有为服务创建 SLO，请选择服务节点下方的**创建 SLO** 按钮。

 **应用程序图**显示您的所有服务。它还显示使用服务的客户和 Canary 以及您的服务调用的依赖项，如下图所示：

![\[显示运行正常和不正常的服务的 CloudWatch 应用程序图。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/service-map-service-healthy-unhealthy.png)


选择服务节点后，将开启一个显示详细服务信息的窗格：
+ 总错误率和故障率。
+ 为 `healthy` 或 `unhealthy` 的 SLI 和 SLO 数量。
+ 查看有关 SLO 的更多信息的选项。
+ 对于托管在 Amazon EKS 中的服务为 `Cluster`、`Namespace` 和 `Workload`，或者托管在 Amazon ECS 或 Amazon EC2 中的服务为“环境”。对于 Amazon EKS 托管的服务，请选择任意链接打开 CloudWatch Container Insights。
+ 账户 ID 和区域。
+ **变更**部分显示最近的变更事件和上次部署时间。
+ **运营审计**选项卡提供自动审计调查发现和建议。
+ 可用性、延迟、故障和错误的服务指标图表。

选择服务节点和下游服务或依赖项节点之间的边缘或连接。这将打开一个窗格，其中包含按故障率、延迟和错误率划分的主要路径，如下图中所示。选择窗格中的任何链接，打开[服务详细信息](ServiceDetail.md)页面，查看选定服务或依赖项的详细信息。

![\[CloudWatch 应用程序图服务边缘\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/App-signals-service-edge.png)


选择边缘节点后，将打开一个显示详细服务信息的窗格：
+ 请求总计数、延迟、错误率和故障率
+ 按故障率排名在前的路径
+ 按延迟排名在前的路径
+ 按错误率排名在前的路径

**服务（未埋点）**

未埋点服务即使尚未配置 Application Signals，也会显示在应用程序图上。通过 Resource Explorer 使用应用程序名称和标签即可自动发现这些服务。系统可自动检测您 AWS 账户中的多达 3000 个资源。

选择未埋点服务节点后，将打开一个显示以下内容的窗格：
+ 服务名称和标识信息
+ 账户 ID 和检测到服务的区域
+ 埋点状态和指南
+ “启用 Application Signals”行动号召按钮，提供设置说明
+ 计算平台类型（如可检测）

未埋点服务可帮助您：
+ 发现可观测性覆盖范围的差距
+ 根据服务在架构中的位置，确定接下来要完成埋点的服务的优先级
+ 甚至在全面埋点之前就了解完整的应用程序拓扑
+ 计划整个组织的埋点部署

**注意**  
未埋点服务显示的遥测数据有限，因为它们不会主动发送指标或跟踪。

![\[CloudWatch 应用程序图埋点过滤器\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/explore-application-map-instrumentation-filter.png)


------
#### [ View dependencies ]

应用程序依赖项将显示在应用程序图上，并与调用其的服务相连接。

选择依赖项节点以打开一个窗格，其中包含错误率和故障率、请求指标图表、可用性、延迟、故障率和错误率。

 如果依赖项节点是服务或资源，则该窗格将显示请求的时间范围内的变更事件。

![\[显示可扩展 AWS 服务依赖项节点的 CloudWatch 应用程序图。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/service-map-dependency.png)


------
#### [ View clients ]

为 CloudWatch RUM Web 客户端[开启 X-Ray 跟踪](CloudWatch-RUM-get-started-create-app-monitor.md)后，它们会显示在与其调用的服务相连接的应用程序图上。

选择客户端节点，打开显示详细客户信息的窗格：
+ 页面加载量、平均加载时间、错误和平均 Web 重要信息的指标
+ 显示错误明细的图表
+ 显示 CloudWatch RUM 中客户端详细信息的链接

![\[显示可扩展客户端节点的 CloudWatch 应用程序图。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/service-map-client.png)


选择**查看控制面板**以打开金丝雀详细信息。

------
#### [ View synthetics canaries ]

要在应用程序图上查看金丝雀，请为 CloudWatch Synthetics 金丝雀[开启 X-Ray 跟踪](CloudWatch-RUM-get-started-create-app-monitor.md)。启用后，金丝雀将在应用程序图上显示已连接至其调用的服务。

默认情况下，系统会将金丝雀分组到单个可扩展图标中。详细的金丝雀信息窗格会显示指标、跟踪和状态信息。

选择 Canary 节点，以打开显示详细 Canary 信息的窗格，如下图中所示：

![\[显示可扩展 Synthetics 金丝雀节点的 CloudWatch 应用程序图。\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/images/service-map-canary.png)


选择**查看控制面板**以打开金丝雀详细信息。

------