跳至内容

如何对 Amazon EKS 中的日志记录问题进行故障排除?

3 分钟阅读
0

我想解决开启登录 Amazon Elastic Kubernetes Service (Amazon EKS) 集群时出现的问题。

解决方法

在进行故障排除之前,请确保您的应用程序写入日志。

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。

验证网络配置是否正确

验证您的 Amazon Virtual Private Cloud (Amazon VPC) 子网和安全组的网络配置是否正确。请检查以下事项:

  • 如果您使用互联网网关,请确认它与路由表正确关联。此外,请确认传入或传出的网络流量路由正确。
  • 如果您使用 NAT 网关,请确认其在公有子网中配置正确。然后验证关联的路由表的路由是否正确。
  • 如果您的私有集群具有有限互联网访问权限,请确保您的集群拥有附加正确策略的 com.amazonaws.region.logs VPC 接口端点。
  • 如果您有服务账户,您可能已经使用 AWS Identity and Access Management (IAM) 角色配置了容器组。如果没有出站互联网接入,则必须在您的 VPC 中使用 AWS Security Token Service (AWS STS) VPC 端点 com.amazonaws.region.logs。
  • 您可能需要从私有 Amazon Elastic Container Registry (Amazon ECR) 存储库中提取映像。如果您没有 NAT 网关或出站互联网接入,则需要以下 VPC 端点和 Amazon Simple Storage Service (Amazon S3) 网关端点:
    com.amazonaws.region-code.s3
    com.amazonaws.region-code.ecr.api
    com.amazon.region-code.ecr.dkr
  • VPC 端点的安全组必须具有允许来自端口 443 的流量的入站规则。此外,确认节点安全组允许流向 VPC 端点的出站流量。

验证容器组是否有足够的权限

如果您为服务账户使用具有 IAM 角色的容器组,请检查您是否为服务账户添加了正确的 IAM 角色注释。然后,确认是否为集群创建了 IAM OpenID Connect (OIDC) 提供商。

要检查服务账户的 IAM 角色和权限,请完成以下步骤:

  1. 描述服务账户的 IAM 角色,然后确认存在以下注释。运行以下命令:

    eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/YOUR-ROLE-NAME

    **注意:**将 YOUR-ROLE-NAME 替换为您的账户的 IAM 角色的名称。

  2. 确认 IAM 角色已附加 CloudWatchAgentServerPolicy。或者,确认其策略具有相同权限。如果没有,请确保节点角色附加了 CloudWatchAgentServerPolicy。

对 Fluent Bit 配置进行故障排除

如果您已安装 Fluent Bit 日志路由器,请确认容器组正在运行并且系统正在向 Amazon CloudWatch 发送日志。否则,您的 IAM 权限或网络可能会出现问题。

要对 Fluent Bit 部署和配置进行故障排除,请验证以下内容:

要检查您已安装 Fluent Bit 的命名空间中的容器组,请运行以下命令:

kubectl get pods -n NAMESPACE

**注意:**将 NAMESPACE 替换为您的命名空间的名称。

如果您的节点有污点,请确保容器组配置了容忍度。

如果容器组处于 RUNNING(正在运行)以外的状态,请运行以下命令来检查容器组事件:

kubectl describe pod POD_NAME -n NAMESPACE

**注意:**将 POD_NAME 替换为您的容器组的名称,将 NAMESPACE 替换为您的命名空间的名称。

要检查容器组日志中是否存在错误,请运行以下命令:

kubectl logs POD_NAME -n NAMESPACE

**注意:**将 POD_NAME 替换为您的容器组的名称,将 NAMESPACE 替换为您的命名空间的名称。

默认情况下,Fluent Bit 的日志级别设置为信息。如果您想获得更多详情,请将其配置为调试。有关详细信息,请参阅 Fluent Bit 网站上的 Configuration file(配置文件)。

要查看您的 Fluent Bit ConfigMap 配置,请运行以下命令:

kubectl get cm CONFIGMAP_NAME -n NAMESPACE -o yaml

**注意:**将 CONFIGMAP_NAME 替换为您的 ConfigMap 的名称,将 NAMESPACE 替换为您的命名空间的名称。

根据配置的目标,验证与服务账户关联的节点角色或角色是否具有正确的 IAM 权限。

对 CloudWatch 代理进行故障排除

验证节点 IAM 角色是否拥有必要的权限。如果您使用具有服务账户角色的 IAM 角色,请确保您创建了 OIDC 提供商以及 IAM 角色和策略。验证服务账户是否使用适当的 IAM 角色进行注释。

确认 cloudwatch-agent DaemonSet 容器组正常运行。如果您的节点有污点,请确认容器组配置了容忍度。要获取容器组列表,请运行以下命令:

kubectl logs POD_NAME -n amazon-cloudwatch

**注意:**请将 POD_NAME 替换为您的容器组的名称。

如果容器组处于 RUNNING(正在运行)以外的状态,请运行以下命令来检查容器组事件。运行以下命令:

kubectl describe pod POD_NAME -n amazon-cloudwatch

**注意:**请将 POD_NAME 替换为您的容器组的名称。

确认您在 ConfigMap 中正确设置了集群名称。要检查日志中是否存在容器组,请运行以下命令:

kubectl logs POD_NAME -n amazon-cloudwatch

**注意:**请将 POD_NAME 替换为您的容器组的名称。

如果您在 DaemonSet 中使用公共映像,请确保您的节点可以访问互联网。如果您使用私有存储库中的图像,请确认允许所需的流量。

解决 Fargate 集群上的日志记录问题

**注意:**AWS Fargate 日志记录不支持 ConfigMap 的动态配置。更改不适用于现有容器组,因此对 ConfigMap 的任何更改仅适用于新的容器组。

要检查您是否创建了带有 aws-observability: enabled 标签的名为 aws-observability 的命名空间,请运行以下命令:

kubectl get ns aws-observability -o yaml

确认您在 Fargate 配置文件的容器组执行角色中指定了正确的 IAM 策略。例如,如果您要向 CloudWatch 发送日志,请确保容器组执行角色具有以下权限:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogStream",
            "logs:CreateLogGroup",
            "logs:DescribeLogStreams",
            "logs:PutLogEvents",
            "logs:PutRetentionPolicy"
        ],
        "Resource": "*"
    }]
}

确认您在 aws-observability 命名空间中正确创建了 ConfigMap。验证 ConfigMap 是否符合 Fargate 用于验证字段的规则。

如果您缺少 Fluent Bit 进程日志,请确认您在 ConfigMap 中设置了 flb_log_cw: "true"。

对 Amazon EKS 中的 CloudWatch 可观测性插件进行故障排除

如果 Amazon EKS 中的 CloudWatch 可观测性插件使用服务账户的 IAM 角色,请确认您为集群创建了 OIDC 提供商。然后,确认您使用正确的角色配置了服务账户。该角色必须附加 CloudWatchAgentServerPolicy 策略。

如果您使用 AWS 管理控制台安装托管插件,请确认该插件的容器组和状态在控制台中处于活动状态。如果插件处于失败状态,请检查失败的原因。同样,如果您使用 Helm 安装插件,请确认 Helm 安装成功。

如果您发现现有资源出现故障,则可能已经安装了该插件所需的组件。如果您之前安装了 CloudWatch 代理,请在安装插件之前将其从集群中移除。在安装插件之前,您还必须为对原始 CloudWatch 代理所做的任何自定义或修改创建备份。安装或更新插件或 Helm 图表后,您可以重新应用自定义设置。

相关信息

如何解决 Amazon ECS 或 Amazon EKS 容器日志缺失的问题?

如何在 Amazon EKS 集群上启用 Container Insights 指标?

AWS 官方已更新 1 年前