Logtail支持将采集容器内产生的文本日志,并附加容器的相关元数据信息一起上传到日志服务。

功能特点

相对于基础的日志文件采集,Docker文件采集还具备以下功能特点:

  • 只需配置容器内的日志路径,无需关心该路径到宿主机的映射
  • 支持label指定采集的容器
  • 支持label排除特定容器
  • 支持environment指定采集的容器
  • 支持environment指定排除的容器
  • 支持多行日志(例如java stack日志等)
  • 支持容器数据自动打标
  • 支持Kubernetes容器自动打标

限制说明

  • 采集停止策略。当container被停止后,Logtail监听到容器die的事件后会停止采集该容器日志的采集(延迟1~3秒),若此时采集出现延迟,则可能丢失停止前的部分日志。
  • Docker存储驱动限制。目前只支持overlay、overlay2,其他存储驱动需将日志所在目录mount到本地。
  • Logtail运行方式。必须以容器方式运行Logtail,且遵循Logtail部署方式进行部署。
  • Label。 此处的label为docker inspect中的label信息,并不是Kubernetes配置中的label。
  • Environment。此处的environment为容器启动中配置的environment信息。

配置流程

  1. 部署并配置Logtail容器。
  2. 设置服务端采集配置。

步骤1 Logtail部署和配置

步骤2 设置数据源

  1. Logstore列表单击数据接入向导图标,进入配置流程。
  2. 选择数据类型。

    单击自建软件中的Docker文件,并单击下一步

  3. 设置数据源。
    配置项 是否必选 说明
    是否为Docker文件 必须勾选 确认采集的目标文件是否为Docker文件。
    Label白名单 可选 每项中LabelKey必填,若LabelValue不为空,则只采集容器label中包含LabelKey=LabelValue的容器;若LabelValue为空,则采集所有label中包含LabelKey的容器。
    说明
    1. 多个键值对间为或关系,即只要容器的label满足任一键值对即可被采集。
    2. 此处的label为docker inspect中的label信息。
    Label黑名单 可选 每项中LabelKey必填,若LabelValue不为空,则只排除容器label中包含LabelKey=LabelValue的容器;若LabelValue为空,则排除所有label中包含LabelKey的容器。
    说明
    1. 多个键值对间为或关系,即只要容器的label满足任一键值对即可被排除。
    2. 此处的label为docker inspect中的label信息。
    环境变量白名单 可选 每项中EnvKey必填,若EnvValue不为空,则只采集容器环境变量中包含EnvKey=EnvValue的容器;若EnvValue为空,则采集所有环境变量中包含EnvKey的容器。
    说明
    • 多个键值对间为或关系,即只要容器的环境变量满足任一键值对即可被采集。
    • 此处的environment为容器启动中配置的environment信息。
    环境变量黑名单 可选 每项中EnvKey必填,若EnvValue不为空,则只排除容器环境变量中包含EnvKey=EnvValue的容器;若EnvValue为空,则排除所有环境变量中包含EnvKey的容器。
    说明
    • 多个键值对间为或关系,即只要容器的环境变量满足任一键值对即可被排除。
    • 此处的environment为容器启动中配置的environment信息。
    其他配置项 - 其他采集配置以及参数说明见文本日志
    说明
    • 本文中label白名单、黑名单与Kubernetes中定义的label不是同一概念,本文档中的label为Docker inspect中的label信息。
    • Kubernetes中的namespace和容器名会映射到docker的label中,分别为io.kubernetes.pod.namespaceio.kubernetes.container.name。例如您创建的pod所属namespace为backend-prod,容器名为worker-server,则可以配置2个label白名单以指定只采集该容器的日志,分别为 io.kubernetes.pod.namespace : backend-prodio.kubernetes.container.name : worker-server
    • Kubernetes中除io.kubernetes.pod.namespaceio.kubernetes.container.name外不建议使用其他label。其他情况请使用环境变量白名单或黑名单。
  4. 应用到机器组。

    进入应用到机器组页面。请在此处勾选需要采集的Logtail机器组,并单击右下角的应用到机器组。如您之前没有创建过机器组,单击+创建机器组以创建一个新的机器组。

  5. 完成容器文本日志接入流程。

    如您需要开启检索分析、投递配置等功能,请按照页面提示继续配置。

配置示例

  • environment 配置方式

    采集environment为NGINX_PORT_80_TCP_PORT=80且environment不为POD_NAMESPACE=kube-system的容器日志,日志文件路径为/var/log/nginx/access.log,日志解析方式为极简类型。

    说明 此处的environment为容器启动中配置的environment信息。
    图 1. environment 配置方式示例


    本示例中数据源配置如下。其他采集配置以及参数说明见文本日志

    图 2. 数据源配置示例


  • label 配置方式
    采集label为 io.kubernetes.container.name=nginx的容器日志,日志文件路径为 /var/log/nginx/access.log,日志解析方式为极简类型。
    说明 此处的label为docker inspect中的label信息,并不是Kubernetes配置中的label。
    图 3. label方式示例


    本示例中数据源配置如下。其他采集配置以及参数说明见文本日志

    图 4. 数据源配置


默认字段

普通Docker

每条日志默认上传以下字段:

字段名 说明
_image_name_ 镜像名
_container_name_ 容器名
_container_ip_ 容器IP地址
Kubernetes

若该集群为Kubernetes,则默认每条日志上传以下字段:

字段名 说明
_image_name_ 镜像名
_container_name_ 容器名
_pod_name_ pod名
_namespace_ pod所在命名空间
_pod_uid_ pod的唯一标识
_container_ip_ pod的IP地址