采集Docker容器日志(标准输出/文件)

本文介绍如何通过日志服务控制台采集Docker容器文本日志和容器标准输出,涵盖了基础采集、结构化解析及高级处理的完整配置流程。

  • 基础配置(必选):用于定义采集任务的核心参数,确保日志数据顺利采集并传输至指定Project下的Logstore。

  • 解析配置(可选):根据日志格式选择内置解析功能(如Nginx/JSON/正则),将原始日志结构化解析为键值对数据,降低查询分析成本。

  • 高级配置(可选):在完成基础采集配置后,对日志内容进行脱敏、过滤等处理,满足更精细化的日志采集需求。

核心概念

在开始配置日志采集前,请先了解阿里云日志服务(SLS)的核心资源概念。

什么是Project

Project是阿里云日志服务中的资源管理单元,用于隔离和控制不同项目或应用的日志数据。一个Project可以包含多个Logstore。

什么是Logstore

Logstore是日志数据的存储单元,用于存储日志。在Project内,您可以根据业务需求创建多个Logstore存储不同类型的日志,如使用两个Logstore分别存储Nginx访问日志和应用错误日志。

容器日志源

容器内日志包含两种日志来源:

日志来源

说明

容器标准输出与标准错误(stdoutstderr)

容器运行过程中,程序直接打印到控制台的日志内容。

文本日志文件

采集容器内指定路径下的日志文件(支持通配符)。

前提条件

安装Docker

如果您使用的是阿里云服务器ECS,可以通过一键运行Terraform的方式,在现有的实例上快速安装Docker,或新建一个装有DockerECS实例。您也可以参考安装Docker,通过命令行手动安装。

  • 新建实例:设置参数create = true,依次点击发起调试 > 预览并执行。

  • 选择一个已有实例:设置参数create = falseinstance_id,依次点击发起调试 > 预览并执行。

准备日志源

如果您暂无合适的业务容器,或希望先快速验证采集功能,可以使用以下Demo来快速部署一个可以持续产生日志的测试容器。

log_generator.sh

#!/bin/sh

# 定义日志文件在容器内的路径
LOG_FILE="/var/mylog/app.log"

# 创建日志文件所在的目录
mkdir -p /var/mylog


# 无限循环来持续生成日志
COUNT=0
while true; do
  TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
  
  # 1. 打印到标准输出 (stdout)
  echo "[$TIMESTAMP] [INFO] This is a standard output log. Entry #$COUNT."
  
  # 2. 写入到文本日志文件
  echo "[$TIMESTAMP] [DEBUG] This is a text file log entry. Entry #$COUNT." >> ${LOG_FILE}
  
  # 每5秒循环一次
  sleep 5
  COUNT=$((COUNT + 1))
done

Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest

WORKDIR /var/mylog

COPY log_generator.sh .

RUN chmod +x log_generator.sh

CMD ["./log_generator.sh"]

请将log_generator.shDockerfile放在同一目录下,并在该目录下执行如下命令,构建镜像并运行容器:

# 构建镜像
sudo docker build -t logging-test-app .

# 运行容器
sudo docker run -d --name my-logger logging-test-app

执行如下命令验证业务容器部署成功:

docker ps 

输出如下结果,表示业务容器正常运行。

CONTAINER ID   IMAGE                  COMMAND             CREATED         STATUS         PORTS     NAMES
5cdd61e5dc51  logging-test-app   "./log_generator.sh"   6 seconds ago  Up 6 seconds                my-logger

创建Project

若您无可用Project,请参考此处步骤创建一个基础Project,如需详细了解创建配置请参见管理Project

登录日志服务控制台单击创建Project完成下述基础配置,其他配置保持默认即可:

  • 所属地域:请根据日志来源等信息选择合适的阿里云地域,创建后不可修改。

  • Project名称:设置名称,名称在阿里云地域内全局唯一,创建后不可修改。

创建Logstore

若您无可用Logstore,请参考此处步骤创建一个基础Logstore,如需详细了解创建配置请参见管理Logstore

  1. 登录日志服务控制台,在Project列表中单击管理日志资源的Project。

  2. 日志存储 > 日志库页签中,单击+图标。

  3. 填写Logstore名称,其余配置保持默认无需修改。

image

安装LoongCollector

  1. 拉取LoongCollector镜像:在宿主机上执行如下命令拉取LoongCollector镜像,请将${region_id}替换为日志服务Project所在地域的RegionID

    # LoongCollector镜像地址
    docker pull aliyun-observability-release-registry.${region_id}.cr.aliyuncs.com/loongcollector/loongcollector:v3.0.12.0-25723a1-aliyun
    
    # Logtail镜像地址
    docker pull registry.${region_id}.aliyuncs.com/log-service/logtail:v2.1.11.0-aliyun
  2. 启动LoongCollector:替换命令中的${region_id}${aliyun_account_id}${user_defined_id}并执行。

    • ${region_id}:根据日志服务Project所在地域,获取对应的RegionID并选择网络传输类型

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

    • ${aliyun_account_id}日志服务所在的阿里云账号(主账号)ID。

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

    重要

    如果您要自定义配置LoongCollector(Logtail)容器的启动参数,需保证以下条件:

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

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

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

    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} \
        aliyun-observability-release-registry.${region_id}.cr.aliyuncs.com/loongcollector/loongcollector:v3.0.12.0-25723a1-aliyun
  3. 验证启动成功:执行如下命令查看正在运行的容器。

    docker ps | grep loongcollector

    输出如下结果,表示LoongCollector容器正常运行。

    6ad510001753   aliyun-observability-release-registry.cn-beijing.cr.aliyuncs.com/loongcollector/loongcollector:v3.0.12.0-25723a1-aliyun   "/usr/local/ilogtail…"   About a minute ago   Up About a minute             recursing_shirley

创建机器组

  1. 登录日志服务控制台,在Project列表中单击管理日志资源的Project。

  2. 在左侧导航栏中,选择image资源 > 机器组,单击机器组右侧的机器组 > 创建机器组

  3. 创建机器组对话框中,配置如下参数,然后单击确定

    1. 设置机器组名称。

    2. 机器组标识:选择用户自定义标识

    3. 用户自定义标识:您在执行启动LoongCollector命令时配置环境变量${user_defined_id}的值。

  4. 创建完成后,在机器组列表,单击新建的机器组,在机器组配置 > 机器组状态区域,查看心跳状态。如果心跳为OK则表示创建成功。若心跳失败,请根据心跳异常问题汇总排查

基础配置

在确认满足前提条件后,您可以开始进行基础配置。基础配置是设置日志采集的起点,包括选择采集源,配置机器组等,建立起从Docker容器到日志服务的数据通道,确保原始日志能够顺利采集。

登录日志服务控制台,单击管理日志资源的Project,在日志库(Logstore)image页面:

  1. 单击存储日志的Logstore名称前的image展开,

  2. 单击数据接入后的image

  3. 根据日志源选择快速接入模板。

image

采集Docker容器标准输出(Stdout)

这是容器标准输出采集的最基础场景:仅采集容器的标准输出(Stdout)和标准错误(Stderr)原始日志,不做任何解析处理,示例如下:

原始日志

采集原始标准输出(Stdout)

10.244.0.1 - - [01/Aug/2025:10:25:30 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.88.1"
10.244.0.1 - - [01/Aug/2025:10:25:30 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.88.1"
说明

本文介绍如何配置采集容器标准输出-新版配置。

  1. 快速数据接入弹框中,在搜索框中按照Docker标准输出-新版进行关键字搜索,单击Docker标准输出-新版卡片的立即接入。

  2. 机器组配置页面,选择Docker场景。在源机器组列表中勾选您提前创建好的机器组并点击>添加到应用机器组中,单击下一步。

  3. Logtail配置页面进行全局配置输入配置,其他配置保持默认即可:

    • 全局配置:填写配置名称。

    • 输入配置:按需选择打开标准输出标准错误开关(默认全部打开)。

  4. (可选)如需对原始日志进行结构化解析,请参考解析配置添加处理插件;如需采集多行日志,对原始日志进行脱敏、过滤等处理时,请参考高级配置部分进行采集配置。

  5. 查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引,通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。

采集Docker容器文本日志

这是文本日志采集的最基础场景:采集Docker容器内原始日志文件内容,不进行任何解析,将原始日志整行上传至日志服务的content字段,示例如下:

原始日志

原始日志整行存储至content

Aug 19 11:20:51 hostname-1 crond[2995]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
content: Aug 19 11:20:51 hostname-1 crond[2995]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
  1. 快速数据接入弹框中,在搜索框中按照Docker文件-容器进行关键字搜索,单击Docker文件-容器卡片的立即接入。

  2. 机器组配置页面,选择Docker场景。在源机器组列表中勾选您提前创建好的机器组并点击>添加到应用机器组中,单击下一步。

  3. Logtail配置页面进行全局配置输入配置,其他配置保持默认即可:

    • 全局配置:填写配置名称。

    • 输入配置:确认输入配置中的文件路径类型,并填写文件路径,其余配置保持默认。

      • 文件路径类型:支持配置容器内路径宿主机路径

        • 容器内路径:采集容器内文本日志文件时,请选择容器内路径。

        • 宿主机路径:采集宿主机上的服务日志时,请选择宿主机路径。

      • 文件路径:日志采集的路径,必须为绝对路径,Linux下以“/”开头,如/data/mylogs/**/*.log,表示/data/mylogs目录下所有后缀名为.log的文件。

      • 最大目录监控深度文件路径中通配符**匹配的最大目录深度。默认为0,表示只监控本层目录,取值范围是0~1000。

        说明

        建议您设置深度为0,配置路径到文件所在的目录。

  4. (可选)如需对原始日志进行结构化解析,请参考解析配置添加处理插件;如需采集多行日志,对原始日志进行脱敏、过滤等处理时,请参考高级配置部分进行采集配置。

  5. 查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引,通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。

解析配置

在完成基础配置后,您可以根据日志格式使用对应的处理插件对原始日志进行结构化解析,方便后续查询分析。对比示例(以Nginx日志为例)如下:

原始日志:127.0.0.1 - [2024-01-01] "GET /api HTTP/1.1" 200 340

基础配置采集结果

选择处理插件(Nginx解析插件)解析结果

content: "127.0.0.1 - [2024-01-01] \"GET /api HTTP/1.1\" 200 340"
client_ip: 127.0.0.1
time: 2024-01-01
method: GET
path: /api
status: 200

以下是常见的处理插件配置:

Logtail提供了处理插件用于将原始日志进一步解析为结构化数据,处理插件分为原生处理插件和扩展处理插件,此处仅覆盖原生处理插件的使用。

无论是在创建新的采集配置还是修改现有配置时,都需要在Logtail配置 > 处理配置区域灵活添加解析插件,以实现日志的结构化解析。

  • 修改已有配置时:需先进入Logtail编辑页面,在目标Project页面中单击image展开目标Logstore,单击Logtail配置,单击目标Logtail配置操作列的管理Logtail配置,在配置页面单击编辑。然后在Logtail配置 > 处理配置区域,按需从下列场景中选择合适的解析插件进行配置。

  • 创建新配置时:可以直接在Logtail配置 > 处理配置区域,按需从下列场景中选择合适的解析插件修改采集配置规则:

正则解析

示例:使用正则表达式(\S+)\s-\s(\S+)\s\[([^]]+)]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"]+)"\s"([^"]+).*进行解析。

原始日志

自定义正则解析

127.0.0.1 - - [16/Aug/2024:14:37:52 +0800] "GET /wp-admin/admin-ajax.php?action=rest-nonce HTTP/1.1" 200 41 "http://www.example.com/wp-admin/post-new.php?post_type=page" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
body_bytes_sent: 41
http_referer: http://www.example.com/wp-admin/post-new.php?post_type=page
http_user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; ×64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0
remote_addr: 127.0.0.1
remote_user: -
request_method: GET
request_protocol: HTTP/1.1
request_uri: /wp-admin/admin-ajax.php?action=rest-nonce
status: 200
time_local: 16/Aug/2024:14:37:52 +0800

通过正则表达式提取日志字段,并将日志解析为键值对形式。在处理配置区域配置正则解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:

  • 添加日志样例:请务必使用实际场景中待采集日志的样例,配置日志样例可协助您配置日志处理相关参数,降低配置难度。

  • 单击添加处理插件,选择正则解析

    • 正则表达式:用于匹配日志,支持自动生成或手动输入的方式。

      • 如果提供了日志样例,可以通过单击自动生成正则表达式,在日志样例中划选需要提取的日志内容,单击生成正则,自动生成正则表达式。

        image

      • 根据日志内容手动输入正则表达式,如果提供了日志样例,可以单击验证,测试正则表达式是否能够正确解析日志内容。

    • 日志提取字段:为提取的日志内容(Value),设置对应的字段名(Key)。

查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。

分隔符解析

示例:

原始日志

按指定字符,切割字段

05/May/2025:13:30:28,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1",200,18204,aliyun-sdk-java
ip:10.10.*.*
request:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1
size:18204
status:200
time:05/May/2025:13:30:28
user_agent:aliyun-sdk-java

通过分隔符将日志内容结构化,解析为多个键值对形式。在处理配置区域配置分隔符解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:

  • 单击添加处理插件,选择分隔符解析

    • 分隔符:根据日志内容选择正确的分隔符。以CSV文件格式为例,单击下拉列表选择自定义,并输入半角逗号(,)。

    • 引用符:当日志字段内容中包含分隔符时,需要指定引用符进行包裹,被引用符包裹的内容会被解析为一个完整字段。

    • 日志提取字段:按分隔顺序为分隔后的值设置Key,Key只能包括字母、数字或下划线(_),且只能以字母或下划线(_)开头。最大长度为128字节。

查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。

标准JSON解析

示例:

原始日志

标准JSON键值自动提取

{"url": "POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek********&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1", "ip": "10.200.98.220", "user-agent": "aliyun-sdk-java", "request": {"status": "200", "latency": "18204"}, "time": "05/Jan/2025:13:30:28"}
ip: 10.200.98.220
request: {"status": "200", "latency" : "18204" }
time: 05/Jan/2025:13:30:28
url: POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek******&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1
user-agent:aliyun-sdk-java

Object类型的JSON日志结构化,解析为键值对形式。在处理配置区域配置JSON解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:

  • 单击添加处理插件,选择JSON解析

    • 原始字段:解析日志前,用于存放日志内容的原始字段,默认值为content。

查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。

嵌套JSON解析

示例:原始日志如下,对原始字段进行JSON展开,并使用展开深度作为前缀。

{"s_key":{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}}

展开深度

多层级JSON解析日志

0

0_s_key_k1_k2_k3_k41:41
0_s_key_k1_k2_k3_k4_k51:51
0_s_key_k1_k2_k3_k4_k52:52

1

1_s_key:{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}

通过指定展开深度,将嵌套的JSON日志解析为键值对形式。在处理配置区域配置展开JSON字段,进行如下配置,其余配置保持默认,完成后单击下一步:

  • 单击添加处理插件,选择拓展处理插件 > 展开JSON字段

    • 原始字段:需要展开的原始字段名。

    • JSON展开深度:默认值为0,表示展开到能解析成功的最深的地方;1表示当前层级,以此类推。

    • JSON展开连接符:JSON展开时字段名的连接符,默认值为下划线(_)。

    • JSON展开字段前缀:指定JSON展开后字段名的前缀。

    • 展开数组:指定是否展开数组类型的字段,如{"k":["1","2"]} 展开后会变为 {"k[0]":"1","k[1]":"2"}

      若您想修改字段名,可以组合使用重命名字段插件,将展开后的字段名映射为新的字段名,从而满足日志处理和分析的需求。

查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。

JSON数组解析

示例:

原始日志

提取JSON数组结构

[{"key1":"value1"},{"key2":"value2"}]
json1:{"key1":"value1"}
json2:{"key2":"value2"}

使用json_extract函数,从JSON数组中提取JSON对象。在处理配置区域进行如下配置,其余配置保持默认,完成后单击下一步:

  • 处理模式:选择SPL

  • SPL语句:您可以使用json_extract函数,从JSON数组中提取JSON对象。更多json函数请参考JSON函数的基本语法及示例

    • 示例:从日志字段 content 中提取 JSON 数组中的元素,并将结果分别存储在新字段 json1和 json2 中。

      * | extend json1 = json_extract(content, '$[0]'), json2 = json_extract(content, '$[1]')

查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。

Nginx日志解析

示例:

原始日志

根据log_format main的定义解析为键值对

192.168.*.* - - [15/Apr/2025:16:40:00 +0800] "GET /nginx-logo.png HTTP/1.1" 0.000 514 200 368 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.*.* Safari/537.36"
body_bytes_sent: 368
http_referer: -
http_user_agent : Mozi11a/5.0 (Nindows NT 10.0; Win64; x64) AppleMebKit/537.36 (KHTML, like Gecko) Chrome/131.0.x.x Safari/537.36
remote_addr:192.168.*.*
remote_user: -
request_length: 514
request_method: GET
request_time: 0.000
request_uri: /nginx-logo.png
status: 200
time_local: 15/Apr/2025:16:40:00

根据log_format中的定义将日志内容结构化,解析为多个键值对形式。在处理配置区域配置Nginx解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:

  • 单击添加处理插件,选择NGINX模式解析

    • NGINX日志配置中输入如下内容后单击确认。

      log_format main  '$remote_addr - $remote_user [$time_local] "$request" ''$request_time $request_length ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';
      说明

      Nginx模式插件支持根据log_format中的定义将日志内容结构化,解析为多个键值对形式。如默认内容不符合您的需求,可使用自定义格式。

查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。

Apache日志解析

示例:combined 格式日志解析结果如下

原始日志

Apache通用日志格式combined解析

1 192.168.1.10 - - [08/May/2024:15:30:28 +0800] "GET /index.html HTTP/1.1" 200 1234 "https://www.example.com/referrer" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.X.X Safari/537.36"
http_referer:https://www.example.com/referrer
http_user_agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.X.X Safari/537.36
remote_addr:192.168.1.10
remote_ident:-
remote_user:-
request_method:GET
request_protocol:HTTP/1.1
request_uri:/index.html
response_size_bytes:1234
status:200
time_local:[08/May/2024:15:30:28 +0800]

根据Apache日志配置文件中的定义将日志内容结构化,解析为多个键值对形式。在处理配置区域配置Apache模式解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:

  • 单击添加处理插件,选择APACHE模式解析,此处以combined日志格式为例。

    • 日志格式combined

    • APACHE配置字段:当日志格式combined时,此处会自动填充对应格式的配置字段,请确认是否和Apache配置文件中定义的格式一致。

查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。

高级配置

在完成基础配置后,您可以参考下述操作采集多行日志、对日志进行过滤、脱敏等处理,以满足更精细化的日志采集需求。以下是常见高级配置及其功能:

无论是在创建新的采集配置还是修改现有配置时,都需要在Logtail配置页面修改采集配置规则。

修改已有配置时:需先进入Logtail编辑页面,在目标Project页面中单击image展开目标Logstore,单击Logtail配置,单击目标Logtail配置操作列的管理Logtail配置,在配置页面单击编辑

创建新配置时:您可直接在Logtail配置页面,按需从下列场景中选择合适的解析插件修改采集配置规则:

  • 配置多行日志采集:当一条日志内容(如异常堆栈信息)占用多行时,需启用多行模式,并配置行首正则表达式以匹配日志的起始行,将占用多行的日志作为一条日志采集并存储到日志服务。

  • 允许日志(文本文件/容器标准输出)多次采集:允许一个文件日志或容器标准输出被多个LoongCollector(Logtail)配置采集。

  • 配置日志主题类型:为不同的日志流设置不同的主题(Topic),可用于组织和分类日志数据,更好地管理和检索相关日志。

  • 指定容器采集(过滤与黑名单):需要指定特定容器与路径采集时,包括白名单与黑名单配置。

  • 日志标签富化:将环境变量、Pod标签相关的元信息添加到日志中,作为日志的扩展字段。

  • 日志脱敏处理:对日志中的敏感信息进行脱敏处理后保存到日志服务。

  • 日志内容过滤:当原始日志中有大量无效日志无需保存到日志服务时,可使用日志过滤来剔除。

  • 指定写入日志时间:用于解析日志中的时间字段,并将解析结果设置为日志的__time__字段。

  • 日志压缩:如果您想要优化日志传输效率,您可配置压缩方式,支持lz4zstd

对比示例(以脱敏插件为例)

原始日志:{"account":1111111,"password":"dewefege"}

JSON文本日志采集结果

脱敏插件解析结果

account:1111111
password:dewefege
account:1111111
password:********

配置多行日志采集

日志服务默认为单行模式,按行进行日志的切分与存储,导致含堆栈信息的多行日志被逐行切分,每一行作为独立日志存储和展示,不利于分析。

针对上述问题,可通过开启多行模式来改变日志服务的切分方式,并通过配置正则表达式匹配日志起始行,从而将原始日志按照起始行规则进行切分和存储。示例如下:

原始日志:

[2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened
    at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
    at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
    at TestPrintStackTrace.main(TestPrintStackTrace.java:16)

单行模式与多行模式对比:

单行模式:每行作为独立日志,堆栈信息被拆散,丢失上下文

多行模式:通过行首正则识别完整日志,保留完整语义结构

image

content:[2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened
    at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
    at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
    at TestPrintStackTrace.main(TestPrintStackTrace.java:16)

Logtail配置页面进行多行模式配置,配置完成后单击保存即可:

  • 处理配置:开启多行模式

  • 类型:选择自定义多行JSON

    • 自定义:原始日志的格式不固定,需配置行首正则表达式,来标定每一条日志的起始行。

      • 行首正则表达式:支持自动生成或手动输入,正则表达式需要能够匹配完整的一行数据,如上述示例中匹配的正则表达式为\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*

        • 单击自动生成正则表达式,然后在日志样例文本框中,划选需提取的日志内容,单击生成正则

        • 单击手动输入正则表达式,输入正则表达式。配置完成后,单击验证

    • 多行JSON:当原始日志均为标准JSON格式时选择,LoongCollector(Logtail)会自动处理单条JSON日志内部的换行。

  • 切分失败处理方式

    • 丢弃:直接丢弃这段日志。

    • 保留单行:将每行日志文本单独保留为一条日志。

允许日志(文本文件/容器标准输出)多次采集

Logtail配置 > 输入配置区域进行如下配置:

采集文本文件日志:开启允许文件多次采集。默认一个日志文件只能匹配一个LoongCollector(Logtail)配置,开启后,同一个文件支持被多个LoongCollector(Logtail)配置采集。

采集容器标准输出:开启允许标准输出多次采集。默认情况下,一个容器的标准输出日志只能匹配一个Logtail新版标准输出采集配置,如果需要被多个新版标准输出采集配置采集,需打开此开关。

配置日志主题类型

Logtail配置页面进行如下配置,配置完成后单击保存即可:

  • 全局配置 > 其他全局配置:配置日志主题类型。

    • 日志主题类型:选择日志主题(Topic)的生成方式。

      • 机器组Topic:日志服务支持将一个LoongCollector(Logtail)配置应用到多个机器组。使用机器组Topic可用于区分来自不同机器组的日志。LoongCollector(Logtail)上报数据时,会将服务器所在机器组的机器组Topic作为日志主题上传至Project。用户在查询日志时需要指定日志主题作为查询条件。

      • 文件路径提取:若不同的用户或应用将日志保存在不同的顶级目录中,但下级目录和日志文件名相同,日志服务在采集日志时无法明确区分日志是由哪个用户或应用产生的。此时文件路径提取方式可用于区分不同用户或应用产生的日志数据。通过正则表达式来完整匹配文件路径,并将表达式匹配的结果(用户名或应用名)作为日志主题(Topic)上传至日志服务。

        使用正则从文件路径中提取Topic

        说明

        文件路径的正则表达式中,需要对正斜线(/)进行转义。

        场景1:不同用户将日志记录在不同目录下,但是日志文件名称相同,目录路径如下所示。

        /data/logs
        ├── userA
        │   └── serviceA
        │       └── service.log
        ├── userB
        │   └── serviceA
        │       └── service.log
        └── userC
            └── serviceA
                └── service.log

        如果在Logtail配置中仅配置文件路径为/data/logs且文件名称为service.log,LoongCollector(Logtail)会将三个service.log文件中的内容采集至同一个Logstore中,因此无法区分日志具体由哪个用户产生。您可以使用正则表达式提取文件路径中的值,生成不同的日志主题。

        正则表达式

        提取结果

        \/data\/logs\/(.*)\/serviceA\/.*
        __topic__: userA
        __topic__: userB
        __topic__: userC

        场景2:如果单个日志主题不足以区分日志的来源,您可以在日志文件路径中配置多个正则捕获组来提取关键信息。其中捕获组包括命名捕获组(?P<name>)与非命名捕获组两类。

        • 如果使用命名捕获组,则生成的tag字段为__tag__:{name}

        • 如果使用非命名捕获组,则生成的tag字段为__tag__:__topic_{i}__,其中{i}为捕获组的序号。

        说明

        当正则表达式中存在多个捕获组时,不会生成__topic__字段。

        例如,文件路径为/data/logs/userA/serviceA/service.log,您可以通过以下方式提取文件路径中的多个值:

        示例

        正则表达式

        提取结果

        使用非命名捕获组进行正则提取。

        \/data\/logs\/(.*?)\/(.*?)\/service.log
        __tag__:__topic_1__: userA
        __tag__:__topic_2__: serviceA

        使用命名捕获组进行正则提取。

        \/data\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/service.log
        __tag__:user: userA
        __tag__:service: serviceA

        验证:配置完成后,根据日志主题查询日志:在日志查询分析页面,输入对应生成的日志主题,例如__topic__: userA__tag__:__topic_1__: userA查询相应主题的日志。更多信息,请参见查询语法与功能

        image

      • 自定义:输入customized:// + 自定义主题名,使用自定义的静态日志主题。

指定容器采集(过滤与黑名单)

Logtail配置页面进行如下配置,配置完成后单击保存即可:

  • 输入配置

    • 容器过滤:打开容器过滤开关,并单击添加,选择对应的过滤方式进行配置,多个条件之间为“且”的关系。

      • 环境变量黑/白名单:指定待采集容器的环境变量条件。

      • K8s Pod标签黑/白名单:指定待采集容器所在 pod 的标签条件。

      • K8s Pod 名称正则匹配:通过Pod名称指定待采集的容器

      • K8s Namespace 正则匹配:通过Namespace名称指定待采集的容器。

      • K8s 容器名称正则匹配:通过容器名称指定待采集的容器。

      • 容器label黑/白名单:采集容器标签符合条件的容器,docker场景使用,K8s场景不推荐使用。

    • 其他输入配置:在其他输入配置中打开采集黑名单开关,单击添加,选择对应的黑名单方式进行配置。

      支持完整匹配和通配符匹配目录和文件名。其中,通配符只支持星号(*)和半角问号(?)。
      • 文件路径黑名单:配置采集时需要忽略的文件路径,相关示例如下:

        • /home/admin/private*.log:在采集时忽略/home/admin/目录下所有以private开头,以.log结尾的文件。

        • /home/admin/private*/*_inner.log:在采集时忽略/home/admin/目录下以private开头的目录内,以_inner.log结尾的文件。

      • 文件黑名单:配置采集时需要忽略的文件名,示例如下:

        • app_inner.log:在采集时忽略所有名为app_inner.log的文件。

      • 目录黑名单:目录路径不能以正斜线(/)结尾,以下为目录路径示例:

        • /home/admin/dir1/:目录黑名单不会生效。

        • /home/admin/dir*:在采集时忽略/home/admin/目录下所有以dir开头的子目录下的文件。

        • /home/admin/*/dir:在采集时忽略/home/admin/目录下二级目录名为dir的子目录下的所有文件。例如/home/admin/a/dir目录下的文件被忽略,/home/admin/a/b/dir目录下的文件被采集。

日志标签富化

Logtail配置页面进行如下配置,配置完成后单击保存即可:

  • 输入配置

    • 日志标签富化:开启日志标签富化,在日志中额外添加与容器有关的tag。单击添加:

      • 环境变量相关:配置环境变量名和tag名,环境变量值将存放在tag名中。

        • 环境变量名:指定需要提取的环境变量名称。

        • tag:为该环境变量定义的标签名称

      • Pod标签相关:配置Pod标签名和tag名,Pod标签值将存放在tag名中。

        • Pod标签名:指定需要提取的 Kubernetes Pod 标签名称。

        • tag:为该标签定义的标签名称

日志脱敏处理

示例:

原始日志

解析日志

[{'account':'1812213231432969','password':'04a23f38'}, {'account':'1812213685634','password':'123a'}]
[{'account':'1812213231432969','password':'********'}, {'account':'1812213685634','password':'********'}]

Logtail配置页面,单击处理配置页签中的添加处理插件,插件类型选择原生处理插件 > 脱敏处理,进行如下配置:

  • 原始字段:解析日志前,用于存放日志内容的原始字段。

  • 脱敏方式:支持constmd5

    • const:将敏感内容替换成您所修改的字符串。

    • md5:将敏感内容替换为其对应的MD5值。

  • 替换字符串:选择脱敏方式const时,需输入字符串,用于替换敏感内容。

  • 被替换内容前的内容表达式:用于查找敏感内容,使用RE2语法配置。

  • 被替换的内容表达式:敏感内容的表达式,使用RE2语法配置。

日志内容过滤

Logtail配置页面,单击处理配置页签中的添加处理插件,插件类型选择原生处理插件 > 原生插件:过滤处理,进行白名单配置:配置后只采集符合白名单条件的日志。

  • 字段名:需要进行过滤的日志字段。

  • 字段值:用于过滤的正则表达式,仅支持全文匹配,不支持关键词部分匹配。

指定写入日志时间

Logtail配置页面,单击处理配置页签中的添加处理插件,插件类型选择原生处理插件 > 时间解析,进行如下配置:

时间解析插件通常与其他插件配合使用,将从原始日志中提取的表示时间的字段进行解析,并将解析结果写入 _time_ 字段。
  • 原始字段:解析日志前,用于存放日志内容的原始字段。

  • 时间格式:根据日志中的时间内容设置对应的时间格式

  • 时区:选择日志时间字段所在的时区。如果不选择,则默认使用机器时区,即使用Logtail进程所在环境的时区。

日志压缩

Logtail配置页面进行如下配置:

  • 输出配置:指定传输数据时的压缩方式

    说明

    通过SDK配置Logtail时,如果未指定该字段,默认压缩方式与Logtail版本有关的:

    • Logtail 1.3.4及之前的版本,默认为lz4。

    • Logtail 1.3.4之后的版本,默认为zstd。

    通过SDK配置LoongCollector时,如果未指定该字段,默认压缩方式为zstd。

    • lz4:压缩速度快,压缩率较低。

    • zstd:压缩率高,速度略低,内存占用高。

后续步骤

完成日志采集后,您可以在日志服务控制台,查询到相关数据,建议您继续学习以下内容,来更好的使用和了解日志服务:

  1. 日志查询与分析:在对应的Logstore查询和分析页面,配置索引后,可以在搜索栏输入查询或分析语句,对日志进行查询和分析。如果您初次使用,建议您可以使用内置的通过AI智能生成查询与分析语句(Copilot),自动生成符合您需求的查询分析语句。更多内容,请参考查询与分析快速指引

    采集的每条Docker容器文本日志中默认包含以下字段信息:

    字段名

    说明

    __source__

    LoongCollector(Logtail)容器的IP地址。

    _container_ip_

    业务容器的IP地址。

    __tag__:__hostname__

    LoongCollector(Logtail)所在Docker主机的名称。

    __tag__:__path__

    日志采集路径。

    __tag__:__receive_time__

    日志到达服务端的时间。

    __tag__:__user_defined_id__

    机器组的自定义标识。

  2. 数据可视化看板:如果您需要将查询分析的结果生成可视化图表,可以使用日志服务仪表盘来进行可视化大盘的设计,借助可视化仪表盘监控关键指标趋势,具体请参考快速创建仪表盘

  3. 数据异常自动预警:您也可以为日志设置告警策略,来方便的实时感知系统的异常情况,具体请参考快速设置日志告警

通过这三步闭环管理,可显著提升运维效率并保障系统稳定性。

常见问题

错误现象

原因

解决方案

Failed to connect to Logtail

Project地域与LoongCollector(Logtail)容器不一致

检查ALIYUN_LOGTAIL_CONFIG中的地域配置

No logs in Logstore

文件路径配置错误

确认业务容器内日志路径与采集配置匹配

错误日志:The parameter is invalid : uuid=none

问题描述:如果LoongCollector(Logtail)日志(/usr/local/ilogtail/ilogtail.LOG)中出现The parameter is invalid : uuid=none的错误日志。

解决方案:请在宿主机上创建一个product_uuid文件,在其中输入任意合法UUID(例如169E98C9-ABC0-4A92-B1D2-AA6239C0D261),并把该文件挂载到LoongCollector(Logtail)容器的/sys/class/dmi/id/product_uuid目录。

常用命令

查看LoongCollector(Logtail)运行状态

docker exec ${logtail_container_id} /etc/init.d/ilogtaild status

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

docker exec ${logtail_container_id} cat /usr/local/ilogtail/app_info.json

查看LoongCollector(Logtail)的运行日志

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

# 查看LoongCollector运行日志
docker exec a287de895e40 tail -n 5 /usr/local/ilogtail/loongcollector.LOG

# 查看Logtail运行日志
docker exec a287de895e40 tail -n 5 /usr/local/ilogtail/ilogtail.LOG

输出结果示例如下:

[2025-08-25 09:17:44.610496]    [info]  [22]    /build/loongcollector/file_server/polling/PollingModify.cpp:75          polling modify resume:succeeded
[2025-08-25 09:17:44.610497]    [info]  [22]    /build/loongcollector/file_server/polling/PollingDirFile.cpp:100                polling discovery resume:starts
[2025-08-25 09:17:44.610498]    [info]  [22]    /build/loongcollector/file_server/polling/PollingDirFile.cpp:103                polling discovery resume:succeeded
[2025-08-25 09:17:44.610499]    [info]  [22]    /build/loongcollector/file_server/FileServer.cpp:117            file server resume:succeeded
[2025-08-25 09:17:44.610500]    [info]  [22]    /build/loongcollector/file_server/EventDispatcher.cpp:1019              checkpoint dump:succeeded

重启LoongCollector(Logtail)

# 停止loongcollector
docker exec a287de895e40 /etc/init.d/ilogtaild stop

# 启动loongcollector
docker exec a287de895e40 /etc/init.d/ilogtaild start

更多信息

全局配置参数介绍

配置项

说明

配置名称

Logtail配置名称,在其所属Project内必须唯一。创建Logtail配置成功后,无法修改其名称。

日志主题类型

选择日志主题(Topic)的生成方式。包含机器组Topic,文件路径提取,自定义三种方式。

高级参数

其它可选的与配置全局相关的高级功能参数,请参见创建Logtail流水线配置

输入配置参数介绍

配置项

说明

Logtail部署模式

DaemonSet:在集群的每个Node节点上部署一个 LoongCollector,负责采集该节点上所有容器的日志。

Sidecar:每个容器组(Pod)运行一个LoongCollector容器,用于采集当前容器组(Pod)所有容器(Containers)的日志。不同Pod的日志采集相互隔离。

文件路径类型

支持配置容器内路径宿主机路径

  • 容器内路径:采集容器内文本日志文件时,请选择容器内路径。

  • 宿主机路径:采集集群节点上的服务日志时,请选择宿主机路径。

文件路径

根据日志在主机(例如ECS)上的位置,设置日志目录和文件名称。

  • 如果目标主机是Linux系统,则日志路径必须以正斜线(/)开头,例如/apsara/nuwa/**/app.Log

  • 如果目标主机是Windows系统,则日志路径必须以盘符开头,例如C:\Program Files\Intel\**\*.Log

目录名和文件名均支持完整模式和通配符模式,文件名规则请参见Wildcard matching。其中,日志路径通配符只支持星号(*)和半角问号(?)。

日志文件查找模式为多层目录匹配,即符合条件的指定目录(包含所有层级的目录)下所有符合条件的文件都会被查找到。例如:

  • /apsara/nuwa/**/*.log表示/apsara/nuwa目录(包含该目录的递归子目录)中后缀名为.log的文件。

  • /var/logs/app_*/**/*.log表示/var/logs目录下所有符合app_*格式的目录(包含该目录的递归子目录)中后缀名为.log的文件。

  • /var/log/nginx/**/access*表示/var/log/nginx目录(包含该目录的递归子目录)中以access开头的文件。

最大目录监控深度

设置日志目录被监控的最大深度,即文件路径中通配符**匹配的最大目录深度。0代表只监控本层目录。

标准输出

打开标准输出后,Logtail将采集容器标准输出。

标准错误

打开标准错误后,Logtail将采集容器标准错误。

允许标准输出多次采集

默认情况下,一个容器的标准输出日志只能匹配一个Logtail新版标准输出采集配置。如果标准输出需要被多个新版标准输出采集配置采集,需打开允许标准输出多次采集开关。

启用容器元信息预览

打开启用容器元信息预览后,您可以在创建Logtail配置后,查看容器元信息,包括匹配容器信息和全量容器信息。

容器过滤

  • 过滤条件说明

重要
  • 容器LabelDocker inspect中的Label,不是Kubernetes中的Label。如何获取,请参见获取容器Label

  • 环境变量为容器启动中配置的环境变量信息。如何获取,请参见获取容器环境变量

  • Kubernetes场景下,推荐使用Kubernetes层级的信息(K8s Pod名称正则匹配K8s Namespace正则匹配K8s容器名称正则匹配K8s Pod标签白名单等)进行容器过滤。

  1. Kubernetes中的Namespace和容器名称会映射到容器Label中,分别为io.kubernetes.pod.namespaceio.kubernetes.container.name,推荐使用这两个容器Label进行容器过滤。例如,某Pod所属的命名空间为backend-prod,容器名为worker-server,如果您要采集包含该容器的日志,可以设置容器Label白名单为io.kubernetes.pod.namespace : backend-prodio.kubernetes.container.name : worker-server

  2. 如果以上两个容器Label不满足过滤需求,请使用环境变量的黑白名单进行容器过滤。

K8s Pod名称正则匹配

通过Pod名称指定待采集的容器,支持正则匹配。例如设置为^(nginx-log-demo.*)$,表示匹配以nginx-log-demo开头的Pod下的所有容器。

K8s Namespace正则匹配

通过Namespace名称指定采集的容器,支持正则匹配。例如设置为^(default|nginx)$,表示匹配nginx命名空间、default命名空间下的所有容器。

K8s容器名称正则匹配

通过容器名称指定待采集的容器(Kubernetes容器名称是定义在spec.containers中),支持正则匹配。例如设置为^(container-test)$,表示匹配所有名为container-test的容器。

容器label白名单

容器Label白名单,用于指定待采集的容器。默认为空,表示采集所有容器的标准输出。如果您要设置容器Label白名单,那么LabelKey必填,LabelValue可选填。

  • 如果LabelValue为空,则容器Label中包含LabelKey的容器都匹配。

  • 如果LabelValue不为空,则容器Label中包含LabelKey=LabelValue的容器才匹配。

    LabelValue默认为字符串匹配,即只有LabelValue和容器Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如:配置LabelKeyio.kubernetes.container.name,配置LabelValue^(nginx|cube)$,表示可匹配名为nginx、cube的容器。

多个白名单之间为或关系,即只要容器Label满足任一白名单即可被匹配。

容器label黑名单

容器Label黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如果您要设置容器Label黑名单,那么LabelKey必填,LabelValue可选填。

  • 如果LabelValue为空,则容器Label中包含LabelKey的容器都将被排除。

  • 如果LabelValue不为空,则容器Label中包含LabelKey=LabelValue的容器才会被排除。

    LabelValue默认为字符串匹配,即只有LabelValue和容器Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如:设置LabelKeyio.kubernetes.container.name,设置LabelValue^(nginx|cube)$,表示可匹配名为nginx、cube的容器。

多个黑名单之间为或关系,即只要容器Label满足任一黑名单对即可被排除。

环境变量白名单

环境变量白名单,用于指定待采集的容器。默认为空,表示采集所有容器的标准输出。如果您要设置环境变量白名单,那么EnvKey必填,EnvValue可选填。

  • 如果EnvValue为空,则容器环境变量中包含EnvKey的容器都匹配。

  • 如果EnvValue不为空,则容器环境变量中包含EnvKey=EnvValue的容器才匹配。

    EnvValue默认为字符串匹配,即只有EnvValue和环境变量的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配,例如:设置EnvKeyNGINX_SERVICE_PORT,设置EnvValue^(80|6379)$,表示可匹配服务端口为80、6379的容器。

多个白名单之间为或关系,即只要容器的环境变量满足任一键值对即可被匹配。

环境变量黑名单

环境变量黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如果您要设置环境变量黑名单,那么EnvKey必填,EnvValue可选填。

  • 如果EnvValue为空,则容器环境变量中包含EnvKey的容器的日志都将被排除。

  • 如果EnvValue不为空,则容器环境变量中包含EnvKey=EnvValue的容器才会被排除。

    EnvValue默认为字符串匹配,即只有EnvValue和环境变量的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配,例如:设置EnvKeyNGINX_SERVICE_PORT,设置EnvValue^(80|6379)$,表示可匹配服务端口为80、6379的容器。

多个黑名单之间为或关系,即只要容器的环境变量满足任一键值对即可被排除。

K8s Pod标签白名单

通过Kubernetes Label白名单指定待采集的容器。如果您要设置Kubernetes Label白名单,那么LabelKey必填,LabelValue可选填。

  • 如果LabelValue为空,则Kubernetes Label中包含LabelKey的容器都匹配。

  • 如果LabelValue不为空,则Kubernetes Label中包含LabelKey=LabelValue的容器才匹配。

    LabelValue默认为字符串匹配,即只有LabelValueKubernetes Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如设置LabelKeyapp,设置LabelValue^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。

多个白名单之间为或关系,即只要Kubernetes Label满足任一白名单即可被匹配。

说明
  • 由于在Kubernetes管控类资源(例如Deployment)运行时更改Label,不会重启具体的工作资源Pod,因此Pod无法感知此变更,可能导致匹配规则失效。设置K8s Label黑白名单时,请以Pod中的Kubernetes Label为准。关于Kubernetes Label的更多信息,请参见Labels and Selectors

K8s Pod标签黑名单

通过Kubernetes Label黑名单排除不采集的容器。如果您要设置Kubernetes Label黑名单,那么LabelKey必填,LabelValue可选填。

  • 如果LabelValue为空,则Kubernetes Label中包含LabelKey的容器都被排除。

  • 如果LabelValue不为空,则Kubernetes Label中包含LabelKey=LabelValue的容器才会被排除。

    LabelValue默认为字符串匹配,即只有LabelValueKubernetes Label的值完全相同才会匹配。如果该值以^开头并且以$结尾,则为正则匹配。例如设置LabelKeyapp,设置LabelValue^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。

多个黑名单之间为或关系,即只要Kubernetes Label满足任一黑名单对即可被排除。

说明
  • 由于在Kubernetes管控类资源(例如Deployment)运行时更改Label,不会重启具体的工作资源Pod,因此Pod无法感知此变更,可能导致匹配规则失效。设置K8s Label黑白名单时,请以Pod中的Kubernetes Label为准。关于Kubernetes Label的更多信息,请参见Labels and Selectors

日志标签富化

您可以将环境变量和Kubernetes Label添加到日志,作为日志标签。

环境变量相关

设置环境变量扩展字段后,日志服务将在日志中新增环境变量相关字段。例如设置环境变量名VERSION,设置tagenv_version,当容器中包含环境变量VERSION=v1.0.0时,会将该信息添加到日志中,即添加字段__tag__:__env_version__: v1.0.0

Pod标签相关

设置Kubernetes Pod扩展字段后,日志服务将在日志中新增Kubernetes Pod相关字段。例如设置Pod标签名app,设置tagk8s_pod_app,当Kubernetes中包含Labelapp=serviceA时,会将该信息添加到日志中,即添加字段__tag__:__k8s_pod_app__: serviceA

文件编码

选择日志文件的编码格式。

首次采集大小

配置首次生效时,匹配文件的起始采集位置距离文件结尾的大小。首次采集大小设定值为1024 KB。

  • 首次采集时,如果文件小于1024 KB,则从文件内容起始位置开始采集。

  • 首次采集时,如果文件大于1024 KB,则从距离文件末尾1024 KB的位置开始采集。

您可以通过此处修改首次采集大小,取值范围为0~10485760,单位为KB。

采集黑名单

打开采集黑名单开关后,可进行黑名单配置,即可在采集时忽略指定的目录或文件。支持完整匹配和通配符匹配目录和文件名。其中,通配符只支持星号(*)和半角问号(?)。

重要
  • 如果您在配置文件路径时使用了通配符,但又需要过滤掉其中部分路径,则需在采集黑名单中填写对应的完整路径来保证黑名单配置生效。

    例如您配置文件路径/home/admin/app*/log/*.log,但要过滤/home/admin/app1*目录下的所有子目录,则需选择目录黑名单,配置目录为/home/admin/app1*/**。如果配置为/home/admin/app1*,黑名单不会生效。

  • 匹配黑名单过程存在计算开销,建议黑名单条目数控制在10条内。

  • 目录路径不能以正斜线(/)结尾,例如将设置路径为/home/admin/dir1/,目录黑名单不会生效。

支持按照文件路径黑名单、文件黑名单、目录黑名单设置,详细说明如下:

文件路径黑名单

  • 选择文件路径黑名单,配置路径为/home/admin/private*.log,则表示在采集时忽略/home/admin/目录下所有以private开头,以.log结尾的文件。

  • 选择文件路径黑名单,配置路径为/home/admin/private*/*_inner.log,则表示在采集时忽略/home/admin/目录下以private开头的目录内,以_inner.log结尾的文件。例如/home/admin/private/app_inner.log文件被忽略,/home/admin/private/app.log文件被采集。

文件黑名单

选择文件黑名单,配置文件名为app_inner.log,则表示采集时忽略所有名为app_inner.log的文件。

目录黑名单

  • 选择目录黑名单,配置目录为/home/admin/dir1,则表示在采集时忽略/home/admin/dir1目录下的所有文件。

  • 选择目录黑名单,配置目录为/home/admin/dir*,则表示在采集时忽略/home/admin/目录下所有以dir开头的子目录下的文件。

  • 选择目录黑名单,配置目录为/home/admin/*/dir,则表示在采集时忽略/home/admin/目录下二级目录名为dir的子目录下的所有文件。例如/home/admin/a/dir目录下的文件被忽略,/home/admin/a/b/dir目录下的文件被采集。

允许文件多次采集

默认情况下,一个日志文件只能匹配一个Logtail配置。如果文件中的日志需要被采集多份,需要打开允许文件多次采集开关。

高级参数

其它可选的与文件输入插件相关的高级功能参数,请参见创建Logtail流水线配置

处理配置参数介绍

配置项

说明

日志样例

待采集日志的样例,请务必使用实际场景的日志。日志样例可协助您配置日志处理相关参数,降低配置难度。支持添加多条样例,总长度不超过1500个字符。

[2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened
    at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
    at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
    at TestPrintStackTrace.main(TestPrintStackTrace.java:16)

多行模式

  • 多行日志的类型:多行日志是指每条日志分布在连续的多行中,需要从日志内容中区分出每一条日志。

    • 自定义:通过行首正则表达式区分每一条日志。

    • 多行JSON:每个JSON对象被展开为多行,例如:

      {
        "name": "John Doe",
        "age": 30,
        "address": {
          "city": "New York",
          "country": "USA"
        }
      }
  • 切分失败处理方式:

    Exception in thread "main" java.lang.NullPointerException
        at com.example.MyClass.methodA(MyClass.java:12)
        at com.example.MyClass.methodB(MyClass.java:34)
        at com.example.MyClass.main(MyClass.java:½0)

    对于以上日志内容,如果日志服务切分失败:

    • 丢弃:直接丢弃这段日志。

    • 保留单行:将每行日志文本单独保留为一条日志,保留为一共四条日志。

处理模式

处理插件组合,包括原生插件拓展插件。有关处理插件的更多信息,请参见处理插件概述

重要

处理插件的使用限制,请以控制台页面的提示为准。

  • 2.0版本的Logtail:

    • 原生处理插件可任意组合。

    • 原生处理插件和扩展处理插件可同时使用,但扩展处理插件只能出现在所有的原生处理插件之后。

  • 低于2.0版本的Logtail:

    • 不支持同时添加原生插件和扩展插件。

    • 原生插件仅可用于采集文本日志。使用原生插件时,须符合如下要求:

      • 第一个处理插件必须为正则解析插件、分隔符模式解析插件、JSON解析插件、Nginx模式解析插件、Apache模式解析插件或IIS模式解析插件。

      • 从第二个处理插件到最后一个处理插件,最多包括1个时间解析处理插件,1个过滤处理插件和多个脱敏处理插件。

    • 对于解析失败时保留原始字段解析成功时保留原始字段参数,只有以下组合有效,其余组合无效。

      • 只上传解析成功的日志:

        image

      • 解析成功时上传解析后的日志,解析失败时上传原始日志:

        image

      • 解析成功时不仅上传解析后的日志,并且追加原始日志字段,解析失败时上传原始日志。

        例如,原始日志"content": "{"request_method":"GET", "request_time":"200"}"解析成功,追加原始字段是在解析后日志的基础上再增加一个字段,字段名为重命名的原始字段(如果不填则默认为原始字段名),字段值为原始日志{"request_method":"GET", "request_time":"200"}

        image

地域

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

  2. 单击Project名称右侧的image进入项目概览页面。

  3. 在基础信息中可查看当前Project的地域名称,地域名称对应RegionID请参考下表。

    地域代表云服务资源的物理数据中心所在的地理位置RegionID 是云服务地域的唯一标识符。

    地域名称

    RegionID

    华北1(青岛)

    cn-qingdao

    华北2(北京)

    cn-beijing

    华北3(张家口)

    cn-zhangjiakou

    华北5(呼和浩特)

    cn-huhehaote

    华北6(乌兰察布)

    cn-wulanchabu

    华东1(杭州)

    cn-hangzhou

    华东2(上海)

    cn-shanghai

    华东5(南京-本地地域-关停中)

    cn-nanjing

    华东6(福州-本地地域-关停中)

    cn-fuzhou

    华南1(深圳)

    cn-shenzhen

    华南2(河源)

    cn-heyuan

    华南3(广州)

    cn-guangzhou

    菲律宾(马尼拉)

    ap-southeast-6

    韩国(首尔)

    ap-northeast-2

    马来西亚(吉隆坡)

    ap-southeast-3

    日本(东京)

    ap-northeast-1

    泰国(曼谷)

    ap-southeast-7

    西南1(成都)

    cn-chengdu

    新加坡

    ap-southeast-1

    印度尼西亚(雅加达)

    ap-southeast-5

    中国香港

    cn-hongkong

    德国(法兰克福)

    eu-central-1

    美国(弗吉尼亚)

    us-east-1

    美国(硅谷)

    us-west-1

    英国(伦敦)

    eu-west-1

    阿联酋(迪拜)

    me-east-1

    沙特(利雅得)

    me-central-1

网络传输类型

网络类型

对应域名类型

描述

适用场景

阿里云内网

私网域名

阿里云内网为千兆共享网络,日志数据通过阿里云内网传输比公网传输更快速、稳定,内网包括VPC和经典网络。

ECS实例和日志服务Project属于同一地域或服务器通过高速通道连接专有网络(VPC)的情况。

说明

推荐在ECS所在地域创建日志服务Project,通过阿里云内网采集ECS中日志,不消耗公网带宽。

公网

公网域名

使用公网传输日志数据,不仅会受到网络带宽的限制,还可能会因网络抖动、延迟、丢包等影响数据采集的速度和稳定性。

以下两种情况,可以选择公网传输数据。

  • ECS实例和日志服务Project属于不同地域。

  • 服务器为其他云厂商服务器或自建IDC。

传输加速

传输加速域名

利用阿里云CDN边缘节点进行日志采集加速,相对公网采集在网络延迟、稳定性上具有很大优势,但流量需额外计费。 

如果业务服务器、日志服务Project分别属于国内地域和国外地域,使用公网传输数据可能会出现网络延迟高、传输不稳定等问题,您可以选择传输加速传输数据。更多信息,请参见传输加速