采集Docker容器的标准输出

更新时间:2025-03-04 07:47:35

在服务器上部署Docker后可以采集日志,Docker的日志分为两种类型:标准输出和文件日志。文件日志是指容器内生成的日志被写入服务器的指定文件目录中,而标准输出则指容器自身的实时输出流。本文介绍使用Logtail采集容器的标准输出到Logstore的操作步骤。

概览

在宿主机中安装Docker后,针对您在该环境中部署的业务容器所产生的标准输出(stdout)及标准错误(stderr)日志,您可以使用Logtail进行采集。采集的日志数据将被传输至Logstore中,便于查询和分析。

image

前提条件

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

  • 宿主机已安装Docker且可以持续产生标准输出日志。

    说明

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

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

  1. 拉取Logtail镜像

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

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

    #拉取Logtail镜像:
    docker pull registry.${region_id}.aliyuncs.com/log-service/logtail
    #如果您的服务器处于阿里云VPC网络中,请使用如下命令行拉取Logtail镜像:
    docker pull registry-vpc.${region_id}.aliyuncs.com/log-service/logtail
  2. 启动Logtail容器

    1. 参数说明

      参数

      参数说明

      参数

      参数说明

      ${region_id}

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

      • 示例:若Project位于华东1(杭州),则以阿里云内网访问时${region_id}cn-hangzhou,公网访问时使用cn-hangzhou-internet

      ${aliyun_account_id}

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

      ${user_defined_id}

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

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

      # 启动Logtail容器,替换${region_id},${aliyun_account_id},${user_defined_id}
      docker run -d \
          -v /:/logtail_host:ro \
          -v /var/run/docker.sock:/var/run/docker.sock \
          --env ALIYUN_LOGTAIL_CONFIG=/etc/ilogtail/conf/${region_id}/ilogtail_config.json \
          --env ALIYUN_LOGTAIL_USER_ID=${aliyun_account_id} \
          --env ALIYUN_LOGTAIL_USER_DEFINED_ID=${user_defined_id} \
          registry.${region_id}.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. 输入docker ps查看容器是否启动成功。image

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

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

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

    3. 在创建机器组页面填写名称,机器组标识选择用户自定义标识,并在用户自定义标识中填入步骤一中参数${user_defined_id}的值,本例为user-defined-docker-1image

      参数

      说明

      参数

      说明

      机器组Topic

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

  4. 检查机器组状态

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

    如果心跳状态显示OK,说明配置成功,如果显示FAIL,请等待1分钟后单击刷新重试,若心跳状态仍为FAIL,请检查:

    1. Logtail容器与Project是否同地域。

    2. 宿主机安全组是否放行Logtail出方向流量(默认端口80)。

    处理操作请参见如何排查容器日志采集异常

步骤二:创建Logtail采集配置

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

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

  3. 快速数据接入页面,单击Docker标准输出-旧版image

  4. 由于步骤一创建了机器组,此处请单击使用现有机器组image

  5. 机器组配置步骤中,选择步骤一中创建的机器组,单击>添加机器组到应用机器组中,并单击下一步image

  6. Logtail配置步骤中,输入配置名称,单击下一步image

  7. 查询分析配置步骤中,单击刷新,可预览采集到的日志。若无日志,请确认容器是否持续产生标准输出日志,一般来说,标准输出默认在/var/lib/docker/containers/容器ID/容器ID-json.log中。若确认后仍无预览日志,请查看如何排查容器日志采集异常image

步骤三: 查看上传结果

重要

Logtail只采集增量日志,如果下发Logtail配置后标准输出无新日志产生,则Logtail不会采集以前的日志。更多信息,请参见读取日志

image

Docker标准输出的每条日志默认包含如下字段:

字段名

说明

字段名

说明

__source__

Logtail容器的IP地址。

__tag__:__hostname__

宿主机的名称。

__tag__:__receive_time__

日志到达服务端的时间。

_time_

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

_source_

输入源类型,stdoutstderr。

_image_name_

镜像名。

_container_name_

容器名。

_container_ip_

业务容器IP地址。

相关文档

  • 本页导读 (1)
  • 概览
  • 前提条件
  • 步骤一:安装Logtail容器并创建机器组
  • 步骤二:创建Logtail采集配置
  • 步骤三: 查看上传结果
  • 相关文档