数据解析类插件

日志服务默认将整条日志以原始形式存入 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配置时添加插件

  1. 登录日志服务控制台

  2. Project列表区域,单击目标Project。

    image

  3. 日志存储 > 日志库页签中,单击目标日志库前面的>,依次选择数据接入 > Logtail配置

    image

  4. Logtail配置列表中,单击目标Logtail配置后操作列的管理Logtail配置

  5. 单击页面上方的编辑,在页面下方的处理配置区域,新增Logtail插件,然后单击保存

创建Logtail配置时添加插件

  1. 登录日志服务控制台

  2. 单击控制台页面右侧的快速接入数据卡片。

    image

  3. 接入数据对话框中,单击任意卡片,按照配置向导进行操作,在Logtail配置的处理配置中添加处理插件。image

    说明

    该插件配置与在修改Logtail配置时的插件配置相同。

数据解析插件使用

通用配置参数

以下参数在各数据解析插件中都会出现,其功能和用法是统一的,在后续插件说明中不再赘述。

参数名称

说明

原始字段

解析日志前,用于存放日志内容的原始字段,默认为content,即采集到的整条日志内容。

解析失败时保留原始字段

推荐开启。当日志无法被插件成功解析时(例如格式不匹配),此选项能确保原始日志内容不会丢失,而是被完整保留在指定的原始字段中。这对于调试和保证数据完整性至关重要。

解析成功时保留原始字段

选中后,即使日志解析成功,原始日志内容也会被保留。通常用于数据核对场景。

重命名的原始字段

当开启解析失败时保留原始字段解析成功时保留原始字段后,可以使用此参数为保留下来的原始日志内容指定一个新的字段名,以避免与原字段名冲突。

正则解析

正则解析插件支持通过正则表达式提取日志字段,并将日志解析为键值对形式。灵活性极高,能适应几乎所有文本格式。

配置说明

  • 参数说明

    通用配置参数外核心参数如下:

    参数名称

    说明

    正则表达式

    用于匹配日志的正则表达式。

    • 若在处理配置中配置了日志样例,在正则解析处理插件中会出现您配置的日志样例,支持通过自动或手动输入行首正则表达式的方式生成正则表达式。

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

      • 单击手动输入正则表达式,输入正则表达式。配置完成后,单击验证即可验证输入的正则表达式是否可以解析、提取目标日志内容。更多信息,请参见如何调试正则表达式

    • 若未配置日志样例,需根据实际日志输入正则表达式。

    日志提取字段

    为提取到的日志内容(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"([^"]+).*

      image.png

    • 解析结果image.png

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"}
    • 插件配置

      参考功能入口配置。image.png

    • 解析结果image.png

分隔符模式解析

分隔符模式解析插件支持通过分隔符将日志内容结构化,解析为多个键值对形式。

配置说明

  • 参数说明

    通用配置参数外核心参数如下:

    参数

    描述

    分隔符

    请根据日志内容选择正确的分隔符,例如竖线(|)。

    说明

    指定分隔符为不可见字符时,需要查找不可见字符在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,分隔符为竖线(|),KeyABCDE

    • 如果选中允许部分字段,则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
      • 插件配置

        参考功能入口配置,分隔符使用半角逗号(,)且引用符为双引号(")。image

        说明

        分隔符:通过分隔符分割日志,例如制表符(\t)、竖线(|)、空格、半角逗号(,)、半角分号(;)和不可见字符等单字符。分隔符不支持为双引号(")。

        若双引号(")作为字段内容出现,需要进行转义,即在日志中处理为""日志服务解析字段时会自动还原,将""还原为"。例如分隔符为半角逗号(,),引用符为双引号("),且日志字段内部包含双引号(")和半角逗号(,),需将包含半角逗号(,)的日志字段用引用符包裹,同时将日志字段中的双引号(")转义为""。处理后的日志格式为:Chevy,"Venture ""Extended Edition, Very Large""","",该日志可以被解析为3个字段:ChevyVenture "Extended Edition, Very Large"、空字段。

        引用符:日志字段内容中包含分隔符时,需指定引用符进行包裹,被引用符包裹的内容会被解析为一个完整字段。引用符可设置为制表符(\t)、竖线(|)、空格、半角逗号(,)、半角分号(;)和不可见字符等单字符。

        例如分隔符为半角逗号(,),引用符为双引号("),日志为1997,"ac,moon",3000.00,该日志被解析为3个字段:1997ac,moon3000.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
      • 插件配置

        参考功能入口配置,分隔符使用(&&)且无需修改引用符,引用符默认显示为双引号。image

        重要

        多字符模式中,分隔符包括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服务器会根据log_formataccess_log配置输出对应的Nginx访问日志,log_formataccess_log的默认值如下所示。

log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$request_time $request_length '
                 '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent"';
access_log /var/logs/nginx/access.log main

日志字段说明如下所示。

字段名称

说明

remote_addr

客户端IP地址。

remote_user

客户端用户名。

time_local

服务器时间,前后必须加上中括号([])。

request

请求的URIHTTP协议。

request_time

整个请求的总时间,单位为秒。

request_length

请求的长度,包括请求行、请求头和请求正文。

status

请求状态。

body_bytes_sent

发送给客户端的字节数,不包括响应头的大小。

http_referer

URL跳转来源。

http_user_agent

客户端浏览器等信息。

配置说明

  • 参数说明

    通用配置参数外核心参数如下:

    参数名称

    说明

    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"
    • 插件配置

      image

      参考功能入口配置,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服务器会根据Apache日志配置文件中指定的日志打印格式、日志文件路径和名称输出Apache日志。例如CustomLog "/var/log/apache2/access_log" combined,表示日志打印时使用combined格式,日志文件路径为/var/log/apache2/access_log

  • Apache日志格式

    • combined格式

      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    • common格式

      LogFormat "%h %l %u %t \"%r\" %>s %b" 
    • 自定义格式

      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %f %k %p %q %R %T %I %O" customized

    相关字段说明如下所示。更多信息,请参见mod_log_config

    字段格式

    字段名称

    说明

    %a

    client_addr

    客户端IP地址。

    %A

    local_addr

    本地IP地址。

    %b

    response_size_bytes

    响应字节大小,空值时显示为短划线(-)。

    %B

    response_bytes

    响应字节大小,空值时为0。

    %D

    request_time_msec

    请求时间,单位为微秒。

    %f

    filename

    文件名。

    %h

    remote_addr

    远程的主机名。

    %H

    request_protocol_supple

    请求协议。

    %I

    bytes_received

    服务器接收的字节数,需要启用mod_logio模块。

    %k

    keep_alive

    在此连接上处理的请求数。

    %l

    remote_ident

    远程主机提供的识别信息。

    %m

    request_method_supple

    请求方法。

    %O

    bytes_sent

    服务器发送的字节数,需要启用mod_logio模块。

    %p

    remote_port

    服务器端口号。

    %P

    child_process

    子进程ID。

    %q

    request_query

    查询字符串,如果不存在则为空字符串。

    %r

    request

    请求内容,包括方法名、地址和HTTP协议。

    %R

    response_handler

    服务端的处理程序类型。

    %s

    status

    响应的HTTP状态,初始状态。

    %>s

    status

    响应的HTTP状态,最终状态。

    %t

    time_local

    服务器时间。

    %T

    request_time_sec

    请求时间,单位为秒。

    %u

    remote_user

    客户端用户名。

    %U

    request_uri_supple

    请求的URI路径,不带查询字符串。

    %v

    server_name

    服务器名称。

    %V

    server_name_canonical

    根据UseCanonicalName指令设定的服务器名称。

    “%{User-Agent}i”

    http_user_agent

    客户端信息。

    “%{Referer}i”

    http_referer

    来源页。

配置说明

  • 参数说明

    通用配置参数外核心参数如下:

    参数名称

    说明

    日志格式

    根据Apache日志配置文件中定义的日志格式进行选择,包括common、combined和自定义。

    APACHE配置字段

    Apache配置文件中的日志配置部分,通常以LogFormat开头。

    • 当配置日志格式commoncombined时,此处会自动填充对应格式的配置字段,请确认是否和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。image

    • 解析结果

      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日志简介

Windows服务器会根据您所选择的日志格式(IIS、NCSAW3C)生成IIS日志。

  • 日志格式

    #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
    • 字段前缀说明

      前缀

      说明

      s-

      服务器操作。

      c-

      客户端操作。

      cs-

      客户端到服务器的操作。

      sc-

      服务器到客户端的操作。

    • 各个字段说明

      字段

      说明

      date

      客户端发送请求的日期。

      time

      客户端发送请求的时间。

      s-sitename

      客户端所访问的站点的Internet服务和实例的号码。

      s-computername

      生成日志的服务器名称。

      s-ip

      生成日志的服务器的IP地址。

      cs-method

      请求​方法,例如:GET、POST。

      cs-uri-stem

      ​URI资源,表示请求访问的地址。

      cs-uri-query

      URI查询,表示查询HTTP请求中半角问号(?)后的信息。

      s-port

      服务器端口号。

      cs-username

      通过验证的域或用户名。

      • 如果是通过身份验证的用户,格式为域\用户名

      • 如果是匿名用户,显示短划线(-)。

      c-ip

      访问服务器的客户端真实IP地址。

      cs-version

      协议版本,例如:HTTP 1.0、HTTP 1.1。

      cs(User-Agent)

      客户端使用的浏览器。

      Cookie

      发送或接收的Cookie内容,如果没有Cookie,则显示短划线(-)。

      referer

      表示用户访问的前一个站点。

      cs-host

      主机信息。

      sc-status

      ​HTTP协议返回状态。

      sc-substatus

      HTTP子协议的状态。

      sc-win32-status

      ​使用Windows术语表示的操作状态。

      sc-bytes

      ​服务器发送的字节数。

      cs-bytes

      ​服务器接收的字节数。

      time-taken

      ​请求所花费的时间,单位:毫秒。

配置说明

  • 参数说明

    通用配置参数外核心参数如下:

    参数名称

    说明

    日志格式

    选择IIS服务器日志采用的日志格式,包括IIS、NCSAW3C。

    IIS配置字段

    • 日志格式为IISNCSA时,日志服务已默认设置了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。image

    • 解析结果

      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

常见问题

正则表达式在测试工具中正确,为何在日志服务中解析失败?

请检查以下常见问题:

  1. 日志样例不匹配:确保在Logtail配置中使用的日志样例与实际采集到的日志格式完全一致,包括空格和特殊字符。

  2. 多格式日志混杂:如果日志源包含多种格式,单一的正则表达式可能无法全部匹配。建议开启解析失败时保留原始字段,这样即使部分日志解析失败,原始数据也不会丢失,便于后续排查或使用多个Logtail配置分别处理不同格式的日志。

  3. 控制台与代码转义问题:从代码中复制的正则表达式可能包含额外的转义符(如 \\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,并使用展开深度作为前缀

{"s_key":{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}}
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_s_key:{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}

日志格式复杂,既有普通文本,又内嵌了JSON字符串,该如何解析?

可以通过组合使用多个插件来解决。日志服务支持使用多个处理插件,将前一个插件的输出作为后一个插件的输入进行关联处理。

场景示例:

假设应用日志格式如下,包含时间、日志级别等文本信息,以及一个作为消息体的JSON字符串。

2025-11-12 10:30:15 INFO Request details: {"trace_id": "xyz-123", "user_id": 500, "action": "login"}

解析策略:Logtail配置中按顺序添加如下两个插件,并为第二个插件正确指定原始字段,就可以处理这种混合格式的日志。这种链式处理的方式同样适用于其他插件组合。

  1. 使用正则解析插件,提取出前面的文本字段,并将内嵌的JSON字符串完整地提取到一个独立的字段中。结果如下:

    {
         "log_time": "2025-11-12 10:30:15",
         "log_level": "INFO",
         "json_message": {"trace_id": "xyz-123", "user_id": 500, "action": "login"}
    }
  2. 添加JSON解析插件,将 `json_message` 字段作为原始字段,解析JSON字段内容为其内部的键值对。结果如下:

    {
         "log_time": "2025-11-12 10:30:15",
         "log_level": "INFO",
         "trace_id": "xyz-123",
         "user_id": 500,
         "action": "login"
    }

相关文档