运行时监控故障排除常见问题 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

运行时监控故障排除常见问题

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

如何判断我的账户上是否激活了运行时监控?

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

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

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

输出

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

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

如何判断集群上是否激活了运行时监控?

在 Amazon ECS 控制台中,信息位于集群详细信息页面的标签选项卡上。

您也可以使用 TAGS 选项运行 describe-clusters

以下示例显示默认集群的输出

aws ecs describe-clusters --cluster default --include TAGS

输出

设置为 GuardDutyManaged设置为 true 的标签表示集群已配置运行时监控。

{ "clusters": [ { "clusterArn": "arn:aws:ecs:us-east-1:1234567890:cluster/default", "clusterName": "default", "status": "ACTIVE", "registeredContainerInstancesCount": 0, "runningTasksCount": 1, "pendingTasksCount": 0, "activeServicesCount": 0, "statistics": [], "tags": [ { "key": "GuardDutyManaged", "value": "true" } ], "settings": [], "capacityProviders": [], "defaultCapacityProviderStrategy": [] } ], "failures": [] }

如何判断 GuardDuty 安全代理是否正在 Fargate 任务上运行?

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

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

您可以运行 describe-tasks 并查找名称设置为 aws-gd-agentlastStatus 设置为 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

输出

名为 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 容器实例上运行?

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

sudo systemctl status amazon-guardduty-agent

日志文件位于以下位置:

/var/log/amzn-guardduty-agent

如果集群上运行的任务没有任务执行角色,会发生什么情况?

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

如何判断我是否拥有标记集群以进行运行时监控的正确权限?

为了标记集群,您必须同时对 CreateClusterUpdateCluster 执行 ecs:TagResource 操作。

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

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

如果没有连接 Amazon ECR 会发生什么情况?

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

启用运行时监控后,如何解决 Fargate 任务中的内存不足错误?

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