本文介绍如何在控制台上创建Logtail配置,并以DaemonSet方式采集容器文件日志。

前提条件

已安装Logtail组件。具体操作,请参见安装Logtail组件

功能特点

Logtail支持将容器产生的文本日志和容器相关的元数据信息一起上传到日志服务。Logtail具备以下功能特点。
  • 只需配置容器内的日志文件路径,无需关心该路径到宿主机的映射。
  • 支持通过容器Label白名单指定待采集的容器。
  • 支持通过容器Label黑名单排除不要采集的容器。
  • 支持通过环境变量白名单指定待采集的容器。
  • 支持通过环境变量黑名单排除不要采集的容器。
  • 支持采集多行日志(例如Java Stack日志)。
  • 支持上报容器日志时自动关联Meta信息(例如容器名、镜像、Pod、Namespace、环境变量等)。
  • 当容器运行于Kubernetes时,Logtail还具有以下功能。
    • 支持通过Kubernetes Namespace名称、Pod名称、容器名称指定待采集的容器。
    • 支持通过Kubernetes Label白名单指定待采集的容器。
    • 支持通过Kubernetes Label黑名单排除不要采集的容器。
    • 支持上报容器日志时自动关联Kubernetes Label信息。

限制说明

  • 采集停止策略:当容器被停止后,Logtail监听到容器die的事件后会停止该容器日志的采集。如果此时采集出现延迟,则可能丢失停止前的部分日志。
  • Docker存储驱动限制:目前只支持overlay、overlay2,其他存储驱动需将日志所在目录通过数据卷挂载为临时目录。

    如果日志目录是以PVC方式挂载到NAS,则不支持使用Daemonset方式采集日志,建议使用Sidecar方式采集。

  • 不支持采集软链接:目前Logtail无法访问业务容器的软链接,请按真实路径配置采集目录。
  • 如果业务容器的数据目录是通过数据卷(Volume)挂载的,则不支持采集它的父目录,需设置采集目录为完整的数据目录。

    例如/var/log/service目录是数据卷挂载的路径,则设置采集目录为/var/log将采集不到该目录下的日志,需设置采集目录为/var/log/service

  • Kubernetes默认将宿主机根目录挂载到Logtail容器的/logtail_host目录。如果您要采集宿主机文本日志,则配置日志文件路径时,需加上/logtail_host前缀。

    例如需要采集宿主机上/home/logs/app_log/目录下的日志,则设置日志路径为/logtail_host/home/logs/app_log/

  • Logtail支持Docker和Containerd两种容器引擎的数据采集,访问路径说明如下:
    • Docker:Logtail通过/run/docker.sock访问Docker,请确保该路径存在且具备访问权限。
    • Containerd:Logtail通过/run/containerd/containerd.sock访问Containerd,请确保该路径存在且具备访问权限。

创建Logtail采集配置

  1. 登录日志服务控制台
  2. 接入数据区域,单击Kubernetes-文件
  3. 选择目标Project和Logstore,单击下一步
    选择您在安装Logtail组件时所使用的Project。Logstore为您自定义创建的Logstore。
  4. 单击使用现有机器组
    安装Logtail组件后,日志服务自动创建名为k8s-group-${your_k8s_cluster_id}的机器组,您可以直接使用该机器组。
  5. 选中目标机器组(k8s-group-${your_k8s_cluster_id}),将该机器组从源机器组移动到应用机器组,单击下一步
    注意 如果机器组心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。
  6. 设置Logtail采集配置,单击下一步
    1. 设置基本信息(例如配置名称、日志路径、模式等)。更多信息,请参见采集文本日志
    2. 打开是否为Docker文件的开关。
    3. 可选:设置容器过滤条件。
      • Logtail 1.0.34以下版本,只支持通过环境变量、容器Label进行容器过滤。详细说明,如下表所示。

        Kubernetes中的命名空间名和容器名会映射到容器Label中,分别为io.kubernetes.pod.namespaceio.kubernetes.container.name。推荐使用这两个容器Label进行容器过滤。如果这两个容器Label未满足需求,请使用环境变量的黑白名单进行容器过滤。例如某Pod所