📅  最后修改于: 2023-12-03 14:59:13.957000             🧑  作者: Mango
在 Amazon EKS 中,您可以为 EKS 实例中运行的 Pod 启用日志记录,以便监视和故障排除应用程序。在本指南中,我们将介绍如何为 EKS 实例生成日志包。
要开始存储和检索 EKS 实例的日志数据,请创建一个 CloudWatch 日志组。在创建时,您可以指定日志组的名称。下面是一个使用 AWS CLI 创建日志组的示例:
aws logs create-log-group --log-group-name my-log-group
在 EKS 中,您可以通过 Kubernetes DaemonSet 启用 CloudWatch 日志记录。DaemonSet 将在每个节点上运行一个 pod,并将日志数据发送到指定的 CloudWatch 日志组。
在 AWS 控制台中,导航到 EKS 集群,选择“Add-ons”,然后选择“Amazon CloudWatch Logs”。按照屏幕上的指示完成向导。
如果您使用 YAML 定义文件部署 EKS 集群,则可以将以下示例部署清单添加到您的 YAML 文件中:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: kube-system
name: aws-cloudwatch
data:
awslogs-region: <region>
awslogs-group: <log-group-name>
awslogs-stream-prefix: kubernetes-<cluster-name>-default
fluent.conf: |
<source>
@type tail
path /var/log/containers/*<kube-system=default>/*<name>*.log
pos_file /var/log/es-containers.log.pos
tag raw.kubernetes.*
read_from_head true
<parse>
@type multi_format
<pattern>
format json
time_key time
time_format %Y-%m-%dT%H:%M:%S.%NZ
keep_time_key true
types payload:@json
</pattern>
<pattern>
format none
</pattern>
</parse>
</source>
<filter raw.kubernetes.**>
@type kubernetes_metadata
</filter>
<filter raw.kubernetes.**>
@type fluentd-cloudwatch
log_group_name "#{ENV['MY_LOG_GROUP']}"
auto_create_group true
region "#{ENV['AWS_REGION']}"
log_stream_name_key kubernetes_pod_name
remove_keys kubernetes.*
# reserved_field_indices is for v0.12 or earlier
reserved_field_indices 0,1,2,3,4,5,6
# For v0.14 or later, use reserved_log_level_key instead of reserved_field_indices
# reserved_log_level_key log_level
</filter>
替换 region
和 log-group-name
为您自己的值。
默认情况下,Kubernetes 集群会将所有 Pod 的 stdout 和 stderr 输出到容器日志中。您可以配置 Pod,使其将日志输出到 CloudWatch 日志组。
在 Pod 规范中,您可以配置 logs
配置,指定应该将日志发送到哪个 CloudWatch 日志组。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image:latest
imagePullPolicy: Always
command: ["echo", "hello world"]
logs:
- name: cloudwatch
image: amazon/aws-cli
command: ["/bin/sh", "-c", "aws logs create-log-stream --log-group-name my-log-group --log-stream-name my-log-stream && tail -f /dev/null"]
在上面的示例中,我们在 Pod 规范中指定了一个名为 cloudwatch
的日志记录器。这个日志记录器使用 amazon/aws-cli
镜像,在容器中运行一个 tail -f
命令来将日志数据发送到 CloudWatch 日志组中。
现在,您已经为 EKS 实例生成了日志包。通过 CloudWatch 控制台,您可以搜索日志并过滤结果,以查找有关应用程序的信息。