本文介绍如何通过日志服务(SLS)控制台,采集 Docker 容器的标准输出(stdout/stderr)和容器内文本日志文件。涵盖从环境准备、安装 LoongCollector 到基础采集、结构化解析、脱敏过滤等完整配置流程。
采集配置创建流程
准备工作(可选):如果暂无合适的业务容器进行测试,可以使用本文提供的测试Demo,部署一个持续生成日志的测试容器;并创建Project和Logstore,用于日志隔离与存储。
安装LoongCollector:通过DaemonSet模式部署LoongCollector,确保集群中每个节点均运行一个采集容器,统一采集该节点上所有容器的日志。
Sidecar模式请参考采集集群文本日志(Sidecar)。
创建机器组:用于统一管理采集节点,日志服务通过机器组对服务器进行配置分发与状态管理,各服务器通过心跳机制与机器组建立关联。
创建采集配置:
本文仅介绍常用的配置参数,涵盖典型使用场景下的核心选项。如需了解完整的配置参数列表及详细说明,请参考更多信息。
极简配置(必选):构建从集群到日志服务Project的数据通道。
常用处理配置(可选):配置常用数据处理插件,对采集到的原始日志进行结构化解析(如正则解析、分隔符解析)或脱敏、过滤处理等。
本文仅介绍原生处理插件,覆盖常见日志处理场景,如需更多功能,请参考扩展处理插件。
其他高级配置(可选):实现多行文本日志的采集、日志标签富化等,满足更精细化的采集需求。
准备工作
准备日志源
如果暂无合适的业务容器进行测试,可以部署一个持续生成日志的测试容器。该容器会持续生成两种日志类型:
创建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.sh
和Dockerfile
放在同一目录下构建。
# 构建镜像
sudo docker build -t logging-test-app .
# 运行容器
sudo docker run -d --name my-logger logging-test-app
验证容器运行状态
预期输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cdd61e5dc51 logging-test-app "./log_generator.sh" 6 seconds ago Up 6 seconds my-logger
创建Project和Logstore
若您已提前创建好Project和Logstore,可跳过此步骤,直接安装LoongCollector。
登录日志服务控制台。
单击创建Project。
配置:
其他配置保持默认,单击创建。如需了解其他参数,请参见创建Project。
单击Project名称,进入目标Project。
在左侧导航栏,选择
,单击+。
在创建Logstore页面,完成以下核心配置:
Logstore名称:设置一个在Project内唯一的名称。该名称创建后不可修改。
Logstore类型:根据规格对比选择标准型或查询型。
计费模式:
数据保存时间:设置日志的保留天数,取值范围为1~3650天(3650天表示永久保存)。默认为30天。
其他配置保持默认,单击确定。如需了解其他配置信息,请参考管理Logstore。
安装LoongCollector
如果您已安装LoongCollector或Logtail,可跳过此步骤,直接创建机器组。
拉取镜像
在已安装Docker的宿主机上执行如下命令,替换${region_id}
为Project所在地域的RegionID(如cn-hangzhou
)。
# 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
启动LoongCollector容器
替换以下变量:
${region_id}
:Project所在地域,支持公网/内网模式。
示例:cn-hangzhou
(内网)、cn-hangzhou-internet
(公网)。
${aliyun_account_id}
:阿里云主账号ID。
${user_defined_id}
:机器组的用户自定义标识,如user-defined-docker-1
,需在地域内唯一。
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
重要 自定义LoongCollector(Logtail)容器的启动参数,必须确保满足以下条件:
配置环境变量:ALIYUN_LOGTAIL_CONFIG
、ALIYUN_LOGTAIL_USER_ID
和ALIYUN_LOGTAIL_USER_DEFINED_ID
。
挂载宿主机/var/run
目录:将宿主机/var/run
目录挂载至LoongCollector(Logtail)容器内相同路径(/var/run
)。
挂载宿主机根目录:将宿主机根目录(/
)挂载到LoongCollector(Logtail)容器内的/logtail_host
目录。
验证启动成功
docker ps | grep 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
创建机器组
进入目标Project。左侧导航,单击。
配置参数,并单击确定:
单击新建机器组名称,进入机器组详情页,查看:
极简配置
完成前置准备后,即可开始创建采集配置。本节介绍两种极简采集场景——容器标准输出和集群文本日志,仅将原始日志上传至 Logstore,不涉及任何解析或处理,适用于快速建立数据通道。
在 日志库页面: 单击目标Logstore名称前的 。 单击数据接入后的 。 根据日志源选择快速接入模板。容器内日志包含两种日志来源:
| 
|
采集容器标准输出(stdout/stderr)
在快速数据接入弹框中,搜索模板:Docker标准输出-新版,单击立即接入。 机器组配置,完成后单击下一步: Logtail配置,完成后单击下一步:
查询分析配置:预览数据,单击自动生成索引,完成后单击下一步结束配置。
| 原始日志: 10.244.0.1 - - [01/Aug/2025:10:25:30 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.88.1"
|
采集原始标准输出(Stdout): 10.244.0.1 - - [01/Aug/2025:10:25:30 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.88.1"
|
采集Docker容器文本日志
在快速数据接入弹框中,搜索模板:Docker文件-容器,单击立即接入。 机器组配置,完成后单击下一步: Logtail配置,完成后单击下一步: 全局配置:填写配置名称。 输入配置: 文件路径类型: 容器内路径:采集容器内的日志文件。 宿主机路径:采集宿主机本地服务日志。
文件路径:日志采集的绝对路径,Linux下以“/”开头。 示例:/data/mylogs/**/*.log ,表示/data/mylogs 目录下所有后缀名为.log 的文件。 最大目录监控深度:文件路径中通配符** 匹配的最大目录深度。默认为0(仅本层),取值范围是0~1000。 建议设置为0,配置路径到文件所在的目录。
处理配置:
查询分析配置:预览数据,单击自动生成索引,完成后单击下一步结束配置。
| 原始日志: Aug 19 11:20:51 hostname-1 crond[2995]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
|
原始日志整行存储至content: content: Aug 19 11:20:51 hostname-1 crond[2995]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
|
常用处理配置
在完成极简配置后,您可以通过添加处理插件,对原始日志进行结构化解析或脱敏、过滤处理。
此处仅介绍原生处理插件,覆盖常见日志处理场景,如需更多功能,请参考扩展处理插件。
重要 对于Logtail 2.0及以上版本以及LoongCollector组件,推荐遵循以下插件组合规则:
您可以在新建/更新采集配置时添加处理插件:
更新采集配置:
在左侧导航栏,选择
日志库,找到目标Logstore。
单击其名称前的
展开Logstore。
单击Logtail配置,在配置列表中,找到目标Logtail配置,单击操作列的管理Logtail配置。
在Logtail配置页面,单击编辑,下滑至区域,配置解析插件。
新建采集配置:在区域,配置解析插件。
结构化配置
正则解析
通过正则表达式提取日志字段,并将日志解析为键值对形式。
添加日志样例:使用实际场景中待采集日志的样例。配置日志样例可协助配置日志处理相关参数,降低配置难度。 单击添加处理插件,选择: 正则表达式:用于匹配日志,支持自动生成或手动输入: 自动生成: 单击自动生成正则表达式。 在日志样例中划选需要提取的日志内容。 单击生成正则。
手动输入:根据日志格式手动输入正则表达式。
配置完成后,单击验证,测试正则表达式是否能够正确解析日志内容。 日志提取字段:为提取的日志内容(Value),设置对应的字段名(Key)。
| 原始日志: 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"
|
自定义正则解析:正则表达式(\S+)\s-\s(\S+)\s\[([^]]+)]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"]+)"\s"([^"]+).* 。 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
|
分隔符解析
通过分隔符将日志内容结构化,解析为多个键值对形式,支持单字符分隔符和多字符分隔符。
单击添加处理插件,选择: 分隔符:指定用于切分日志内容的字符。 示例:对于CSV格式文件,选择自定义,输入半角逗号(,)。 引用符:当某个字段值中包含分隔符时,需要指定引用符包裹该字段,避免错误切割。 日志提取字段:按分隔顺序依次为每一列设置对应的字段名称(Key)。规则要求如下: 字段名只能包含:字母、数字、下划线(_)。 必须以字母或下划线(_)开头。 最大长度:128字节。
| 原始日志: 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
|
标准JSON解析
将Object类型的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"}
|
标准JSON键值自动提取: 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
|
嵌套JSON解析
通过指定展开深度,将嵌套的JSON日志解析为键值对形式。
单击添加处理插件,选择: 原始字段:需要展开的原始字段名,例如content 。 JSON展开深度:JSON对象的展开层级。0表示完全展开(默认值),1表示当前层级,以此类推。 JSON展开连接符:JSON展开时字段名的连接符,默认为下划线 _。 JSON展开字段前缀:指定JSON展开后字段名的前缀。 展开数组:开启此项可将数组展开为带索引的键值对。 示例:{"k":["a","b"]} 展开为 {"k[0]":"a","k[1]":"b"} 。 如果需要对展开后的字段进行重命名(例如,将 prefix_s_key_k1 改为 new_field_name),可以后续再添加一个重命名字段插件来完成映射。
| 原始日志: {"s_key":{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}}
|
展开深度: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_extract
函数,从JSON数组中提取JSON对象。
将处理模式切换为SPL: | 原始日志: [{"key1":"value1"},{"key2":"value2"}]
|
提取JSON数组结构: json1:{"key1":"value1"}
json2:{"key2":"value2"}
|
Nginx日志解析
根据log_format中的定义将日志内容结构化,解析为多个键值对形式。如默认内容不符合您的需求,可使用自定义格式。
单击添加处理插件,选择: | 原始日志: 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"
|
根据log_format main 的定义解析为键值对: 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
|
Apache日志解析
根据Apache日志配置文件中的定义将日志内容结构化,解析为多个键值对形式。
单击添加处理插件,选择: | 原始日志: 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"
|
Apache通用日志格式combined 解析: 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]
|
数据脱敏
对日志中的敏感数据进行脱敏处理。
在处理配置区域,单击添加处理插件,选择: 原始字段:解析日志前,用于存放日志内容的原始字段。 脱敏方式: const:将敏感内容替换成所修改的字符串。 md5:将敏感内容替换为其对应的MD5值。
替换字符串:选择脱敏方式为const时,需要输入字符串,用于替换敏感内容。 被替换内容前的内容表达式:用于查找敏感内容,使用RE2语法配置。 被替换的内容表达式:敏感内容的表达式,使用RE2语法配置。
| 原始日志: [{'account':'1812213231432969','password':'04a23f38'}, {'account':'1812213685634','password':'123a'}]
|
脱敏结果: [{'account':'1812213231432969','password':'********'}, {'account':'1812213685634','password':'********'}]
|
内容过滤
基于正则表达式匹配日志字段值,仅采集符合白名单条件的日志。
在处理配置区域,单击添加处理插件,选择: | 原始日志: {"level":"WARNING","timestamp":"2025-09-23T19:11:40+0800","cluster":"yilu-cluster-0728","message":"Disk space is running low","freeSpace":"15%"}
{"level":"ERROR","timestamp":"2025-09-23T19:11:42+0800","cluster":"yilu-cluster-0728","message":"Failed to connect to database","errorCode":5003}
{"level":"INFO","timestamp":"2025-09-23T19:11:47+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}
|
过滤日志:设置字段名为level ,字段值为WARNING|ERROR ,表示只采集level 字段值为WARNING 或ERROR 的日志。 {"level":"WARNING","timestamp":"2025-09-23T19:11:40+0800","cluster":"yilu-cluster-0728","message":"Disk space is running low","freeSpace":"15%"}
{"level":"ERROR","timestamp":"2025-09-23T19:11:42+0800","cluster":"yilu-cluster-0728","message":"Failed to connect to database","errorCode":5003}
|
时间解析
对日志中的时间字段进行解析,并将解析结果设置为日志的__time__
字段。
在处理配置区域,单击添加处理插件,选择: 原始字段:解析日志前,用于存放日志内容的原始字段。 时间格式:根据日志中的时间内容设置对应的时间格式。 时区:选择日志时间字段所在的时区。默认使用机器时区,即LoongCollector(Logtail)进程所在环境的时区。
| 原始日志: {"level":"INFO","timestamp":"2025-09-23T19:11:47+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}
|
时间解析: 
|
其他高级配置
在完成极简配置和常用处理配置后,您可以参考下述操作采集多行日志、配置日志主题类型等,以满足更精细化的日志采集需求。
无论是创建采集配置还是更新采集配置,都需要在页面完成。以下为更新采集配置的入口:
在左侧导航选择
日志库,找到目标Logstore。
单击其名称前的
展开Logstore。
单击Logtail配置,在配置列表中,找到目标Logtail配置,单击操作列的管理Logtail配置。
在Logtail配置页面,单击编辑。
功能 | 用途 |
多行日志采集 | 处理 Java 堆栈等跨行日志 |
容器过滤 | 按容器名、标签、环境变量筛选 |
黑名单过滤 | 忽略敏感或无关日志文件 |
日志标签富化 | 添加环境变量、容器信息作为元字段 |
传输压缩 | 启用 lz4 /zstd 减少带宽 |
多行日志采集
默认情况下,日志服务以单行模式工作,会将每一行文本都视为一条独立的日志。这会导致包含堆栈跟踪、JSON 等内容的多行日志被错误地拆分,从而丢失上下文。
针对上述问题,可以开启多行模式,定义一个行首正则表达式,让日志服务能够准确识别一条完整日志的起始行,从而将多行内容合并为一条日志。
处理配置: 开启多行模式。 类型:选择自定义或多行JSON。 切分失败处理方式:
| 原始日志: [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)
|
单行模式:每行作为独立日志,堆栈信息被拆散,丢失上下文。 
|
多行模式:通过行首正则识别完整日志,保留完整语义结构。 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)
|
配置日志主题类型
:选择Topic生成方式。
机器组Topic:日志服务支持将一个采集配置应用到多个机器组。LoongCollector上报数据时,会将服务器所在机器组的Topic作为日志主题上传至Logstore,您可以根据Topic区分来自不同机器组的日志。
文件路径提取:若不同的用户或应用将日志写入不同的顶级目录,但下级路径和文件名相同,导致无法从文件名区分日志来源。此时您可以配置文件路径提取,通过正则表达式来匹配完整的文件路径,并将匹配结果(用户名或应用名)作为日志主题(Topic)上传至Logstore。
说明 文件路径的正则表达式中,需要对正斜线(/)进行转义。
通过文件路径正则提取
场景描述:不同用户将日志记录在不同目录下,但是日志文件名称相同,目录路径如下所示。
/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
|
通过多捕获组提取
场景描述:如果单个日志主题不足以区分日志的来源,可以在日志文件路径中配置多个正则捕获组来提取关键信息。其中捕获组包括命名捕获组(?P<name>)和非命名捕获组两类。
说明 当正则表达式中存在多个捕获组时,不会生成__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
查询相应主题的日志。

自定义:输入customized:// + 自定义主题名
,使用自定义的静态日志主题。
容器过滤与黑名单
黑名单
:开启采集黑名单,单击添加,配置黑名单。
支持完整匹配和通配符匹配目录和文件名,通配符只支持星号(*)和半角问号(?)。
日志传输压缩
:
说明 仅Logtail 1.3.4及以上的版本支持zstd压缩。
lz4:压缩速度快,压缩率较低。
zstd:压缩率高,速度略低,内存占用高。
后续步骤
日志查询与分析:可以使用内置的通过AI智能生成查询与分析语句(Copilot),自动生成查询分析语句。采集的每条Docker容器文本日志中默认包含以下字段信息:
字段名 | 说明 |
__source__ | LoongCollector(Logtail)容器的IP地址。 |
_container_ip_ | 业务容器的IP地址。 |
__tag__:__hostname__ | LoongCollector(Logtail)所在Docker主机的名称。 |
__tag__:__path__ | 日志采集路径。 |
__tag__:__receive_time__ | 日志到达服务端的时间。 |
__tag__:__user_defined_id__ | 机器组的自定义标识。 |
数据可视化:借助可视化仪表盘监控关键指标趋势。
数据异常自动预警:设置告警策略,实时感知系统的异常情况。
常用命令
查看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
常见问题
常见错误信息
错误现象 | 原因 | 解决方案 |
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
目录。
如何让同一个日志文件或容器标准输出被多个采集配置同时采集?
默认情况下,日志服务为了防止数据重复,限制了每个日志源只能被一个采集配置采集:
登录日志服务控制台,进入目标Project。
在左侧导航选择
日志库,找到目标Logstore。
单击其名称前的
展开Logstore。
单击Logtail配置,在配置列表中,找到目标Logtail配置,单击操作列的管理Logtail配置。
在Logtail配置页面,单击编辑,下滑至输入配置区域:
采集文本文件日志:开启允许文件多次采集。
采集容器标准输出:开启允许标准输出多次采集。
更多信息
全局配置参数介绍
配置项 | 说明 |
配置名称 | Logtail配置名称,在其所属Project内必须唯一。创建Logtail配置成功后,无法修改其名称。 |
日志主题类型 | 选择日志主题(Topic)的生成方式。包含机器组Topic,文件路径提取,自定义三种方式。 |
高级参数 | 其它可选的与配置全局相关的高级功能参数,请参见创建Logtail流水线配置。 |
输入配置参数介绍
配置项 | 说明 |
Logtail部署模式 | DaemonSet:在集群的每个Node节点上部署一个 LoongCollector,负责采集该节点上所有容器的日志。 Sidecar:每个容器组(Pod)运行一个LoongCollector容器,用于采集当前容器组(Pod)所有容器(Containers)的日志。不同Pod的日志采集相互隔离。 |
文件路径类型 | 支持配置容器内路径和宿主机路径。 |
文件路径 | 根据日志在主机(例如ECS)上的位置,设置日志目录和文件名称。 目录名和文件名均支持完整模式和通配符模式,文件名规则请参见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配置后,查看容器元信息,包括匹配容器信息和全量容器信息。 |
容器过滤 |
重要 容器Label为Docker inspect中的Label,不是Kubernetes中的Label。如何获取,请参见获取容器Label。 环境变量为容器启动中配置的环境变量信息。如何获取,请参见获取容器环境变量。 Kubernetes场景下,推荐使用Kubernetes层级的信息(K8s Pod名称正则匹配、K8s Namespace正则匹配、K8s容器名称正则匹配、K8s Pod标签白名单等)进行容器过滤。
Kubernetes中的Namespace和容器名称会映射到容器Label中,分别为io.kubernetes.pod.namespace 和io.kubernetes.container.name ,推荐使用这两个容器Label进行容器过滤。例如,某Pod所属的命名空间为backend-prod ,容器名为worker-server ,如要采集包含该容器的日志,可以设置容器Label白名单为io.kubernetes.pod.namespace : backend-prod 或io.kubernetes.container.name : worker-server 。 如果以上两个容器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的值完全相同才会匹配。如果该值以^ 开头并且以$ 结尾,则为正则匹配。例如:配置LabelKey为io.kubernetes.container.name,配置LabelValue为^(nginx|cube)$,表示可匹配名为nginx、cube的容器。
多个白名单之间为或关系,即只要容器Label满足任一白名单即可被匹配。 容器label黑名单 容器Label黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如要设置容器Label黑名单,那么LabelKey必填,LabelValue可选填。 如果LabelValue为空,则容器Label中包含LabelKey的容器都将被排除。 如果LabelValue不为空,则容器Label中包含LabelKey=LabelValue的容器才会被排除。 LabelValue默认为字符串匹配,即只有LabelValue和容器Label的值完全相同才会匹配。如果该值以^ 开头并且以$ 结尾,则为正则匹配。例如:设置LabelKey为io.kubernetes.container.name,设置LabelValue为^(nginx|cube)$,表示可匹配名为nginx、cube的容器。
多个黑名单之间为或关系,即只要容器Label满足任一黑名单对即可被排除。 环境变量白名单 环境变量白名单,用于指定待采集的容器。默认为空,表示采集所有容器的标准输出。如要设置环境变量白名单,那么EnvKey必填,EnvValue可选填。 如果EnvValue为空,则容器环境变量中包含EnvKey的容器都匹配。 如果EnvValue不为空,则容器环境变量中包含EnvKey=EnvValue的容器才匹配。 EnvValue默认为字符串匹配,即只有EnvValue和环境变量的值完全相同才会匹配。如果该值以^ 开头并且以$ 结尾,则为正则匹配,例如:设置EnvKey为NGINX_SERVICE_PORT,设置EnvValue为^(80|6379)$,表示可匹配服务端口为80、6379的容器。
多个白名单之间为或关系,即只要容器的环境变量满足任一键值对即可被匹配。 环境变量黑名单 环境变量黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如要设置环境变量黑名单,那么EnvKey必填,EnvValue可选填。 如果EnvValue为空,则容器环境变量中包含EnvKey的容器的日志都将被排除。 如果EnvValue不为空,则容器环境变量中包含EnvKey=EnvValue的容器才会被排除。 EnvValue默认为字符串匹配,即只有EnvValue和环境变量的值完全相同才会匹配。如果该值以^ 开头并且以$ 结尾,则为正则匹配,例如:设置EnvKey为NGINX_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默认为字符串匹配,即只有LabelValue和Kubernetes Label的值完全相同才会匹配。如果该值以^ 开头并且以$ 结尾,则为正则匹配。例如设置LabelKey为app,设置LabelValue为^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。
多个白名单之间为或关系,即只要Kubernetes Label满足任一白名单即可被匹配。 K8s Pod标签黑名单 通过Kubernetes Label黑名单排除不采集的容器。如要设置Kubernetes Label黑名单,那么LabelKey必填,LabelValue可选填。 如果LabelValue为空,则Kubernetes Label中包含LabelKey的容器都被排除。 如果LabelValue不为空,则Kubernetes Label中包含LabelKey=LabelValue的容器才会被排除。 LabelValue默认为字符串匹配,即只有LabelValue和Kubernetes Label的值完全相同才会匹配。如果该值以^ 开头并且以$ 结尾,则为正则匹配。例如设置LabelKey为app,设置LabelValue为^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。
多个黑名单之间为或关系,即只要Kubernetes Label满足任一黑名单对即可被排除。 |
日志标签富化 | 可将环境变量和Kubernetes Label添加到日志,作为日志标签。 环境变量相关 设置环境变量扩展字段后,日志服务将在日志中新增环境变量相关字段。例如设置环境变量名为VERSION,设置tag名为env_version,当容器中包含环境变量VERSION=v1.0.0 时,会将该信息添加到日志中,即添加字段__tag__:__env_version__: v1.0.0。 Pod标签相关 设置Kubernetes Pod扩展字段后,日志服务将在日志中新增Kubernetes Pod相关字段。例如设置Pod标签名为app,设置tag名为k8s_pod_app ,当Kubernetes中包含Labelapp=serviceA 时,会将该信息添加到日志中,即添加字段__tag__:__k8s_pod_app__: serviceA。 |
文件编码 | 选择日志文件的编码格式。 |
首次采集大小 | 配置首次生效时,匹配文件的起始采集位置距离文件结尾的大小。首次采集大小设定值为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:
|
地域
登录日志服务控制台,在Project列表中,单击目标Project。
单击Project名称右侧的
进入项目概览页面。
在基础信息中可查看当前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分别属于国内地域和国外地域,使用公网传输数据可能会出现网络延迟高、传输不稳定等问题,您可以选择传输加速传输数据。更多信息,请参见传输加速。 |