

# （可选）使用示例应用程序试用 Application Signals
<a name="CloudWatch-Application-Signals-Enable-EKS-sample"></a>

要在使用示例应用程序检测自己的应用程序之前，在示例应用程序上试用 CloudWatch Application Signals，请按照本节中的说明进行操作。这些说明使用脚本帮助您创建 Amazon EKS 集群、安装示例应用程序以及检测示例应用程序以使用 Application Signals。

示例应用程序是一个 Spring“Pet Clinic”应用程序，由四个微服务组成。这些服务在 Amazon EC2 上的 Amazon EKS 上运行，并利用 Application Signals 启用脚本，通过 Java、Python 或 .NET 自动检测代理来启用集群。

**要求**
+ Application Signals 仅监控 Java、Python 或 .NET 应用程序。
+ 必须已在实例上安装 AWS CLI。我们推荐 AWS CLI 版本 2，但版本 1 应该也可以使用。有关安装 AWS CLI 的更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。
+ 本节中的脚本旨在 Linux 和 macOS 环境中运行。对于 Windows 实例，我们建议您使用 AWS Cloud9 环境来运行这些脚本。有关 AWS Cloud9 的更多信息，请参阅[什么是 AWS Cloud9？](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html)
+ 安装支持的 `kubectl` 版本。您使用的 `kubectl` 版本与您的 Amazon EKS 集群控制面板之间必须最多只有一个次要版本的差异。例如，1.26 `kubectl` 客户端应使用 Kubernetes 1.25、1.26 和 1.27 集群。如果您已有 Amazon EKS 集群，可能需要配置 `kubectl` 的 AWS 凭证。有关更多信息，请参阅[为 Amazon EKS 集群创建或更新 `kubeconfig` 文件](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html)。
+ 安装 `eksctl`。`eksctl` 使用 AWS CLI 与 AWS 进行交互，这意味着该命令使用与 AWS CLI 相同的 AWS 凭证。有关更多信息，请参阅[安装或更新 `eksctl`](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)。
+ 安装 `jq`。`jq` 是运行 Application Signals 启用脚本所必需的。有关更多信息，请参阅 [Download jq](https://jqlang.github.io/jq/download/)。

## 步骤 1：下载脚本
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-scripts"></a>

要下载脚本，以使用示例应用程序设置 CloudWatch Application Signals，您可以将压缩的 GitHub 项目文件下载并解压缩到本地驱动器，也可以克隆 GitHub 项目。

要克隆项目，请打开终端窗口，并在给定工作目录中输入以下 Git 命令。

```
git clone https://github.com/aws-observability/application-signals-demo.git
```

## 步骤 2：构建并部署示例应用程序
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-build"></a>

要构建和推送示例应用程序映像，[请按照以下说明进行操作](https://github.com/aws-observability/application-signals-demo?tab=readme-ov-file#build-the-sample-application-images-and-push-to-ecr)。

### 步骤 3：部署并启用 Application Signals 和示例应用程序
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-deploy"></a>

在完成以下步骤之前，请确保您已完成 [（可选）使用示例应用程序试用 Application Signals](#CloudWatch-Application-Signals-Enable-EKS-sample) 中列出的要求。

**部署并启用 Application Signals 和示例应用程序**

1. 输入如下命令。将 *new-cluster-name* 替换为要用于新集群的名称。将 *region-name* 替换为 AWS 区域的名称，例如 `us-west-1`。

   此命令设置在启用 Application Signals 的新 Amazon EKS 集群中运行的示例应用程序。

   ```
   # this script sets up a new cluster, enables Application Signals, and deploys the
   # sample application
   cd application-signals-demo/scripts/eks/appsignals/one-step && ./setup.sh new-cluster-name region-name
   ```

   安装脚本大约需要 30 分钟才能运行，并执行以下操作：
   + 在指定区域创建新的 Amazon EKS 集群。
   + 为 Application Signals（`arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess` 和 `arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy`）创建必要的 IAM 权限。
   + 通过安装 CloudWatch 代理并自动检测示例应用程序来获取 CloudWatch 指标和 X-Ray 跟踪，从而启用 Application Signals。
   + 在同一 Amazon EKS 集群中部署 PetClinic Spring 示例应用程序。
   + 创建五个 CloudWatch Synthetics Canary，分别名为 `pc-add-vist`、`pc-create-owners`、`pc-visit-pet`、`pc-visit-vet`、`pc-clinic-traffic`。这些 Canary 将以一分钟的频率运行，为示例应用程序生成合成流量，并演示 Synthetics Canary 在 Application Signals 中的显示方式。
   + 为 PetClinic 应用程序创建四个服务级别目标（SLO），名称如下：
     + **搜索所有者的可用性**
     + **搜索所有者的延迟**
     + **注册所有者的可用性**
     + **注册所有者的延迟**
   + 使用自定义信任策略创建所需的 IAM 角色，该策略授予 Application Signals 以下权限：
     + `cloudwatch:PutMetricData`
     + `cloudwatch:GetMetricData`
     + `xray:GetServiceGraph`
     + `logs:StartQuery`
     + `logs:GetQueryResults`

1. （可选）如果您想查看 PetClinic 示例应用程序的源代码，可以在根文件夹下找到。

   ```
   - application-signals-demo
     - spring-petclinic-admin-server
     - spring-petclinic-api-gateway
     - spring-petclinic-config-server
     - spring-petclinic-customers-service
     - spring-petclinic-discovery-server
     - spring-petclinic-vets-service
     - spring-petclinic-visits-service
   ```

1. 要查看已部署的 PetClinic 示例应用程序，请运行以下命令查找 URL：

   ```
   kubectl get ingress
   ```

### 步骤 4：监控示例应用程序
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-monitor"></a>

完成上一部分中创建 Amazon EKS 集群和部署示例应用程序的步骤后，您可以使用 Application Signals 监控应用程序。

**注意**  
要使 Application Signals 控制台开始填充，必须有一些流量到达示例应用程序。前面的一部分步骤创建了 CloudWatch Synthetics Canary，用于生成示例应用程序的流量。

#### 服务运行状况监控
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-monitor-service"></a>

启用后，CloudWatch Application Signals 会自动发现并填充服务列表，无需任何其他设置。

**查看已发现服务的列表并监控其运行状况**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择 **Application Signals**、**服务**。

1. 要查看服务、其操作和依赖项，请在列表中选择其中一个服务的名称。

   这种以应用程序为中心的统一视图有助于全面了解用户如何与您的服务进行交互。这可以帮助您在出现性能异常时对问题进行分类。有关**服务**视图的完整详细信息，请参阅 [使用 Application Signals 监控应用程序的运行状况](Services.md)。

1. 选择**服务操作**选项卡，查看该服务操作的标准应用程序指标。例如，这些操作是服务调用的 API 操作。

   然后，要查看该服务的单个操作的图表，请选择该操作的名称。

1. 选择**依赖项**选项卡，查看您的应用程序具有的依赖项，以及每个依赖项的关键应用程序指标。依赖项包括您的应用程序调用的 AWS 服务和第三方服务。

1. 要从服务详细信息页面查看相关跟踪，请在表格上方的三个图表中选择一个数据点。这将在新窗格中填充该时间段中经过筛选的跟踪。这些跟踪将根据您选择的图表进行排序和筛选。例如，如果您选择**延迟**图表，则跟踪将按服务响应时间排序。

1. 在 CloudWatch 控制台导航窗格中，选择 **SLO**。您将看到脚本为示例应用程序创建的 SLO。有关 SLO 的更多信息，请参阅 [服务级别目标（SLO）](CloudWatch-ServiceLevelObjectives.md)。

### （可选）第 5 步：清理
<a name="CloudWatch-Application-Signals-Enable-EKS-sample-cleanup"></a>

Application Signals 测试完成后，您可以使用 Amazon 提供的脚本来清理并删除您账户中为示例应用程序创建的构件。要执行清理，请输入以下命令。将 *new-cluster-name* 替换为您为示例应用程序创建的集群名称，并将 *region*-name 替换为 AWS 区域的名称，例如 `us-west-1`。

```
cd application-signals-demo/scripts/eks/appsignals/one-step && ./cleanup.sh new-cluster-name region-name
```