文档

采集标准Docker容器日志

更新时间:

本文介绍如何部署Logtail容器以及创建Logtail配置,用于采集标准Docker容器日志(文本日志和标准输出)。

前提条件

  • 已创建Project和Logstore。更多信息,请参见管理Project管理Logstore

  • 已安装Docker

  • 目标容器持续产生日志。
    重要 Logtail只采集增量日志。如果下发Logtail配置后,日志文件无更新,则Logtail不会采集该文件中的日志。更多信息,请参见读取日志

步骤一:部署Logtail容器

  1. 拉取Logtail镜像。根据实际情况替换registry.cn-hangzhou.aliyuncs.com,地域信息请参见安装Logtail(Linux系统)。如果您的服务器处于阿里云VPC网络中,需将registry修改为registry-vpc

    docker pull registry.cn-hangzhou.aliyuncs.com/log-service/logtail
  2. 执行以下命令,启动Logtail容器。

    docker run --privileged -d \
        -v /:/logtail_host:ro \
        -v /var/run/docker.sock:/var/run/docker.sock \
        --env ALIYUN_LOGTAIL_CONFIG=/etc/ilogtail/conf/${your_region_name}/ilogtail_config.json \
        --env ALIYUN_LOGTAIL_USER_ID=${your_aliyun_user_id} \
        --env ALIYUN_LOGTAIL_USER_DEFINED_ID=${your_machine_group_user_defined_id} \
        registry.cn-hangzhou.aliyuncs.com/log-service/logtail

    参数

    参数说明

    --privileged

    --privileged参数是必要的,否则删除其他容器时可能出现错误container text file busy,更多信息请参见Bug 1468249Bug 1441737issue 34538。对于Centos 7.4及以上版本(不包括Centos 8.0),可以去掉--privileged参数,然后执行以下命令设置fs.may_detach_mounts=1

    echo fs.may_detach_mounts=1 | sudo tee /etc/sysctl.d/may_detach_mounts.conf
    sudo sysctl -p /etc/sysctl.d/may_detach_mounts.conf
    sysctl fs.may_detach_mounts

    ${your_region_name}

    请根据日志服务Project所在地域及网络类型填写。其中,地域信息请参见安装Logtail(Linux系统),网络类型选择请参见选择网络

    • 如果为公网,格式为region-internet。例如华东 1(杭州)cn-hangzhou-internet

    • 如果为阿里云内网,格式为region。例如华东 1(杭州)cn-hangzhou

    ${your_aliyun_user_id}

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

    ${your_machine_group_user_defined_id}

    设置机器组的用户自定义标识,例如log-docker-demo

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

    • 步骤二中创建机器组时,您需要在用户自定义标识中输入此处设置的用户自定义标识。

    重要

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

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

    • 将宿主机上的/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目录。

步骤二:创建Logtail采集配置

重要
  1. 进入采集配置流程。单击页面右侧快速接入数据卡片,在自建开源/商业软件页签下,单击Docker文件-容器Docker标准输出-容器

    image

  2. 选择目标Project和Logstore,然后单击下一步。

    image

  3. 创建机器组。如果已有机器组,请前往第5步。

    image

  4. 在右侧面板,单击用户自定义标识,然后输入用户自定义标识,然后单击确定。这里的自定义标识必须和步骤一中设置的自定义标识一致,本文为log-docker-demo

    image

  5. 源机器组列表选择目标机器组,然后单击下一步

  6. 在Logtail配置页面,确定全局配置、输入配置和处理配置,配置参数说明请参见采集主机文本日志。如果需要对日志进行进一步处理例如正则解析、JSON解析等,可以在处理配置处理模式中添加处理插件概述。完成配置后,单击下一步

  7. 在查询分析配置页面创建索引

步骤三:查看上传结果

日志上传到Logstore后,必须创建索引才能进行查询分析。

快速查看

如果未创建索引,可以在Logstore的查询分析页面,单击消费预览快速查看日志。

image

查询分析日志

  1. 调用CreateIndex创建全文索引或字段索引,如果需要使用SELECT语句,必须创建字段索引。

  2. 调用GetLogsV2 - 查询Logstore中的日志数据,返回结果是日志数组Logs,每个元素就是一条日志。

默认字段

Docker标准输出

每条日志默认包含的字段如下所示。

字段名

说明

__source__

容器的IP地址。

__tag__:__client_ip__

宿主机的IP地址。

__tag__:__hostname__

容器的名称。

__tag__:__receive_time__

日志到达服务端的时间。

_time_

数据上传时间,例如2018-02-02T02:18:41.979147844Z

_source_

输入源类型,stdout或stderr。

_image_name_

镜像名。

_container_name_

容器名。

_container_ip_

容器IP地址。

Docker文件

每条日志默认包含的字段如下所示。

字段名

说明

__source__

容器的IP地址。

__tag__:__client_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

问题排查

当您使用Logtail采集Docker容器日志遇到异常情况时,您可以参见如何排查容器日志采集异常进行排查。