用户指南

最佳实践

API 文档

使用环境变量配置日志采集

最近更新时间:2021-08-30 16:34:23

操作场景

在弹性容器服务 EKS 中,用户可以通过环境变量配置日志采集,按行采集日志、不解析。也可以通过 自定义资源定义(CustomResourceDefinitions,CRD)的方式配置日志采集

本文介绍如何通过环境变量实现 EKS 集群的日志采集功能。该功能支持将集群内服务的日志发送至 日志服务 CLS 或用户自建 Kafka,适用于需要对 EKS 集群内服务日志进行存储和分析的用户。

EKS 日志采集功能需要在创建工作负载时手动开启。您可根据以下操作开启日志采集功能:

说明事项

EKS 日志采集功能开启后,日志采集 Agent 根据您配置的采集路径和消费端,将采集到的日志以 JSON 的形式发送到您指定的消费端。消费端及采集路径说明如下:

  • 消费端:日志采集服务支持 Kafka 或 CLS 作为日志的消费端。
  • 采集路径:需要采集的日志的路径。采集路径支持采集标准输出(stdout)和绝对路径,支持 * 通配,多个采集路径以“,”分隔。

前提条件

  • 需确认 Kubernetes 集群能够访问日志消费端。
  • 日志长度限制为单条2M,如果超过则会截断。
    注意

    若日志输出速率过快,为避免 OOM,需要调整此参数配置,详情请参见 如何调整日志采集配置

操作步骤

通过控制台配置日志采集

EKS 日志采集功能采集到的日志信息将会以 JSON 格式输出到您指定的消费端,并会附加相关的 Kubernetes metadata,包括容器所属 pod 的 label 和 annotation 等信息。具体操作步骤如下:

  1. 登录 容器服务控制台,选择左侧导航栏中的弹性集群
  2. 进入“弹性集群”页面,选择需要日志采集的集群 ID,进入集群管理页面。
  3. 在左侧“工作负载”中选择需要的工作负载类型,进入对应页面后选择新建
  4. 在“实例内容器”中选择显示高级设置,并勾选“开启”日志采集。如下图所示:
  5. 参考以下信息进行日志消费端配置,您可选择 CLS 或 Kafka 作为日志消费端。
    1. 选择 CLS 作为日志消费端,并选择日志集和日志主题。如下图所示:

      若无合适的日志集,请参考 新建日志集及日志主题
      注意

      日志服务 CLS 目前仅支持同地域的容器集群进行日志采集上报。

    2. 打开日志主题的日志索引。索引配置是使用日志服务 CLS 进行检索分析的必要条件。若未开启,则无法查看日志。配置索引的详细操作,请参见 日志服务配置索引
      您可在 日志服务控制台>日志主题中,选择日志主题名称,在“索引配置”页面开启索引。如下图所示:
  6. 选择角色或者密钥进行授权。
    注意:

    • 同一 pod 下的容器只能选择同一种授权方式,以您最后修改的授权方式为准。例如第一个容器选择了密钥授权,第二个选择了角色授权,最终两个容器都是角色授权。
    • 同一 pod 下的容器只能选择同一个角色授权。
    • 选择具有访问日志服务 CLS 权限的角色名称,如下图所示:

    • 若无合适的角色,创建过程参考以下步骤:
      *新建策略 *
      在新建角色之前,您需要创建一个策略,该策略决定了您的角色具备的权限。

      1. 登录访问管理控制台,在左侧导航栏选择 策略
      2. 在“策略”页面,单击新建自定义策略
      3. 在“选择创建策略方式” 弹窗中,选择按策略生成器创建
      4. 在“可视化策略生成器”中,“服务”选择 “日志服务(cls)”,“操作”选择“写操作:pushLog”,如下图所示:
      5. 单击下一步,进入“关联用户/用户组”页面。
      6. 确认策略名称,单击完成即可创建策略。

      新建角色
      创建策略完成后,需要将该策略绑定至一个角色,使得该角色具备策略相应的权限。

      1. 登录访问管理控制台,在左侧导航栏选择 角色
      2. 在“角色”页面,单击新建角色
      3. 在“选择角色载体” 弹窗中,选择腾讯云产品服务,进入新建自定义角色页面。
      4. 在“输入角色载体信息”步骤中,选择绑定云服务器(cvm)载体,单击下一步
        注意

        必须选择云服务器(cvm)作为角色载体,选择容器服务则无法完成授权。

      5. 在“配置角色策略”步骤中,选择 已创建的策略,单击下一步
      6. 在“审阅”步骤中,输入您的角色名称,审阅您即将创建角色的相关信息,单击完成后即完成自定义角色创建。详情请参见 创建角色
  7. 配置采集路径。如下图所示:

    至此已完成日志采集功能配置,您可按需进行该工作负载的其他配置。

通过 yaml 配置日志采集

本文提供采集日志到 Kafka、通过 secret 采集日志到 CLS 和通过 role 采集日志到 CLS 三种方式,请按需选择:

注意:

若 yaml 中同时配置了密钥和角色授权,pod 实际上采用的是角色授权。

通过增加环境变量开启日志采集。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
   annotations:
     deployment.kubernetes.io/revision: "1"
labels:
     k8s-app: kafka
     qcloud-app: kafka
   name: kafka
   namespace: default
spec:
   replicas: 1
   selector:
     matchLabels:
       k8s-app: kafka
       qcloud-app: kafka
  template:
metadata:
       annotations:
         eks.tke.cloud.tencent.com/cpu: "0.25"
         eks.tke.cloud.tencent.com/mem: "0.5Gi"
labels:
         k8s-app: kafka
         qcloud-app: kafka
     spec:
       containers:
       - env:
         - name: EKS_LOGS_OUTPUT_TYPE
           value: kafka
         - name: EKS_LOGS_KAFKA_BROKERS
           value: 10.0.16.42:9092
         - name: EKS_LOGS_KAFKA_TOPIC
           value: eks
            - name: EKS_LOGS_KAFKA_MESSAGE_KEY     #选填
           valueFrom:
              fieldRef:
                fieldPath: metadata.name
         - name: EKS_LOGS_METADATA_ON
           value: "true"
         - name: EKS_LOGS_LOG_PATHS
           value: stdout,/tmp/busy*.log
         image: busybox:latest
         command: ["/bin/sh"]
         args: ["-c", "while true; do echo hello world; date; echo hello >> /tmp/busy.log; sleep 1; done"]
         imagePullPolicy: Always
         name: while
         resources:
           requests:
             cpu: 250m
             memory: 512Mi
字段说明:

字段名 含义
EKS_LOGS_OUTPUT_TYPE 消费端支持 kafka 和 cls,根据该 key 判断是否启用日志收集。
EKS_LOGS_LOG_PATHS 日志路径,支持 stdout(表示采集标准输出)和绝对路径,支持 * 通配,多个路径用“,”分隔。
EKS_LOGS_METADATA_ON 支持 true 或 false。不填写则默认为 true。
EKS_LOGS_KAFKA_TOPIC 日志主题。
EKS_LOGS_KAFKA_BROKERS kafka brokers,ip1:port1,ip1:port2,ip2:port2格式,多个用“,”分隔。对外用此环境变量,EKS_LOGS_KAFKA_HOST 以后不再对外可见。
EKS_LOGS_KAFKA_MESSAGE_KEY 非必填。支持指定一个 key,将日志投递到指定分区。
  • 对于未开启按 key 投递,日志将随机投递到不同分区里。
  • 开启按 key 投递,带有同样 key 的日志,将投递到相同的分区里。
  • 注意:此处 key 从 Pod 的字段获取变量值,以上示例皆以 Pod name 为例,同时还支持 namespace、PodIP 等,详情可参见 kubernetes 社区文档

    对于开启按 key 投递到 kafka 指定分区,验证方式如下:

    • 未开启时,查询消息不显示 key,如下图所示:
    • 当开启后,查询消息显示 key,如下图所示:

    更新日志采集

    您可通过控制台和 yaml 更新日志采集,请参考以下步骤:

    1. 登录 容器服务控制台,选择左侧导航栏中的弹性集群
    2. 选择需要配置日志采集的集群 ID,进入集群管理页面。
    3. 选择左侧工作负载,单击需要更新日志采集的工作负载所在行右侧的更新Pod配置 > 显示高级设置,修改对应的配置。如下图所示:
    4. 单击完成即可更新。

    常见问题

    如遇问题,您可先查询 弹性集群日志采集相关问题。如果您的问题仍未解决,请 在线咨询 联系我们。

    目录