📌  相关文章
📜  Amazon Web Services – 为 EKS 实例生成日志包(1)

📅  最后修改于: 2023-12-03 14:59:13.957000             🧑  作者: Mango

Amazon Web Services – 为 EKS 实例生成日志包

在 Amazon EKS 中,您可以为 EKS 实例中运行的 Pod 启用日志记录,以便监视和故障排除应用程序。在本指南中,我们将介绍如何为 EKS 实例生成日志包。

步骤 1:创建 CloudWatch 日志组

要开始存储和检索 EKS 实例的日志数据,请创建一个 CloudWatch 日志组。在创建时,您可以指定日志组的名称。下面是一个使用 AWS CLI 创建日志组的示例:

aws logs create-log-group --log-group-name my-log-group
步骤 2:为 Kubernetes 集群启用 CloudWatch 日志记录

在 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>

替换 regionlog-group-name 为您自己的值。

步骤 3:为 Pod 配置日志记录

默认情况下,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 控制台,您可以搜索日志并过滤结果,以查找有关应用程序的信息。