采集K8s集群文本日志(Sidecar方式部署Logtail)

更新时间:2025-03-04 07:11:29

日志服务提供DaemonSetSidecar两种方式部署Logtail以供采集K8s日志,两种方式的差异请参考K8s集群场景Logtail安装采集指引。本文介绍如何通过Sidecar方式采集K8s集群文本日志。

前提条件

操作步骤

本文以阿里云ACK托管集群为例,介绍使用Sidecar方式采集K8s集群日志时的三个步骤:

  1. 为业务Pod注入Logtail容器:每个容器组(Pod)运行一个Logtail容器,用于采集当前容器组(Pod)所有容器(Containers)的日志。不同Pod的日志采集相互隔离。

  2. 创建用户自定义标识机器组:为每个容器组(Pod)创建自己的机器组,日志服务通过机器组的方式管理所有需要通过Logtail采集日志的容器。

  3. 创建Logtail采集配置:Logtail组件会根据采集配置将增量日志采集并处理后上传到Logstore中。

  4. 查询分析日志:您可以在目标Logstore查看日志数据。

步骤一:为业务Pod注入Logtail容器

自建集群和ACK集群只有登录方式不同,其他步骤一样。

  1. 登录容器服务管理控制台在左侧导航栏中,单击集群列表单击目标集群操作列下的更多,然后单击管理集群image

  2. 在您已有的业务容器YAML中添加如下内容:

    注入Logtail容器所需YAML配置

    ...
        #  containers:
          #  在您的YAML中containers标签下增加如下内容,将业务容器的日志目录挂载到共享存储卷,与Logtail容器共享
              volumeMounts: 
                - name: ${shared_volume_name} 
                  mountPath: ${shared_volume_path} # 挂载共享存储卷到容器的日志目录
                - mountPath: /tasksite #与 Logtail容器通信的共享目录
                  name: tasksite
            #新增一个Logtail sidecar 容器
            - name: logtail
              image: ${logtail_image}
              command: ["/bin/sh", "-c"]
              args:
                - /etc/init.d/ilogtaild start;
                  sleep 10; # 等待 Logtail 配置下载完成
                  touch /tasksite/cornerstone;
                  until [[ -f /tasksite/tombstone ]]; do sleep 1; done;
                  sleep 10; # 等待 Logtail 完成日志发送
                  /etc/init.d/ilogtaild stop;
              livenessProbe:
                exec:
                  command:
                    - /etc/init.d/ilogtaild
                    - status
                initialDelaySeconds: 30
                periodSeconds: 30
              env:
                # 设置时区。请根据kubernetes集群所在地域,配置时区,格式为"地区/城市"。如果是中国内地,可以设置时区为Asia/Shanghai。
                # 如果没有正确配置时区,可能导致原始日志与处理日志的时间标签不匹配,进而将日志数据归档到错误的时间点。
                - name: TZ   
                  value: "${timezone}"
                - name: ALIYUN_LOGTAIL_USER_ID
                  value: "${your_aliyun_user_id}"
                - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
                  value: "${your_machine_group_user_defined_id}"
                - name: ALIYUN_LOGTAIL_CONFIG
                  value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
                # 追加 Pod 环境信息作为日志标签
                - name: "ALIYUN_LOG_ENV_TAGS"
                  value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
                # 获取 Pod 和 Node 的信息
                - name: "_pod_name_"
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: "_pod_ip_"
                  valueFrom:
                    fieldRef:
                      fieldPath: status.podIP
                - name: "_namespace_"
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: "_node_name_"
                  valueFrom:
                    fieldRef:
                      fieldPath: spec.nodeName
                - name: "_node_ip_"
                  valueFrom:
                    fieldRef:
                      fieldPath: status.hostIP
              volumeMounts:
                # Logtail 容器的日志目录挂载到共享存储卷
                - name: ${shared_volume_name}
                  mountPath: ${dir_containing_your_files}
                # 与业务容器交互的挂载点
                - mountPath: /tasksite
                  name: tasksite
          volumes:
            # 定义空的共享存储卷用于日志存储
            - name: ${shared_volume_name}
              emptyDir: {}
            # 定义存储卷用于容器间通信
            - name: tasksite
              emptyDir:
                medium: Memory

    关键参数说明

    变量

    说明

    ${timezone}

    设置容器时区。更多信息,请参见支持时区

    ${your_aliyun_user_id}

    设置为您的阿里云账号(主账号)ID。更多信息,请参见配置用户标识

    ${your_machine_group_user_defined_id}

    自定义设置机器组的自定义标识,用于创建自定义机器组。例如nginx-log-sidecar

    重要

    请确保该标识在您的Project所在地域内唯一。

    ${your_region_config}

    请根据日志服务Project所在地域和访问的网络类型填写。其中,地域信息请参见开服地域

    • 示例:若Project位于华东1(杭州),则以阿里云内网访问时为cn-hangzhou,公网访问时使用cn-hangzhou-internet

    ${logtail_image}

    Logtail镜像地址。例如registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest

    ${shared_volume_name}

    自定义设置卷的名称。

    重要

    volumeMounts节点下的name参数与volumes节点下的name参数需设置为一致,即确保Logtail容器和业务容器挂载相同的卷上。

    ${dir_containing_your_files}

    设置挂载路径,即容器待采集文本日志所在目录。

    若您没有现有的业务容器或仅为了测试操作流程,本文也为您提供一个YAML示例:您只需修改示例中的ALIYUN_LOGTAIL_USER_ID为您的阿里云主账号ID,并保证ALIYUN_LOGTAIL_CONFIG中地域${region_id}与您的日志服务Project的地域一致即可,取值请参见开服地域后替换。

    YAML示例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        deployment.kubernetes.io/revision: '1'
      labels:
        app: deployment-file
        cluster_label: CLUSTER-LABEL-A
      name: deployment-file
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: deployment-file
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: deployment-file
            cluster_label: CLUSTER-LABEL-A
        spec:
          containers:
            - name: timestamp-test
              image: 'mirrors-ssl.aliyuncs.com/busybox:latest'
              args:
                - >-
                  while true; mkdir -p /root/log; do date '+%Y-%m-%d %H:%M:%S'
                  >>/root/log/timestamp.log; echo 1 >>/root/log/timestamp.log; echo
                  2 >>/root/log/timestamp.log; echo 3 >>/root/log/timestamp.log;
                  echo 4 >>/root/log/timestamp.log; echo 5
                  >>/root/log/timestamp.log; echo 6 >>/root/log/timestamp.log;
                  echo 7 >>/root/log/timestamp.log; echo 8
                  >>/root/log/timestamp.log; echo 9 >>/root/log/timestamp.log;
                  sleep 10; done
              command:
                - /bin/sh
                - '-c'
                - '--'
              env:
                - name: cluster_id
                  value: CLUSTER-A
              imagePullPolicy: IfNotPresent
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
                # 业务容器的日志目录挂载到共享存储卷
                - name: test-logs
                  mountPath: /root/log
                 # 与 Logtail 容器交互的挂载点
                - mountPath: /tasksite
                  name: tasksite
                - name: tz-config
                  mountPath: /etc/localtime
                  readOnly: true
            # Logtail sidecar 容器
            - name: logtail
              image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:v1.8.7.0-aliyun
              command: ["/bin/sh", "-c"]
              args:
                - /etc/init.d/ilogtaild start;
                  sleep 10;
                  touch /tasksite/cornerstone;
                  until [[ -f /tasksite/tombstone ]]; do sleep 1; done;
                  sleep 10;
                  /etc/init.d/ilogtaild stop;
              livenessProbe:
                exec:
                  command:
                    - /etc/init.d/ilogtaild
                    - status
                initialDelaySeconds: 30
                periodSeconds: 30
              resources:
                limits:
                  cpu: 500m
                  memory: 512Mi
                requests:
                  cpu: 10m
                  memory: 30Mi
              env:
                # 设置时区。请根据kubernetes集群所在地域,配置时区,格式为"地区/城市"。如果是中国内地,可以设置时区为Asia/Shanghai。
                # 如果没有正确配置时区,可能导致原始日志与处理日志的时间标签不匹配,进而将日志数据归档到错误的时间点。
                - name: TZ
                  value: "Asia/Shanghai"
                # 在这里替换为实际的环境变量值
                - name: ALIYUN_LOGTAIL_USER_ID
                  value: "12************80"
                - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
                  value: "nginx-log-sidecar"
                - name: ALIYUN_LOGTAIL_CONFIG
                  value: "/etc/ilogtail/conf/${region_id}-internet/ilogtail_config.json"
                # 追加 Pod 环境信息作为日志标签
                - name: "ALIYUN_LOG_ENV_TAGS"
                  value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
                # 获取 Pod 和 Node 的信息
                - name: "_pod_name_"
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: "_pod_ip_"
                  valueFrom:
                    fieldRef:
                      fieldPath: status.podIP
                - name: "_namespace_"
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: "_node_name_"
                  valueFrom:
                    fieldRef:
                      fieldPath: spec.nodeName
                - name: "_node_ip_"
                  valueFrom:
                    fieldRef:
                      fieldPath: status.hostIP
              volumeMounts:
                # Logtail 容器的日志目录挂载到共享存储卷
                - name: test-logs
                  mountPath: /root/log
          volumes:
            # 定义空的共享存储卷用于日志存储
            - name: test-logs
              emptyDir: {}
              # 定义存储卷用于容器间通信
            - name: tasksite
              emptyDir:
                medium: Memory
            - name: tz-config
              hostPath:
                path: /usr/share/zoneinfo/Asia/Shanghai  # 主机上的时区文件
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
  3. 执行kubectl apply -f <YOUR-YAML>使配置生效。

  4. 执行 kubectl describe pod <YOUR-POD-NAME>,得到如下信息说明Logtail容器注入成功。image

步骤二:创建用户自定义标识机器组

重要

YAML${your_machine_group_user_defined_id}为用户自定义标识,本文示例值为nginx-log-sidecar

  1. 登录日志服务控制台,在Project列表,单击打开目标Project。

  2. 左侧导航栏中,选择资源 > 机器组。在打开的机器组页面中,选择机器组右侧的机器组 > 创建机器组image

  3. 在弹出的创建机器组页面,填写以下信息,并单击确定

    参数

    说明

    参数

    说明

    名称

    机器组名称,命名规则如下所示:

    • 只能包括小写字母、数字、短划线(-)和下划线(_)。

    • 必须以小写字母或者数字开头和结尾。

    • 长度必须在 2~128 字符之间。

    重要

    创建后,不支持修改机器组名称,请谨慎填写。

    机器组标识

    选择用户自定义标识

    机器组Topic

    (可选)机器组Topic用于区分不同服务器产生的日志数据。更多信息,请参见日志主题

    用户自定义标识

    填入上述步骤中配置的用户自定义标识。本文示例值为nginx-log-sidecar

步骤三:创建Logtail采集配置

  1. 登录日志服务控制台

  2. 单击控制台右侧的快速接入数据,在接入数据区域单击Kubernetes-文件卡片。

    image

  3. 选择目标ProjectLogstore,单击下一步

  4. 机器组配置页面完成如下操作。机器组相关信息,请参见机器组

    1. 根据实际场景,单击以下页签:

      • K8s场景 > Sidecar

    2. 确认目标机器组已在应用机器组列表中,然后单击下一步。该机器组为步骤二创建的用户自定义标识机器组。如果机器组心跳为FAIL或无机器信息,您可单击自动重试,若仍为FAIL,请检查YAMLALIYUN_LOGTAIL_CONFIG的地域是否与Project一致。如果问题仍未解决,请参见Logtail机器组无心跳进行排查。

  5. 创建Logtail采集配置,单击下一步创建Logtail采集配置,日志服务开始采集日志。

    说明

    Logtail采集配置生效时间最长需要3分钟,请耐心等待。

    此处仅介绍必须配置,详细配置请参见Logtail采集配置

    • 全局配置

      配置名称:Logtail配置名称,在其所属Project内必须唯一。创建Logtail配置成功后,无法修改其名称。

      image

    • 输入配置

      • Logtail部署模式:选择Sidecar

      • 文件路径类型:选择待采集的容器路径。

      • 文件路径:目录名和文件名均支持完整模式和通配符模式,其中日志路径通配符只支持星号(*)和半角问号(?)。本例目录值为YAML中的${dir_containing_your_files}

        • /apsara/nuwa/**/*.log表示/apsara/nuwa目录(包含该目录的递归子目录)中后缀名为.log的文件。

      image

    • 处理配置

      • 日志样例:支持多条日志;添加日志样例可协助您配置日志处理相关参数,降低配置难度,建议添加。

      • 多行模式:本示例为采集多行日志,请打开此功能。

        • 类型,选择自定义

        • 切分失败处理方式,选择保留单行

      • 行首正则表达式

        单击自动生成表达式,单击验证,验证正则合规性。

      • 处理模式,选择。有关处理插件的更多信息,请参见处理插件概述

  6. 创建索引预览数据,然后单击下一步。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引

    重要

    如果需要查询日志中的所有字段,建议使用全文索引。如果只需查询部分字段、建议使用字段索引,减少索引流量。如果需要对字段进行分析(SELECT语句),必须创建字段索引。

步骤四:查询分析日志

  1. Project列表中,单击目标Project,进入对应的Project详情页面。

    image

  2. 在对应的日志库右侧的图标图标,选择查询分析,查看Kubernetes集群输出的日志。

    image

容器日志文本默认字段

每条容器文本日志默认包含的字段如下表所示。

字段名称

说明

字段名称

说明

__tag__:__hostname__

容器宿主机的名称。

__tag__:__path__

容器内日志文件的路径。

__tag__:_container_ip_

容器的IP地址。

__tag__:_image_name_

容器使用的镜像名称。

__tag__:_pod_name_

Pod的名称。

__tag__:_namespace_

Pod所属的命名空间。

__tag__:_pod_uid_

Pod的唯一标识符(UID)。

相关文档

  • 当您完成日志内容的采集后,您可以在日志服务中使用可视化功能, 来帮助您直观的统计与了解日志情况,请参考快速创建仪表盘

  • 当您完成日志内容的采集后,您可以在日志服务中使用告警功能, 来自动提醒您日志中的异常情况,请参考快速设置日志告警

  • 日志服务仅采集增量日志,历史日志文件采集请参见导入历史日志文件

  • 容器采集异常排查思路:

  • 本页导读 (1)
  • 前提条件
  • 操作步骤
  • 步骤一:为业务Pod注入Logtail容器
  • 步骤二:创建用户自定义标识机器组
  • 步骤三:创建Logtail采集配置
  • 步骤四:查询分析日志
  • 容器日志文本默认字段
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等