

# 运行时监控问题排查
<a name="ecs-guard-duty-troubleshooting"></a>

您可能需要排查或验证运行时监控是否已启用并在您的任务和容器上运行。

**Topics**
+ [如何判断我的账户上是否激活了运行时监控？](#verify-ecs-runtime-enabled)
+ [如何判断集群上是否激活了运行时监控？](#verify-ecs-runtime-enabled)
+ [如何判断 GuardDuty 安全代理是否正在 Fargate 任务上运行？](#verify-ecs-runtime-fargate-run)
+ [如何判断 GuardDuty 安全代理是否在 EC2 容器实例上运行？](#verify-ecs-runtime-ec2-run)
+ [如果集群上运行的任务没有任务执行角色，会发生什么情况？](#no-task-execution-role)
+ [如何判断我是否拥有标记集群以进行运行时监控的正确权限？](#tag-permissions)
+ [如果没有连接 Amazon ECR 会发生什么情况？](#no-ecr-connection)
+ [启用运行时监控后，如何解决 Fargate 任务中的内存不足错误？](#memory-error)

## 如何判断我的账户上是否激活了运行时监控？
<a name="verify-ecs-runtime-enabled"></a>

在 Amazon ECS 控制台中，信息位于**账户设置**页面上。

您也可以使用 `effective-settings` 选项运行 `list-account-settings`。

```
aws ecs list-account-settings --effective-settings
```

Output

**名称**设置为 `guardDutyActivate`、**值**设置为 `on` 的设置表示账户已配置。您必须向 GuardDuty 管理员核实管理是自动的还是手动的。

```
{
    "setting": {
        "name": "guardDutyActivate",
        "value": "enabled",
        "principalArn": "arn:aws:iam::123456789012:root",
        "type": "aws-managed"
    }
}
```

## 如何判断集群上是否激活了运行时监控？
<a name="verify-ecs-runtime-enabled"></a>

您可以在 GuardDuty 控制台中检查覆盖率统计数据。这包括与您自己的账户或成员账户关联的 Amazon ECS 资源信息，即选定 AWS 区域中运行正常的集群占所有集群的百分比。这包括使用 Fargate 和 EC2 的集群的覆盖率。有关更多信息，请参阅《Amazon GuardDuty 用户指南》中的 [Reviewing coverage statistics](https://docs.aws.amazon.com/guardduty/latest/ug/gdu-assess-coverage-ecs.html#ecs-review-coverage-statistics-ecs-runtime-monitoring)**。

## 如何判断 GuardDuty 安全代理是否正在 Fargate 任务上运行？
<a name="verify-ecs-runtime-fargate-run"></a>

GuardDuty 安全代理作为 Fargate 任务的附加容器运行。

在 Amazon ECS 控制台中，附加容器显示在**任务详细信息**页面的**容器**下。

您可以运行 `describe-tasks` 并查找**名称**设置为 `aws-gd-agent`、**lastStatus** 设置为 `RUNNING` 的容器。

以下示例显示任务 `aws:ecs:us-east-1:123456789012:task/0b69d5c0-d655-4695-98cd-5d2d5EXAMPLE` 的默认集群的输出。

```
aws ecs describe-tasks --cluster default --tasks aws:ecs:us-east-1:123456789012:task/0b69d5c0-d655-4695-98cd-5d2d5EXAMPLE
```

Output

名为 `gd-agent` 的容器处于 `RUNNING` 状态。

```
"containers": [ 
      {
        "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/4df26bb4-f057-467b-a079-96167EXAMPLE", 
        "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/0b69d5c0-d655-4695-98cd-5d2d5EXAMPLE", 
        "lastStatus": "RUNNING",
        "healthStatus": "UNKNOWN",
        "memory": "string",
        "name": "aws-gd-agent" 
      }
    ]
```

## 如何判断 GuardDuty 安全代理是否在 EC2 容器实例上运行？
<a name="verify-ecs-runtime-ec2-run"></a>

运行以下命令以查看状态：

```
sudo systemctl status amazon-guardduty-agent
```

日志文件位于以下位置：

```
/var/log/amzn-guardduty-agent
```

## 如果集群上运行的任务没有任务执行角色，会发生什么情况？
<a name="no-task-execution-role"></a>

对于 Fargate 任务，任务在没有 GuardDuty 安全代理附加容器的情况下启动。GuardDuty 控制面板将在覆盖率统计信息面板中显示任务缺少保护。

## 如何判断我是否拥有标记集群以进行运行时监控的正确权限？
<a name="tag-permissions"></a>

为了标记集群，您必须同时对 `CreateCluster` 和 `UpdateCluster` 执行 `ecs:TagResource` 操作。

以下是示例策略的代码片段。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ecs:TagResource"
      ],
      "Resource": "*",
      "Condition": {
         "StringEquals": {
             "ecs:CreateAction" : "CreateCluster",
             "ecs:CreateAction" : "UpdateCluster",
          }
       }
    }
  ]
}
```

## 如果没有连接 Amazon ECR 会发生什么情况？
<a name="no-ecr-connection"></a>

对于 Fargate 任务，任务在没有 GuardDuty 安全代理附加容器的情况下启动。GuardDuty 控制面板将在覆盖率统计信息面板中显示任务缺少保护。

## 启用运行时监控后，如何解决 Fargate 任务中的内存不足错误？
<a name="memory-error"></a>

GuardDuty 安全代理是轻量级进程。但是，该进程仍会根据工作负载的大小消耗资源。建议使用容器资源跟踪工具，例如 Amazon CloudWatch Container Insights，在集群中暂存 GuardDuty 部署。这些工具可帮助您发现应用程序的 GuardDuty 安全代理的消耗情况。然后，您可以按需要调整 Fargate 任务大小，以避免可能出现的内存不足情况。