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. 设置服务端采集配置。

Logtail部署和配置

采集配置步骤

  1. 登录日志服务控制台,单击Project名称。
  2. 单击接入数据按钮,并在接入数据页面中选择Docker文件
  3. 选择日志空间。
    可以选择已有的Logstore,也可以新建Project或Logstore。
  4. 创建并配置机器组。
    在创建机器组之前,您需要首先确认已经安装了Logtail。 安装完Logtail后单击确认安装完毕创建机器组。如果您之前已经创建好机器组 ,请直接单击使用现有机器组

    选择一个机器组,将该机器组从源机器组移动到应用机器组

  5. 设置数据源。
    配置项 是否必选 说明
    是否为Docker文件 必须勾选 确认采集的目标文件是否为Docker文件。
    Label白名单 可选 每项中LabelKey必填,若LabelValue不为空,则只采集容器label中包含LabelKey=LabelValue的容器;若LabelValue为空,则采集所有label中包含LabelKey的容器。
    说明
    • 多个键值对间为或关系,即只要容器的label满足任一键值对即可被采集。
    • 此处的label为docker inspect中的label信息。
    Label黑名单 可选 每项中LabelKey必填,若LabelValue不为空,则只排除容器label中包含LabelKey=LabelValue的容器;若LabelValue为空,则排除所有label中包含LabelKey的容器。
    说明
    • 多个键值对间为或关系,即只要容器的label满足任一键值对即可被排除。
    • 此处的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,则仅需将其中一个配置为label白名单以指定只采集该容器的日志,分别为io.kubernetes.pod.namespace : backend-prod或者io.kubernetes.container.name : worker-server
    • Kubernetes中除io.kubernetes.pod.namespaceio.kubernetes.container.name外不建议使用其他label。其他情况请使用环境变量白名单或黑名单。
  6. 查询分析配置。
    默认已经设置好索引,您也可以手动进行修改。

配置示例

  • environment 配置方式

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

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

    environment 配置方式示例

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

    图 2. 数据源配置示例

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

    label方式示例

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

    图 4. 数据源配置

    数据源设置

默认字段

普通Docker默认每条日志上传以下字段:
字段名 说明
_image_name_ 镜像名
_container_name_ 容器名
_container_ip_ 容器IP地址
若该集群为Kubernetes,则默认每条日志上传以下字段:
字段名 说明
_image_name_ 镜像名
_container_name_ 容器名
_pod_name_ pod名
_namespace_ pod所在命名空间
_pod_uid_ pod的唯一标识
_container_ip_ pod的IP地址