tencent cloud

文档反馈

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

最后更新时间:2022-09-23 11:50:22

    操作场景

    在 TKE Serverless 集群中,用户可以通过环境变量配置日志采集,按行采集日志、不解析。也可以通过 自定义资源定义(CustomResourceDefinitions,CRD)的方式配置日志采集

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

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

    说明事项

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

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

    前提条件

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

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

    操作步骤

    通过控制台配置日志采集

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

    1. 登录 容器服务控制台,选择左侧导航栏中的集群

    2. 在集群管理页面,单击 Serverless 集群 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. 在集群管理页面,单击 Serverless 集群 ID,进入集群详情页。
    3. 选择左侧工作负载,单击需要更新日志采集的工作负载所在行右侧的更新Pod配置 > 显示高级设置,修改对应的配置。如下图所示:
    4. 单击完成即可更新。

    常见问题

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

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持