如何从 CloudWatch Logs 中检索 Amazon EKS 控制面板日志?
我想从 Amazon Elastic Kubernetes Service (Amazon EKS) 控制面板上运行的组件中收集日志。
解决方法
**先决条件:**要在 Amazon CloudWatch Logs 中查看您的日志事件,您必须在集群中启用 Amazon EKS 控制面板日志。
要访问您的 Amazon EKS 控制面板日志,请使用 CloudWatch Logs Insights。然后,查询 Amazon EKS 控制面板日志数据。
查看您的 Amazon EKS 控制面板日志
完成以下步骤:
- 打开 Amazon CloudWatch 控制台。
- 在导航窗格中,选择 Logs(日志),然后选择 Log Insights。
- 在 Select log group(s)(选择日志组)菜单中,选择要查询的集群日志组。
- 选择 Run(运行)以查看结果。
**注意:**要将结果导出为 .csv 文件或将结果复制到剪贴板,请选择 Export results(导出结果)。要获取特定使用案例的数据,请更改查询示例。
常见 Amazon EKS 使用案例的查询示例
**注意:**您可以在 CloudWatch Logs Insights 中保存并重新运行这些查询。
以下查询是常见 Amazon EKS 使用案例的示例。
查找变异更改
要查找对 aws-auth ConfigMap 所做的变异更改,请运行以下查询:
fields @logStream, @timestamp, @message | filter @logStream like /^kube-apiserver-audit/ | filter requestURI like /\/api\/v1\/namespaces\/kube-system\/configmaps/ | filter objectRef.name = "aws-auth" | filter verb like /(create|delete|patch|update)/ | sort @timestamp desc | limit 50
查找被拒绝的请求
要查找包含 denied 状态的消息,请运行以下查询:
fields @logStream, @timestamp, @message | filter @logStream like /authenticator/ | filter @message like "denied" | sort @timestamp asc | limit 50
查找已调度容器组的节点
要查找您将容器组调度到的节点,请运行以下查询:
fields @timestamp, @message | filter @logStream like /kube-scheduler/ | filter @message like "example-pod-name" | filter @message like "ip-" | sort @timestamp asc | limit 3
**注意:**请将 example-pod-name 替换为您的容器组名称。
查找 HTTP 5xx 服务器错误
要查找 Kubernetes API 服务器请求的 HTTP 5xx 服务器错误,请运行以下查询:
fields @logStream, @timestamp, responseStatus.code, @message | filter @logStream like /^kube-apiserver-audit/ | filter responseStatus.code >= 500 | limit 50
对 CronJob 对象激活问题进行故障排除
要查找 cronjob-controller 执行的 API 操作,请运行以下查询:
fields @logStream, @timestamp, @message | filter @logStream like /kube-apiserver-audit/ | filter user.username like "system:serviceaccount:kube-system:cronjob-controller" | display @logStream, @timestamp, @message, objectRef.namespace, objectRef.name | sort @timestamp desc | limit 50
查找 replicaset-controller API 操作
要查找 replicaset-controller 执行的 API 操作,请运行以下查询:
fields @logStream, @timestamp, @message | filter @logStream like /kube-apiserver-audit/ | filter user.username like "system:serviceaccount:kube-system:replicaset-controller" | display @logStream, @timestamp, requestURI, verb, user.username | sort @timestamp desc | limit 50
查找并统计 HTTP 响应代码
要统计对 Kubernetes API 服务器发起的调用所返回的 HTTP 响应代码的数量,请运行以下查询:
fields @logStream, @timestamp, @message |filter @logStream like /^kube-apiserver-audit/ | stats count(*) as count by responseStatus.code | sort count desc
输出示例:
responseStatus.code,count 200,35066 201,525 403,125 404,116 101,2
**注意:**输出显示,HTTP 200(请求成功)为 35,066 次,HTTP 201(资源已创建)为 525 次,HTTP 403(禁止访问请求)为 125 次。同时还显示 HTTP 404(未找到错误)为 116 次,HTTP 101(切换协议请求)为 2 次。
查找对进程守护程序或附加组件所做的更改
要查找您在 kube-system 命名空间中对进程守护程序或附加组件所做的更改,请运行以下查询:
filter @logStream like /^kube-apiserver-audit/ | fields @logStream, @timestamp, @message | filter verb like /(create|update|delete)/ and strcontains(requestURI,"/apis/apps/v1/namespaces/kube-system/daemonsets") | sort @timestamp desc | limit 50
查找修补、更新、创建和删除调用
要查找与特定部署和部署容器组相关的所有修补、更新、创建和删除调用,请运行以下查询:
fields @timestamp, verb, objectRef.name, objectRef.resource, requestObject.message | filter objectRef.name like /example-deployment-name/ | filter objectRef.resource not like /serviceaccounts/ | filter objectRef.resource not like /events/ | filter verb like /create|delete|patch|update/ | sort @timestamp asc
**注意:**请将 example-deployment-name 替换为您的部署名称。要排除事件,您可以从查询中移除 | filter objectRef.resource not like /events/。
识别删除节点或资源的用户
要查找删除了某个节点的用户,请运行以下查询:
fields @logStream, @timestamp, @message | filter @logStream like /^kube-apiserver-audit/ | filter verb == "delete" and requestURI like "/api/v1/nodes" | sort @timestamp desc | limit 10
要查找删除了某个资源(例如 ConfigMap、容器组或部署)的用户,请运行以下查询:
fields @timestamp,verb, user.username, user.extra.arn.0, user.extra.canonicalArn.0 | filter objectRef.name like /aws-auth/ | filter verb like /delete/ | sort @timestamp asc
**注意:**要查找针对您的容器组的删除调用,请将 aws-auth 替换为您的容器组名称。
查找部署的映像版本
要查找某个部署的映像版本,请运行以下查询:
fields @timestamp, verb, objectRef.name, objectRef.resource | filter objectRef.name like /example-deployment-name/ | filter @message like /image/ | filter objectRef.resource like /deployments/ | parse requestObject.spec.template.spec 'image':*, as image | sort @timestamp asc | limit 10000
**注意:**请将 example-deployment-name 替换为您的部署名称。
识别特定节点的事件
要找到未更新的节点,请运行以下查询:
fields @timestamp, @message, @logStream | sort @timestamp asc | filter @message like "node example-node-name hasn't been updated for"
**注意:**请将 example-node-name 替换为您的节点名称。
要检查特定节点参数的上次转换时间,请运行以下查询:
fields @timestamp | parse responseObject.status.conditions.0 "lastTransitionTime*" as MemoryPressure | parse responseObject.status.conditions.1 "lastTransitionTime*" as DiskPressure | parse responseObject.status.conditions.2 "lastTransitionTime*" as PIDPressure | parse responseObject.status.conditions.3 "lastTransitionTime*" as ReadyStatus | parse responseObject.status.conditions.3 "lastTransitionTime*" as Timepass | filter objectRef.name like /example-node-name/ | filter verb like /patch/ | filter @message like /lastTransitionTime/ | sort @timestamp asc
**注意:**请将 example-node-name 替换为您的节点名称。
识别封锁节点的用户
要查找封锁特定节点或使节点不可调度的用户,请运行以下查询:
fields @timestamp, objectRef.name as node_name, verb,user.username, user.extra.sessionName.0 as name, requestObject.spec.unschedulable as unschedulable_flag| filter @logStream like /kube-apiserver-audit/ | filter @message like /example-node-IP/ | filter verb like /patch/ | filter requestObject.spec.unschedulable like /1/
**注意:**请将 example-node-IP 替换为您的节点的 IP 地址。
识别已删除容器组的 podIP
要查找已删除容器组的 podIP,请运行以下查询:
fields @timestamp,objectRef.name as pod, requestObject.status.podIP as podIP | filter @logStream like /kube-apiserver-audit/ | filter objectRef.name = "example-pod-name" | filter verb like /patch/ | filter ispresent(requestObject.status.podIP) | sort @timestamp asc
**注意:**请将 example-pod-name 替换为您的容器组名称。
查找未知容器组的对象输出
要查看不带容器组名称的已删除容器组的描述输出,请运行以下查询:
fields @timestamp, requestURI, requestObject.message | filter requestURI like '/api/v1/namespaces/example-namespace/events' | filter responseObject.involvedObject.name like /example-deployment-name/ | sort @timestamp asc
**注意:**请将 example-deployment-name 替换为您的部署的名称,并将 example-namespace 替换为您的命名空间。如果多个命名空间中没有同名的多个对象,请移除包含 filter requestURI like 的行。
查找已调度容器组的节点
要查找您将容器组调度到的节点,请运行以下查询:
fields @timestamp, @message | filter @logStream like /kube-scheduler/ | filter @message like "example-pod-name" | filter @message like "ip-" | sort @timestamp asc | limit 3
**注意:**请将 example-pod-name 替换为您的容器组名称。
检查驱逐 API
**注意:**如果 AWS Fargate 操作系统 (OS) 修补操作删除了您的容器组或节点,则审计日志中将出现驱逐 API。
要查看您的审计日志中是否出现驱逐 API,请运行以下查询:
filter @logStream like /kube-apiserver-audit/ | fields @timestamp, user.username,user.extra.canonicalArn.0, responseStatus.code, responseObject.status, responseStatus.message | sort @timestamp asc | filter verb == "create" and objectRef.subresource == 'eviction'
要查找驱逐 API 操作的事件,请运行以下查询:
fields @logStream, @timestamp, @message | sort @timestamp asc | filter user.username == "eks:node-manager" and requestURI like "eviction" and requestURI like "pod"
查找 Fargate 容器组的任务 ID
要查找 Fargate 容器组的任务 ID,请运行以下查询:
fields @timestamp, verb, responseObject.spec.providerID as InstanceID | filter @message like /example-fargate-node-IP/ | filter ispresent(responseObject.spec.providerID)
**注意:**请将 example-fargate-node-IP 替换为您的 Fargate 节点的 IP 地址。
识别收到错误的 URL
要查找收到超过特定数量的 4## 或 5## 错误的 URL,请运行以下查询:
fields requestURI | filter @logStream like "kube-apiserver-audit-i" | filter count > example-filter-count | stats count(*) as count by requestURI, responseStatus.code | filter responseStatus.code >= 400 | sort count desc
**注意:**请将 example-filter-count 替换为查询输出中必须显示的最小错误数。
对 webhook 错误进行故障排除
要查找与 webhook 相关的错误,请运行以下查询:
fields @timestamp, @message | filter @logStream like /kube-apiserver/ and @logStream not like /kube-apiserver-audit/ | filter @message like /failed calling webhook/ | sort @timestamp desc | stats count(*) by bin(1m)
列出失败的 API 服务器运行状况检查
要列出失败的 API 服务器运行状况检查,请运行以下查询:
fields @message | sort @timestamp asc | filter @logStream like "kube-apiserver" | filter @logStream not like "kube-apiserver-audit" | filter @message like "healthz check failed"
统计 Kubernetes 对象和 CloudWatch Logs 的 userAgent 索引数量
要按 Kubernetes 对象和 CloudWatch Logs 的 userAgent 索引统计请求数,请运行以下查询:
fields @timestamp, @message, @logStream | filter @logStream like "kube-apiserver-audit" | display @logStream, requestURI, verb | stats count(*) as count by objectRef.resource, userAgent | sort count desc | display objectRef.resource, userAgent, count
查看频繁出现的日志
要查看出现最频繁的日志,请运行以下查询:
fields @timestamp, @message, @logStream | filter @logStream not like /kube-apiserver-audit/ | parse @message "*] *" as loggingTimeStamp, loggingMessage | stats count(*) as count by loggingMessage | sort count desc
- 语言
- 中文 (简体)

相关内容
AWS 官方已更新 10 个月前
