日志服务默认将整条日志以原始形式存入 content 字段,无论其来源是纯文本还是结构化数据(如 JSON)。虽然您可以通过全文搜索访问其中的信息,但若希望高效地按字段进行查询、统计或可视化,就需要借助解析插件,将内容提取为结构化的键值对(Key-Value)。解析插件不仅支持对 content 字段进行解析,还能对任意字段(例如 message 中嵌套的子日志)执行进一步解析。您只需指定新的解析目标字段,并选择适合该内容格式的解析插件即可。
数据解析效果示例
以常见的应用打印文本日志为例,直观了解使用数据解析插件前后的差异。
不使用解析插件
未经任何处理的原始日志,保存到日志服务后所有信息都混杂在一个content字段中,难以直接使用。
Content:"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如何选择数据解析插件
日志服务提供多种解析插件,适配不同格式的日志。选择合适的插件可显著提升解析效率与配置体验。请根据日志的实际格式和结构进行选择:
正则解析:适用于从非结构化文本中提取符合特定模式的内容。
优势:通用性强,几乎可处理任意文本格式。
限制:需手动编写和调试正则表达式,学习成本较高;在高吞吐场景下性能开销相对较大。
JSON解析:解析标准JSON Object格式日志。
优势:配置简单,解析速度快,无需编写规则。
限制:默认仅提取JSON Object的首层键值对;不支持直接解析JSON Array,如需处理嵌套或数组结构请参考如何处理复杂JSON。
分隔符模式解析:适用于字段由固定分隔符(如 | , && 等)分隔的日志。常见于 CSV 或自定义格式日志。
优势:配置直观,适合格式规整的结构化文本。
提示:请确保分隔符在日志内容中不会意外出现,以免解析错位。
专用日志格式解析:针对主流日志提供开箱即用的支持,无需编写正则表达式。
Nginx模式解析:只需粘贴Nginx配置文件中的
log_format定义,即可解析Nginx访问日志。Apache模式解析:只需粘贴Apache配置文件中的
LogFormat定义,即可解析Apache访问日志。IIS模式解析:支持 W3C、NCSA 和 IIS 原生日志格式,按实际日志类型选择对应模板即可。
功能入口
当需要使用插件处理日志时,可在创建或修改Logtail配置时,添加插件。
修改Logtail配置时添加插件
登录日志服务控制台。
在Project列表区域,单击目标Project。

在页签中,单击目标日志库前面的>,依次选择。

在Logtail配置列表中,单击目标Logtail配置后操作列的管理Logtail配置。
单击页面上方的编辑,在页面下方的处理配置区域,新增Logtail插件,然后单击保存。
创建Logtail配置时添加插件
登录日志服务控制台。
单击控制台页面右侧的快速接入数据卡片。

在接入数据对话框中,单击任意卡片,按照配置向导进行操作,在Logtail配置的处理配置中添加处理插件。
说明该插件配置与在修改Logtail配置时的插件配置相同。
数据解析插件使用
通用配置参数
以下参数在各数据解析插件中都会出现,其功能和用法是统一的,在后续插件说明中不再赘述。
参数名称 | 说明 |
原始字段 | 解析日志前,用于存放日志内容的原始字段,默认为 |
解析失败时保留原始字段 | 推荐开启。当日志无法被插件成功解析时(例如格式不匹配),此选项能确保原始日志内容不会丢失,而是被完整保留在指定的原始字段中。这对于调试和保证数据完整性至关重要。 |
解析成功时保留原始字段 | 选中后,即使日志解析成功,原始日志内容也会被保留。通常用于数据核对场景。 |
重命名的原始字段 | 当开启解析失败时保留原始字段或解析成功时保留原始字段后,可以使用此参数为保留下来的原始日志内容指定一个新的字段名,以避免与原字段名冲突。 |
正则解析
正则解析插件支持通过正则表达式提取日志字段,并将日志解析为键值对形式。灵活性极高,能适应几乎所有文本格式。
配置说明
参数说明
除通用配置参数外核心参数如下:
参数名称
说明
正则表达式
用于匹配日志的正则表达式。
若在处理配置中配置了日志样例,在正则解析处理插件中会出现您配置的日志样例,支持通过自动或手动输入行首正则表达式的方式生成正则表达式。
单击自动生成正则表达式,然后在日志样例文本框中,划选需提取的日志内容,单击生成正则,日志服务会根据划选的内容,生成正则表达式。
单击手动输入正则表达式,输入正则表达式。配置完成后,单击验证即可验证输入的正则表达式是否可以解析、提取目标日志内容。更多信息,请参见如何调试正则表达式。
若未配置日志样例,需根据实际日志输入正则表达式。
日志提取字段
为提取到的日志内容(Value),设置对应的字段名(Key)。
配置示例
输入日志
127.0.0.1 - - [16/Oct/2023:12:36:49 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"插件配置
参考功能入口配置,其中,正则表达式为
(\S+)\s-\s(\S+)\s\[([^]]+)]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)(\s\d+)[^-]+([^"]+)"\s"([^"]+).*。
解析结果

JSON解析
JSON解析插件支持将Object类型的JSON日志结构化,解析为键值对形式。
使用限制
JSON日志包含Object类型(键值对的集合)和Array类型(值的有序列表)。JSON解析插件默认仅提取JSON Object的首层键值对;不支持直接解析JSON Array,若有相关需求请参考如何处理复杂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/2020:13:30:28"}插件配置
参考功能入口配置。

解析结果

分隔符模式解析
分隔符模式解析插件支持通过分隔符将日志内容结构化,解析为多个键值对形式。
配置说明
参数说明
除通用配置参数外核心参数如下:
参数
描述
分隔符
请根据日志内容选择正确的分隔符,例如竖线(|)。
说明指定分隔符为不可见字符时,需要查找不可见字符在ASCII码中对应的十六进制数,输入的格式为
0x<不可见字符在ASCII码中对应的十六进制数>。例如ASCII码中排行为1的不可见字符为0x01。引用符
当日志字段内容中包含分隔符时,需指定引用符进行包裹,被引用符包裹的内容会被日志服务解析为一个完整字段。请根据日志格式选择正确的引用符。
说明指定引用符为不可见字符时,需要查找不可见字符在ASCII码中对应的十六进制数,输入的格式为
0x<不可见字符在ASCII码中对应的十六进制数>。例如ASCII码中排行为1的不可见字符为0x01。日志抽取字段
配置了日志样例时,日志服务会根据日志样例及选择的分隔符提取日志内容,并将其定义为Value,需为各个Value指定对应的Key。
未配置日志样例时,无Value列表,需要根据实际日志及分隔符情况,输入对应的Key。
Key只能包括字母、数字或下划线(_),且只能以字母或下划线(_)开头。最大长度为128字节。
允许部分字段
日志中提取出的Value数量小于Key数量,是否上传日志到日志服务。选中允许部分字段表示上传。
例如日志为
11|22|33|44,分隔符为竖线(|),Key为A、B、C、D和E。如果选中允许部分字段,则
E字段的Value为空,该日志将被上传到日志服务。如果未选中允许部分字段,该日志会被丢弃。
说明Linux Logtail 1.0.28及以上版本或Windows Logtail 1.0.28.0及以上版本支持配置分隔符模式的允许部分字段参数。
处理超出字段方式
日志中提取的Value数量大于Key数量时的处理方法。
展开:保留多余的Value内容,分别添加到
__column$i__格式的字段中,其中$i代表多余字段序号,从0开始计数。例如__column0__、__column1__。保留:保留多余的Value内容,并整体添加到名为
__column0__的字段中。丢弃:丢弃多余的Value内容。
配置示例
示例一:单字符分隔符
输入日志
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插件配置
参考功能入口配置,分隔符使用半角逗号(,)且引用符为双引号(")。
说明分隔符:通过分隔符分割日志,例如制表符(\t)、竖线(|)、空格、半角逗号(,)、半角分号(;)和不可见字符等单字符。分隔符不支持为双引号(")。
若双引号(")作为字段内容出现,需要进行转义,即在日志中处理为
""。日志服务解析字段时会自动还原,将""还原为"。例如分隔符为半角逗号(,),引用符为双引号("),且日志字段内部包含双引号(")和半角逗号(,),需将包含半角逗号(,)的日志字段用引用符包裹,同时将日志字段中的双引号(")转义为""。处理后的日志格式为:Chevy,"Venture ""Extended Edition, Very Large""","",该日志可以被解析为3个字段:Chevy、Venture "Extended Edition, Very Large"、空字段。引用符:日志字段内容中包含分隔符时,需指定引用符进行包裹,被引用符包裹的内容会被解析为一个完整字段。引用符可设置为制表符(\t)、竖线(|)、空格、半角逗号(,)、半角分号(;)和不可见字符等单字符。
例如分隔符为半角逗号(,),引用符为双引号("),日志为
1997,"ac,moon",3000.00,该日志被解析为3个字段:1997、ac,moon、3000.00。解析结果
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
示例二:多字符分隔符
输入日志
05/May/2022:13:30:28&&10.200.**.**&&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插件配置
参考功能入口配置,分隔符使用(&&)且无需修改引用符,引用符默认显示为双引号。
重要多字符模式中,分隔符包括2~3个字符(例如
||、&&&、^_^)。日志解析根据分隔符进行匹配,您无需使用引用符对日志字段进行包裹。但需要确保日志字段内容中不会出现分隔符的完整匹配,否则会导致字段误分割。解析结果
ip:10.200.**.** 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/2022:13:30:28 user_agent:aliyun-sdk-java
Nginx模式解析
Nginx模式插件支持根据log_format中的定义将日志内容结构化,解析为多个键值对形式。
Nginx日志简介
配置说明
参数说明
除通用配置参数外核心参数如下:
参数名称
说明
NGINX日志配置
Nginx配置文件中的日志配置部分,以log_format开头。例如:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$request_time $request_length ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"';日志提取字段
根据NGINX日志配置自动提取对应的日志字段(Key)。
配置示例
输入日志
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"插件配置

参考功能入口配置,NGINX日志配置使用如下示例:生产环境中,此处的
log_format必须与Nginx配置文件(通常位于 /etc/nginx/nginx.conf文件中)中的定义保持一致。log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time $request_length';解析结果
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模式解析插件支持根据Apache日志配置文件中的定义将日志内容结构化,解析为多个键值对形式。
Apache日志简介
配置说明
参数说明
除通用配置参数外核心参数如下:
参数名称
说明
日志格式
根据Apache日志配置文件中定义的日志格式进行选择,包括common、combined和自定义。
APACHE配置字段
Apache配置文件中的日志配置部分,通常以LogFormat开头。
当配置日志格式为common或combined时,此处会自动填充对应格式的配置字段,请确认是否和Apache配置文件中定义的格式一致。
当配置日志格式为自定义时,请根据实际情况填写,例如
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %f %k %p %q %R %T %I %O" customized。
日志提取字段
根据APACHE配置字段中的内容自动生成日志字段(key)。
配置示例
输入日志
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"插件配置
参考功能入口配置,日志格式选择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]
IIS模式解析
IIS模式插件支持根据IIS日志格式定义将日志内容结构化,解析为多个键值对形式。
IIS日志简介
配置说明
参数说明
除通用配置参数外核心参数如下:
参数名称
说明
日志格式
选择IIS服务器日志采用的日志格式,包括IIS、NCSA和W3C。
IIS配置字段
日志格式为IIS或NCSA时,日志服务已默认设置了IIS配置字段。
日志格式为W3C日志时,设置为IIS配置文件中
logExtFileFlags参数中的内容,例如:logExtFileFlags="Date, Time, ClientIP, UserName, SiteName, ComputerName, ServerIP, Method, UriStem, UriQuery, HttpStatus, Win32Status, BytesSent, BytesRecv, TimeTaken, ServerPort, UserAgent, Cookie, Referer, ProtocolVersion, Host, HttpSubStatus"IIS5配置文件默认路径:
C:\WINNT\system32\inetsrv\MetaBase.bin。IIS6配置文件默认路径:
C:\WINDOWS\system32\inetsrv\MetaBase.xml。IIS7配置文件默认路径:
C:\Windows\System32\inetsrv\config\applicationHost.config。
日志提取字段
根据IIS配置字段中的内容自动生成日志字段(Key)。
配置示例
输入日志
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken插件配置
参考功能入口配置,日志格式选择IIS。

解析结果
c-ip: cs-username cs-bytes: sc-substatus cs-method: cs-method cs-uri-query: cs-uri-query cs-uri-stem: cs-uri-stem cs-username: s-port date: #Fields: s-computername: s-sitename s-ip: s-ip s-sitename: time sc-bytes: sc-status sc-status: c-ip sc-win32-status: cs (User-Agent) time: date time-taken: sc-win32-status
常见问题
正则表达式在测试工具中正确,为何在日志服务中解析失败?
请检查以下常见问题:
日志样例不匹配:确保在Logtail配置中使用的日志样例与实际采集到的日志格式完全一致,包括空格和特殊字符。
多格式日志混杂:如果日志源包含多种格式,单一的正则表达式可能无法全部匹配。建议开启解析失败时保留原始字段,这样即使部分日志解析失败,原始数据也不会丢失,便于后续排查或使用多个Logtail配置分别处理不同格式的日志。
控制台与代码转义问题:从代码中复制的正则表达式可能包含额外的转义符(如
\\S+),在日志服务控制台配置时应使用单反斜杠(\S+)。
配置数据解析后,如何查询来自特定文件的日志?
采集时日志服务会自动为每条日志添加一个名为 __tag__:__path__ 的元数据字段,值为日志的完整源文件路径。可在查询分析语句中使用此字段进行过滤。例如,查询所有来自 /var/log/app/error.log 的日志:* AND __tag__:__path__: /var/log/app/error.log。
修改索引配置后(例如为JSON字段开启统计),为何无法查询到历史数据?
日志服务的索引修改仅对新写入的数据生效。对于已存在的历史数据,需执行重建索引任务,才能使用新的索引配置进行查询。
JSON日志格式较复杂(如包含JSONArray)时如何处理?
当日志字段是一个JSON数组,且需要将数组中的每个元素拆分成独立的日志条目时,标准JSON解析插件无法直接处理。
解决方案:
日志服务提供了展开JSON字段插件,专门用于处理此类场景。核心功能是“展开”或“拆分”指定的JSON数组字段。
工作原理:通过指定展开深度,遍历数组字段,并将数组中的每个元素作为一条新的日志生成。原始日志中的其他字段(非数组成员)会被完整地复制到每一条新生成的日志中。
对比示例:
此操作会增加日志条数。一条包含N个元素的数组日志,会变成N条日志。请在规划日志存储和索引成本时考虑这一情况。
展开深度:JSON对象的展开层级。0表示完全展开(默认值),1表示当前层级,以此类推。
原始日志 | 展开深度:0,并使用展开深度作为前缀 | 展开深度:1,并使用展开深度作为前缀 |
| | |
日志格式复杂,既有普通文本,又内嵌了JSON字符串,该如何解析?
可以通过组合使用多个插件来解决。日志服务支持使用多个处理插件,将前一个插件的输出作为后一个插件的输入进行关联处理。
场景示例:
假设应用日志格式如下,包含时间、日志级别等文本信息,以及一个作为消息体的JSON字符串。
2025-11-12 10:30:15 INFO Request details: {"trace_id": "xyz-123", "user_id": 500, "action": "login"}解析策略:在Logtail配置中按顺序添加如下两个插件,并为第二个插件正确指定原始字段,就可以处理这种混合格式的日志。这种链式处理的方式同样适用于其他插件组合。
使用正则解析插件,提取出前面的文本字段,并将内嵌的JSON字符串完整地提取到一个独立的字段中。结果如下:
{ "log_time": "2025-11-12 10:30:15", "log_level": "INFO", "json_message": {"trace_id": "xyz-123", "user_id": 500, "action": "login"} }添加JSON解析插件,将 `json_message` 字段作为原始字段,解析JSON字段内容为其内部的键值对。结果如下:
{ "log_time": "2025-11-12 10:30:15", "log_level": "INFO", "trace_id": "xyz-123", "user_id": 500, "action": "login" }
相关文档
通过API接口配置Logtail流水线:
通过控制台配置处理插件: