采集Docker容器文本日志

日志服务Project支持采集Docker容器文本日志,本文为您介绍如何部署Logtail容器并采集业务容器文本日志到Logstore。

方案概览

image

一个Logtail容器支持采集宿主机上多个业务容器多种格式的文本日志,您只需在不同的Logstore创建Logtail采集配置并下发到Logtail容器,Logtail容器会将采集到的文本日志发送到不同的Logstore。本文以采集Nginx容器文本日志为例,为您演示具体的配置步骤。

如果您对Logtail采集比较熟悉,可直接在控制台根据向导提示进行操作。

前提条件

  • 已创建Project、标准型Logstore。具体操作,请参见创建项目Project创建Logstore

  • 已创建业务容器,且可以持续产生日志。

    说明

    Logtail只采集增量日志。如果下发Logtail配置后,日志文件无更新,则Logtail不会采集该文件中的日志。更多信息,请参见读取日志

步骤一:安装Logtail容器并创建机器组

  1. 拉取Logtail镜像

    登录宿主机,根据日志服务Project所在地域,获取对应的${region_id}。替换${region_id}后,使用以下命令拉取Logtail镜像。

    重要
    • 各地域对应的${region_id}请参见开服地域,例如华东 1(杭州)对应的${region_id}cn-hangzhou

    • 如果您的服务器处于阿里云VPC网络中,需将registry修改为registry-vpc

    docker pull registry.${region_id}.aliyuncs.com/log-service/logtail
  2. 启动Logtail容器

    1. 参数说明

      参数

      参数说明

      ${region_name}

      根据日志服务Project所在地域,获取对应的${region_id},各地域对应的${region_id}请参见开服地域。网络类型选择请参见选择网络

      • 公网:${region_name}的值为${region_id}-internet。例如华东 1(杭州)为cn-hangzhou-internet。

      • 阿里云内网:${region_name}的值为${region_id}。例如华东 1(杭州)为cn-hangzhou。

      ${aliyun_account_id}

      日志服务所在的阿里云账号(主账号)ID。获取方法,请参见获取日志服务所在的阿里云账号(主账号)ID

      ${user_defined_id}

      设置机器组的用户自定义标识,例如user-defined-docker-1。该标识在Project所在地域内必须唯一。

    2. 根据参数说明,替换命令模板中的3个参数:${region_id}${aliyun_user_id}${user_defined_id},然后执行以下命令启动Logtail容器。

      docker run -d \
          -v /:/logtail_host:ro \
          -v /var/run/docker.sock:/var/run/docker.sock \
          --env ALIYUN_LOGTAIL_CONFIG=/etc/ilogtail/conf/${region_name}/ilogtail_config.json \
          --env ALIYUN_LOGTAIL_USER_ID=${aliyun_account_id} \
          --env ALIYUN_LOGTAIL_USER_DEFINED_ID=${user_defined_id} \
          registry.${your_region_name}.aliyuncs.com/log-service/logtail
      重要

      如果您要自定义配置Logtail容器的启动参数,只需保证以下前提条件。

      • 启动时,必须配置3个环境变量ALIYUN_LOGTAIL_CONFIGALIYUN_LOGTAIL_USER_IDALIYUN_LOGTAIL_USER_DEFINED_ID

      • 将宿主机上的/var/run目录挂载到Logtail容器的/var/run目录。

      • 将宿主机根目录挂载到Logtail容器的/logtail_host目录。

      • 如果Logtail日志(/usr/local/ilogtail/ilogtail.LOG)中出现The parameter is invalid : uuid=none的错误日志,请在宿主机上创建一个product_uuid文件,在其中输入任意合法UUID(例如169E98C9-ABC0-4A92-B1D2-AA6239C0D261),并把该文件挂载到Logtail容器的/sys/class/dmi/id/product_uuid目录。

  3. 创建用户自定义标识机器组

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

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

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

      参数

      说明

      名称

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

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

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

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

      重要

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

      机器组标识

      选择用户自定义标识

      机器组Topic

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

      用户自定义标识

      输入上述步骤中配置的${user_defined_id}

  4. 检查机器组状态

    机器组列表中,单击目标机器组。在机器组配置页面,可查看机器组配置信息以及服务器状态。

    • 心跳状态为OK表示服务器上的Logtail实例与日志服务Project连接正常。

    • 如果心跳状态显示FAIL,处理操作请参见Logtail机器组问题排查思路(主机场景)

      重要

      创建机器组大约需要2分钟。创建未生效,将导致心跳为FAIL。请2分钟后单击刷新进行重试。

步骤二:创建Logtail采集配置

  1. 日志存储 > 日志库页签中,单击目标Logstore。

  2. 展开Logstore菜单栏,单击Logtail配置,然后单击添加Logtail配置image

  3. 快速数据接入页面,单击Docker文件-容器image

  4. 机器组配置步骤中,选择步骤一中创建的机器组。然后单击下一步image

  5. Logtail配置步骤中,输入配置名称文件路径,其他配置可保持默认,更多信息,请参见采集主机文本日志。您也可以添加处理插件,处理文本日志。更多信息,请参见处理插件概述。配置完成后,单击下一步

    说明
    • 配置名称:仅支持小写字母、数字、连字符(-)和下划线(_),并且必须以小写字母或者数字作为开头和结尾。

    • 文件路径:为业务容器中日志文件存放的绝对路径,例如 /var/log/nginx/access.log

    image

  6. 查询分析配置步骤中,单击自动生成索引,并单击刷新,可预览采集到的日志。image

保留字段

Docker文件中每条日志默认包含的字段如下所示:

字段名

说明

__source__

Logtail容器的IP地址。

_container_ip_

业务容器的IP地址。

__tag__:__hostname__

宿主机的名称。

__tag__:__path__

日志采集路径。

__tag__:__receive_time__

日志到达服务端的时间。

__tag__:__user_defined_id__

机器组的自定义标识。

其他操作

查看Logtail运行状态

您可以执行docker exec ${logtail_container_id} /etc/init.d/ilogtaild status命令查看Logtail运行状态。

查看Logtail的版本号、IP地址和启动时间等信息

您可以执行docker exec ${logtail_container_id} cat /usr/local/ilogtail/app_info.json命令查看Logtail相关信息。

查看Logtail的运行日志

Logtail运行日志保存在容器内的/usr/local/ilogtail/目录下,文件名为ilogtail.LOG,轮转文件会压缩存储为ilogtail.LOG.x.gz。示例如下:

[sudo@iZb****exh2Z ilogtail]# docker exec a287de895e40 tail -n 5 /usr/local/ilogtail/ilogtail.LOG
[2018-02-06 08:13:35.721864]    [INFO]    [8]    [build/release64/sls/ilogtail/LogtailPlugin.cpp:104]    logtail plugin Resume:start
[2018-02-06 08:13:35.722135]    [INFO]    [8]    [build/release64/sls/ilogtail/LogtailPlugin.cpp:106]    logtail plugin Resume:success
[2018-02-06 08:13:35.722149]    [INFO]    [8]    [build/release64/sls/ilogtail/EventDispatcher.cpp:369]    start add existed check point events, size:0
[2018-02-06 08:13:35.722155]    [INFO]    [8]    [build/release64/sls/ilogtail/EventDispatcher.cpp:511]    add existed check point events, size:0    cache size:0    event size:0    success count:0
[2018-02-06 08:13:39.725417]    [INFO]    [8]    [build/release64/sls/ilogtail/ConfigManager.cpp:3776]    check container path update flag:0    size:1

Logtail容器中的标准输出并不具备参考意义,请忽略以下标准输出内容。


start umount useless mount points, /shm$|/merged$|/mqueue$
umount: /logtail_host/var/lib/docker/overlay2/3fd0043af174cb0273c3c7869500fbe2bdb95d13b1e110172ef57fe840c82155/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/d5b10aa19399992755de1f85d25009528daa749c1bf8c16edff44beab6e69718/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/5c3125daddacedec29df72ad0c52fac800cd56c6e880dc4e8a640b1e16c22dbe/merged: must be superuser to unmount
......
xargs: umount: exited with status 255; aborting
umount done
start logtail
ilogtail is running
logtail status:
ilogtail is running

重启Logtail

请参考以下示例重启Logtail。

[sudo@iZb****xh2Z ilogtail]# docker exec a287de895e40 /etc/init.d/ilogtaild stop
kill process Name: ilogtail pid: 7
kill process Name: ilogtail pid: 8
stop success
[sudo@iZb****xh2Z ilogtail]# docker exec a287de895e40 /etc/init.d/ilogtaild start
ilogtail is running

相关文档