文档首页/ 云日志服务 LTS/ 用户指南/ 日志接入/ 配置ICAgent结构化解析
更新时间:2025-07-28 GMT+08:00

配置ICAgent结构化解析

云日志服务LTS支持通过ICAgent结构化解析对日志进行结构化处理。在创建日志接入时设置ICAgent结构化解析规则,支持单行-全文日志、多行-全文日志、JSON、分隔符、单行-完全正则、多行-完全正则、组合解析,您可以根据日志内容选择合适的解析规则。日志采集成功后,将结构化解析后日志发送到指定的日志流上,您就可以对日志进行搜索与分析。

ICAgent只支持RE2风格的正则表达式,详细请参考语法

配置结构化解析

支持以下日志结构化解析规则:

表1 解析规则类型

类型

说明

单行-全文日志

使用换行符\n作为一条日志的结束符,并将每一条日志保存在一个默认的键值content中。

多行-全文日志

适用于一条完整的日志数据跨占多行(例如Java程序日志)的原始日志。为了能让日志系统明确区分开每条日志,采用首行正则的方式进行匹配,当某行日志匹配上预先设置的正则表达式,就认为是一条日志的开头,而下一个行首出现作为该条日志的结束标识符。

JSON

适用于日志文本中每行内容为一条原始日志,且每条日志可按JSON解析规则提取为多个key-value键值对的日志解析模式。

分隔符

适用于日志文本中每行内容为一条原始日志,且每条日志可根据指定的分隔符提取为多个key-value键值对的日志解析模式。

单行-完全正则

适用于日志文本中每行内容为一条原始日志,且每条日志可按正则表达式提取为多个key-value键值对的日志解析模式。

多行-完全正则

适用于日志文本中一条完整的日志数据跨占多行(例如Java程序日志),且可按正则表达式提取为多个key-value键值对的日志解析模式。

组合解析

当您的日志结构太过复杂,涉及多种解析模式,单种解析模式(如完整正则模式、JSON模式等)无法满足日志解析需求时,您可以使用组合解析规则解析日志,在插件配置下方输入插件语法(JSON格式)用来定义日志解析的流水线逻辑。您可添加一个或多个插件配置,ICAgent会根据处理配置顺序逐一执行。

单行-全文日志

单行-全文日志解析规则是使用换行符\n作为一条日志的结束符,并将每一条日志保存在一个默认的键值content中。日志数据本身不进行日志结构化处理,也不会提取日志字段,日志属性的时间项由日志采集的时间决定。

设置操作:

  1. 选择单行-全文日志。
  2. 日志过滤默认关闭。如果需要从海量的日志数据中筛选出符合特定条件的记录,开启日志过滤开关,参考如下操作添加白名单规则或黑名单规则,白名单规则或黑名单规则添加上限为20个。
    图1 日志过滤规则
    • 设置白名单规则。添加的过滤规则为命中规则,即匹配上正则表达式的日志才会被采集上报。
      1. 在白名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式)。新增多条白名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意白名单就可以被采集。单行/多行全文模式下,默认使用content作为全文的键{key}名。

        例如采集日志源文件中包含hello的日志,可配置采集规则为.*hello.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
        图2 校验
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
    • 设置黑名单规则。添加的过滤规则为丢弃规则,即匹配上正则表达式的日志会被丢弃。
      1. 在黑名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式)。新增多条黑名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意黑名单就可以被排除。单行/多行全文模式下,默认使用content作为全文的键{key}名。

        例如不采集日志源文件中包含test的日志,可配置采集规则为.*test.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。

样例展示:

在结构化解析配置中选择“单行-全文日志”模式,日志上报到LTS后,原始日志样例如下所示,经结构化处理后的日志数据上报到LTS的展示效果如图3所示。

  • 原始日志样例:
    [2025-06-05_09:53:34] [WARNING] [MODULE_Mf0s2] - iZ4:f=t.+CU)dSPGRU<1r^IGt!,8SD
    ibP!wd.ey5S19V:yZRVD_3-GCX%c(h
    [2025-06-05_09:53:34] [WARNING] [MODULE_yPRzp] - ,+iaHEYx+(H-w7g.19s13XSK%ksNe4
    [2025-06-05_09:53:34] [INFO] [MODULE_TfNKq] - ):21:1^V)G%)X8A8zPE!iC$_m<z3H^
    KDhA7(W_iyeXk1)g3tm%c,m%!2!OeH
    !WwY4dIMBAz-U.ph@r!RxPvFNYKCyh
    [2025-06-05_09:53:34] [ERROR] [MODULE_naV0b] - fR5PxhHm(A5s5co-c)!PD%mWer37ww
    zZ3@(^vC#CELo;(BR=f_AhzJADlpR@
    V;ZLg3c)N,q-K5t,*ke7jPnY)s#5i2
    [2025-06-05_09:53:34] [INFO] [MODULE_5fMUb] - 6i%B0qSI.yDP3.o)C&U+dE%-Sabony
    G.7Pfr7xcx/NrX3SV%*ZVWgW+CGD;(
    -lJHB4ckm(=OQ,rx8zeYFGNtcK/Z)x
  • 结果展示:
    图3 单行日志上报结果

多行-全文日志

多行-全文日志是指一条完整的日志数据跨占多行(例如Java程序日志)。在这种情况下,以换行符\n为日志的结束标识符就显得有些不合理,为了能让日志系统明确区分开每条日志,采用首行正则的方式进行匹配,当某行日志匹配上预先设置的正则表达式,就认为是一条日志的开头,而下一个行首出现作为该条日志的结束标识符。

使用多行-全文日志解析规则采集日志也会设置一个默认的键值content用于存放多行日志,且日志数据本身不进行日志结构化处理,也不会提取日志字段,日志属性的时间项由日志采集的时间决定。

设置操作:

  1. 选择多行-全文日志。
  2. 从“从已有日志中选择”或“从剪切板中粘贴”选择日志样例。
    • 从已有日志中选择:单击“从已有日志中选择”,在弹出框中通过选择不同时间段筛选日志,根据业务需求选择待操作的日志,单击“确定”。
    • 从剪切板中粘贴:单击“从剪切板中粘贴”,可将您剪切的日志内容复制到示例日志框中。

  3. 在“首行正则表达式”下方支持自动生成或手动输入正则表达式。首行正则表达式需要匹配首行完整内容,注意并非首行的开头内容。
    图4 首行正则表达式
  4. 日志过滤默认关闭。如果需要从海量的日志数据中筛选出符合特定条件的记录,开启日志过滤开关,参考如下操作添加白名单规则或黑名单规则,白名单规则或黑名单规则添加上限为20个。
    图5 日志过滤规则
    • 设置白名单规则。添加的过滤规则为命中规则,即匹配上正则表达式的日志才会被采集上报。
      1. 在白名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式)。新增多条白名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意白名单就可以被采集。单行/多行全文模式下,默认使用content作为全文的键{key}名。

        例如采集日志源文件中包含hello的日志,可配置采集规则为.*hello.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
        图6 校验
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
    • 设置黑名单规则。添加的过滤规则为丢弃规则,即匹配上正则表达式的日志会被丢弃。
      1. 在黑名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式)。新增多条黑名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意黑名单就可以被排除。单行/多行全文模式下,默认使用content作为全文的键{key}名。

        例如不采集日志源文件中包含test的日志,可配置采集规则为.*test.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。

样例展示:

在结构化解析配置中选择“多行-全文日志”模式,日志上报到LTS后,原始日志样例如下所示,经结构化处理后的日志数据上报到LTS的展示效果如图7所示。

  • 原始日志样例:
    [2025-06-05_09:59:45] [INFO] [MODULE_sNRWl] - eTp=hE17db6x_x-j4#ORu*O+7L#VWJ
    m2k(:E#,O_y@cO:M5gWvaDKE__+oRk
    vYvVY%&Y6Pl#MOl6@pN*Hm3hn^z#0M
    [2025-06-05_09:59:45] [INFO] [MODULE_lCg34] - ZiP/4Rzw*)jqf9&huZ(ZgT<g%BbJDG
    qPg.<(+I&JlVxmxcrMp<v:6u6y$@:_
    (;4pz5eJ$PV_AQw5vMu%I0t6n9w!@0
    [2025-06-05_09:59:45] [WARNING] [MODULE_463OX] - rkuHw.uepcTV_9OL!x09:DW#ol2xb1
    [2025-06-05_09:59:45] [WARNING] [MODULE_nmcyS] - *;cX$zspP)b0n:FcSf4#^zX.UMH8$/
    o0T10%bQIEn)tSo==FATOt&D)5epr_
    [2025-06-05_09:59:45] [INFO] [MODULE_iv5YJ] - 7k4rca7(N:q3kzulcASLI%k;:hKJFr
    首行正则表达式:
    ^\[\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2}\]
  • 结果展示
    图7 多行日志上报结果

JSON

JSON解析规则适用于日志文本中每行内容为一条原始日志,且每条日志可按JSON解析规则提取为多个key-value键值对的日志解析模式。若不需要提取key-value,可以参考多行-全文日志配置。

设置操作:

  1. 选择JSON格式。
  2. 日志过滤默认关闭。如果需要从海量的日志数据中筛选出符合特定条件的记录,开启日志过滤开关,参考如下操作添加白名单规则或黑名单规则,白名单规则或黑名单规则添加上限为20个。
    图8 日志过滤规则
    • 设置白名单规则。添加的过滤规则为命中规则,即匹配上正则表达式的日志才会被采集上报。
      1. 在白名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式),Key值为日志字段名称。

        新增多条白名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意白名单就可以被采集。

        例如采集日志源文件中包含hello的日志,字段值填写hello,过滤规则为.*hello.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
        图9 校验
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
    • 设置黑名单规则。添加的过滤规则为丢弃规则,即匹配上正则表达式的日志会被丢弃。
      1. 在黑名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式),Key值为日志字段名称。

        新增多条黑名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意黑名单就可以被排除。

        例如不采集日志源文件中包含test的日志,字段值填写test,过滤规则为.*test.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
  3. 上传原始日志。

    打开上传原始日志开关后,原始日志将作为content字段的值上传到日志服务。

  4. 上传解析失败日志。

    打开上传解析失败日志开关后,原始日志将作为_content_parse_fail_字段的值上传到日志服务。

  5. 关于开启或关闭“上传原始日志”和“上传解析失败日志”时,日志上报参考如下。
    图10 结构化解析
    表2 日志上报说明

    参数

    日志上报说明

    • 开启“上传原始日志”
    • 开启“上传解析失败日志”
    • 解析成功:上报解析后日志和原始日志content字段。
    • 解析失败:上报原始日志content字段和_content_parse_fail_字段。
    • 开启“上传原始日志”
    • 关闭“上传解析失败日志”
    • 解析成功:上报解析后日志和原始日志content字段。
    • 解析失败:上报原始日志content字段。
    • 关闭“上传原始日志”
    • 开启“上传解析失败日志”
    • 解析成功:上报解析后日志。
    • 解析失败:上报_content_parse_fail_字段。
    • 关闭“上传原始日志”
    • 关闭“上传解析失败日志”
    • 解析成功:上报解析后日志。
    • 解析失败:仅上报内置字段和label字段。
  6. 自定义日志时间

    开启后可指定某一字段作为日志时间,或关闭此项使用日志被采集时间作为日志时间。

  7. json解析层数。增加json解析层数配置,取值范围为1~4,只能整数,默认值为1。

    将json格式日志的字段展开,例如原始日志为{"key1":{"key2":"value"}},解析1层日志为:{"key1":{"key2":"value"}},解析2层日志为:{"key1.key2":"value"}。

  8. json字符串解析:默认关闭。开启后支持解析转义后的json字符串为json对象,例如{"key1":"{\"key2\":\"value\"}"}解析为key1.key2: value。

样例展示:

在结构化解析配置中选择“JSON”模式,日志上报到LTS后,原始日志样例如下所示,经结构化处理后的日志数据上报到LTS的展示效果如图11所示。

  • 原始日志样例:
    {"timestamp":"2025-06-05_10:32:08","level":"INFO","module":"MODULE_eJvyE","msg":"P^I^CBHYyIEo98@#R1gp5.io5jU:i!"}
    {"timestamp":"2025-06-05_10:32:08","level":"WARNING","module":"MODULE_ADPxy","msg":"/DfP7p=^w.rx<$,ep+oLrg@QVe<p0%"}
    {"timestamp":"2025-06-05_10:32:08","level":"WARNING","module":"MODULE_pEzEl","msg":"rPe%_T(vo_=b#PUrBXa&Sx9KYR2Y%y"}
    {"timestamp":"2025-06-05_10:32:08","level":"DEBUG","module":"MODULE_zk5l0","msg":"(c)PC<H.,wdlSG%=//hDZ=o5u/(a47"}
    {"timestamp":"2025-06-05_10:32:08","level":"INFO","module":"MODULE_stz3u","msg":"L@J3+_icq%2w_Vc,):hGbQ/b0i1oy+"}
  • 结果展示:
    图11 JSON日志上报结果

分隔符

分隔符解析规则适用于日志文本中每行内容为一条原始日志,且每条日志可根据指定的分隔符提取为多个key-value键值对的日志解析模式。若不需要提取key-value,可以参考多行-全文日志配置。

设置操作:

  1. 选择分隔符。
  2. 根据原始日志内容选择分隔符,或自定义其他需要的特殊字符作为分隔符。
  3. 从“从已有日志中选择”或“从剪切板中粘贴”选择日志样例,单击“验证”,在提取结果下方查看结果。
    • 从已有日志中选择:单击“从已有日志中选择”,在弹出框中根据业务需求选择待操作的日志,单击“确定”。通过选择不同时间段筛选日志。
    • 从剪切板中粘贴:单击“从剪切板中粘贴”,可直接自动将您剪切的日志内容复制到示例日志框中。
    图12 分隔符
  4. 日志过滤默认关闭。如果需要从海量的日志数据中筛选出符合特定条件的记录,开启日志过滤开关,参考如下操作添加白名单规则或黑名单规则,白名单规则或黑名单规则添加上限为20个。
    图13 日志过滤规则
    • 设置白名单规则。添加的过滤规则为命中规则,即匹配上正则表达式的日志才会被采集上报。
      1. 在白名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式),Key值为日志字段名称。

        新增多条白名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意白名单就可以被采集。

        例如采集日志源文件中包含hello的日志,字段值填写hello,过滤规则为.*hello.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
        图14 校验
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
    • 设置黑名单规则。添加的过滤规则为丢弃规则,即匹配上正则表达式的日志会被丢弃。
      1. 在黑名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式),Key值为日志字段名称。

        新增多条黑名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意黑名单就可以被排除。

        例如不采集日志源文件中包含test的日志,字段值填写test,过滤规则为.*test.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
  5. 上传原始日志。

    打开上传原始日志开关后,原始日志将作为content字段的值上传到日志服务。

  6. 上传解析失败日志。

    打开上传解析失败日志开关后,原始日志将作为_content_parse_fail_字段的值上传到日志服务。

  7. 关于开启或关闭“上传原始日志”和“上传解析失败日志”时,日志上报参考如下。
    图15 结构化解析
    表3 日志上报说明

    参数

    日志上报说明

    • 开启“上传原始日志”
    • 开启“上传解析失败日志”
    • 解析成功:上报解析后日志和原始日志content字段。
    • 解析失败:上报原始日志content字段和_content_parse_fail_字段。
    • 开启“上传原始日志”
    • 关闭“上传解析失败日志”
    • 解析成功:上报解析后日志和原始日志content字段。
    • 解析失败:上报原始日志content字段。
    • 关闭“上传原始日志”
    • 开启“上传解析失败日志”
    • 解析成功:上报解析后日志。
    • 解析失败:上报_content_parse_fail_字段。
    • 关闭“上传原始日志”
    • 关闭“上传解析失败日志”
    • 解析成功:上报解析后日志。
    • 解析失败:仅上报内置字段和label字段。
  8. 自定义日志时间

    开启后可指定某一字段作为日志时间,或关闭此项使用日志被采集时间作为日志时间。

样例展示:

在结构化解析配置中选择“分隔符”模式,日志上报到LTS后,原始日志样例如下所示,经结构化处理后的日志数据上报到LTS的展示效果如图16所示。

  • 原始日志样例:
    [2025-06-05_10:04:26] [WARNING] [MODULE_vlQR1] - _4xi&#$Um2Ua*M.VHv1_L#CQzas-nC
    [2025-06-05_10:04:26] [WARNING] [MODULE_RzMii] - Bdp3_*Erlyun:pluL-BdU#y=MgN++7
    [2025-06-05_10:04:26] [DEBUG] [MODULE_q9161] - oxUZ#q#xn!oc5WS-<98IB*aH,:FLoj
    [2025-06-05_10:04:26] [DEBUG] [MODULE_Ze3vY] - L-g;ZQ%*n/ORiFSYM:#T)z;XxKjpVv
    [2025-06-05_10:04:26] [DEBUG] [MODULE_5ZCwd] - e)!6:CZk/MufokE)A5Kr<rBf9o=9x;

    在日志样例下方输入日志,选择空格分隔符,单击“验证”,提取key-value键值对,根据需要修改key值。

    [2025-06-05_09:53:34] [WARNING] [MODULE_yPRzp] - ,+iaHEYx+(H-w7g.19s13XSK%ksNe4

  • 结果展示:
    图16 分隔符日志上报结果

单行-完全正则

单行-完全正则解析规则适用于日志文本中每行内容为一条原始日志,且每条日志可按正则表达式提取为多个key-value键值对的日志解析模式。若不需要提取key-value,可以参考多行-全文日志配置。

设置操作:

  1. 选择单行-完全正则。
  2. 从“从已有日志中选择”或“从剪切板中粘贴”选择日志样例。
    • 从已有日志中选择:单击“从已有日志中选择”,在弹出框中根据业务需求选择待操作的日志,单击“确定”。通过选择不同时间段筛选日志。
    • 从剪切板中粘贴:单击“从剪切板中粘贴”,可直接自动将您剪切的日志内容复制到示例日志框中。
  3. 在“提取正则表达式”下方输入要提取日志的正则表达式,单击“验证”,在提取结果下方查看结果。

    或者单击“正则表达式自动生成”,在新打开的页面根据日志样例提取字段,输入key值,单击“确定”即可自动生成正则表达式,设置完成后,单击“确定”。

    图17 提取正则表达式
  4. 日志过滤默认关闭。如果需要从海量的日志数据中筛选出符合特定条件的记录,开启日志过滤开关,参考如下操作添加白名单规则或黑名单规则,白名单规则或黑名单规则添加上限为20个。
    图18 日志过滤规则
    • 设置白名单规则。添加的过滤规则为命中规则,即匹配上正则表达式的日志才会被采集上报。
      1. 在白名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式),Key值为日志字段名称。

        新增多条白名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意白名单就可以被采集。

        例如采集日志源文件中包含hello的日志,字段值填写hello,过滤规则为.*hello.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
        图19 校验
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
    • 设置黑名单规则。添加的过滤规则为丢弃规则,即匹配上正则表达式的日志会被丢弃。
      1. 在黑名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式),Key值为日志字段名称。

        新增多条黑名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意黑名单就可以被排除。

        例如不采集日志源文件中包含test的日志,字段值填写test,过滤规则为.*test.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
  5. 上传原始日志。

    打开上传原始日志开关后,原始日志将作为content字段的值上传到日志服务。

  6. 上传解析失败日志。

    打开上传解析失败日志开关后,原始日志将作为_content_parse_fail_字段的值上传到日志服务。

  7. 关于开启或关闭“上传原始日志”和“上传解析失败日志”时,日志上报参考如下。
    图20 结构化解析
    表4 日志上报说明

    参数

    日志上报说明

    • 开启“上传原始日志”
    • 开启“上传解析失败日志”
    • 解析成功:上报解析后日志和原始日志content字段。
    • 解析失败:上报原始日志content字段和_content_parse_fail_字段。
    • 开启“上传原始日志”
    • 关闭“上传解析失败日志”
    • 解析成功:上报解析后日志和原始日志content字段。
    • 解析失败:上报原始日志content字段。
    • 关闭“上传原始日志”
    • 开启“上传解析失败日志”
    • 解析成功:上报解析后日志。
    • 解析失败:上报_content_parse_fail_字段。
    • 关闭“上传原始日志”
    • 关闭“上传解析失败日志”
    • 解析成功:上报解析后日志。
    • 解析失败:仅上报内置字段和label字段。
  8. 自定义日志时间

    开启后可指定某一字段作为日志时间,或关闭此项使用日志被采集时间作为日志时间。

样例展示:

在结构化解析配置中选择“单行-完全正则”模式,日志上报到LTS后,原始日志样例如下所示,经结构化处理后的日志数据上报到LTS的展示效果如图21所示。

  • 原始日志样例:
    [2025-06-05_10:10:45] [DEBUG] [MODULE_qqQeu] - +XPLj#eMaBGoL.kF*e@E7OcWzihN=F
    [2025-06-05_10:10:45] [WARNING] [MODULE_6Fjpv] - 60QkLDc-53A^<!e_FJ#FW9)x0C00%7
    [2025-06-05_10:10:45] [ERROR] [MODULE_mK3Ib] - J$7DqL.dR&7^CG(qPSjY2vprb+2nfm
    [2025-06-05_10:10:45] [INFO] [MODULE_73x94] - rs3yPQ!(lJ9^$zZQW8U1-3YQRu,3;@
    [2025-06-05_10:10:45] [WARNING] [MODULE_JczuV] - Wsc9Q@L%7itQF3SUallKEd3vQS1&E)

    输入提取正则表达式,单击“验证”,提取key-value键值对,根据日志内容修改key值方便识别。

    ^\[(\S*)\]\s\[(\S*)\]\s\[(\S*)\]\s-\s(.*)

  • 结果展示:
    图21 单行-完全正则日志上报结果

多行-完全正则

多行-完全正则解析规则适用于日志文本中一条完整的日志数据跨占多行(例如Java程序日志),且可按正则表达式提取为多个key-value键值对的日志解析模式。若不需要提取key-value,可以参考多行-全文日志配置。 配置多行-完全正则模式时,您需要先输入日志样例,使用首行正则表达式匹配首行完整内容,自定义提取正则表达式。

设置操作:

  1. 选择多行-完全正则。
  2. 从“从已有日志中选择”或“从剪切板中粘贴”选择日志样例。
    • 从已有日志中选择:单击“从已有日志中选择”,在弹出框中根据业务需求选择待操作的日志,单击“确定”。通过选择不同时间段筛选日志。
    • 从剪切板中粘贴:单击“从剪切板中粘贴”,可直接自动将您剪切的日志内容复制到示例日志框中。
  3. 在“首行正则表达式”下方支持自动生成或手动输入正则表达式。首行正则表达式需要匹配首行完整内容,注意并非首行的开头内容。

    “首行正则表达式”用于识别多行日志的行首,例如以下日志示例:

    2024-10-11 10:59:07.000 a.log:1 level:warn
      no.1 log
    2024-10-11 10:59:17.000 a.log:2 level:warn
      no.2 log

    完整的多行是:

    2024-10-11 10:59:07.000 a.log:1 level:warn
    no.1 log

    首行则是:

    2024-10-11 10:59:07.000 a.log:1 level:warn

    首行正则示例:^\d{4}-\d{2}-\d{2}\d{3}:\d{2}:\d{2}\.\d{3}$,由于每个首行的日期是唯一的,因此可以根据日期来生成首行正则。

  4. 在“提取正则表达式”下方输入要提取日志的正则表达式,单击“验证”,在提取结果下方查看结果。

    或者单击“正则表达式自动生成”,在新打开的页面根据日志样例提取字段,输入key值,单击“确定”即可自动生成正则表达式,设置完成后,单击“确定”。

    提取结果显示的是“提取正则表达式”执行的结果,而不是“首行正则表达式”执行的结果,“首行正则表达式”执行的结果需要到目标日志流查看。

    如果“首行正则表达式”手动输入的正则表达式有误,则会导致无法查看上报的日志流数据。

    图22 设置正则表达式
  5. 日志过滤默认关闭。如果需要从海量的日志数据中筛选出符合特定条件的记录,开启日志过滤开关,参考如下操作添加白名单规则或黑名单规则,白名单规则或黑名单规则添加上限为20个。
    图23 日志过滤规则
    • 设置白名单规则。添加的过滤规则为命中规则,即匹配上正则表达式的日志才会被采集上报。
      1. 在白名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式),Key值为日志字段名称。

        新增多条白名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意白名单就可以被采集。

        例如采集日志源文件中包含hello的日志,字段值填写hello,过滤规则为.*hello.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
        图24 校验
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
    • 设置黑名单规则。添加的过滤规则为丢弃规则,即匹配上正则表达式的日志会被丢弃。
      1. 在黑名单规则下方,单击“添加”,填写Key值和过滤规则(正则表达式),Key值为日志字段名称。

        新增多条黑名单过滤规则时,支持选择And或Or的关系,即全部满足或满足任意黑名单就可以被排除。

        例如不采集日志源文件中包含test的日志,字段值填写test,过滤规则为.*test.*

      2. 单击操作列的校验,在弹出的页面中校验规则的正确性,输入字段值,单击“校验”,提示校验成功。
      3. 校验成功后,单击“确定”或“关闭”退出校验页面。
  6. 上传原始日志。

    打开上传原始日志开关后,原始日志将作为content字段的值上传到日志服务。

  7. 上传解析失败日志。

    打开上传解析失败日志开关后,原始日志将作为_content_parse_fail_字段的值上传到日志服务。

  8. 关于开启或关闭“上传原始日志”和“上传解析失败日志”时,日志上报参考如下。
    图25 结构化解析
    表5 日志上报说明

    参数

    日志上报说明

    • 开启“上传原始日志”
    • 开启“上传解析失败日志”
    • 解析成功:上报解析后日志和原始日志content字段。
    • 解析失败:上报原始日志content字段和_content_parse_fail_字段。
    • 开启“上传原始日志”
    • 关闭“上传解析失败日志”
    • 解析成功:上报解析后日志和原始日志content字段。
    • 解析失败:上报原始日志content字段。
    • 关闭“上传原始日志”
    • 开启“上传解析失败日志”
    • 解析成功:上报解析后日志。
    • 解析失败:上报_content_parse_fail_字段。
    • 关闭“上传原始日志”
    • 关闭“上传解析失败日志”
    • 解析成功:上报解析后日志。
    • 解析失败:仅上报内置字段和label字段。
  9. 自定义日志时间

    开启后可指定某一字段作为日志时间,或关闭此项使用日志被采集时间作为日志时间。

样例展示:

在结构化解析配置中选择“多行-完全正则”模式,日志上报到LTS后,原始日志样例如下所示,经结构化处理后的日志数据上报到LTS的展示效果如图26所示。

  • 原始日志:
    [2025-06-05_10:14:19] [ERROR] [MODULE_JI1bU] - PFs^7BLiq:E^5e$ja5=450.e1E7p4Q
    o^$(Xbyjhdjb#N6On$;q(x0$#IO@go
    [2025-06-05_10:14:19] [WARNING] [MODULE_rg02h] - vvAUN29a)ZYcz/fWm$%/v_h&!;:oY%
    [2025-06-05_10:14:19] [ERROR] [MODULE_Cbwrf] - P=wLJ;fNamE/u(TN!7uvF+ObDl8/2F
    ;X$uqRR!7^7a^mE!uI.R)9F-km1.Al
    UA8(!*oB9kgp@zoC<HAy<@wgN#7#SH
    [2025-06-05_10:14:19] [INFO] [MODULE_FmHmo] - a+OnTZbUPcv&KNl$=<orJrgvZ^^n02
    [2025-06-05_10:14:19] [DEBUG] [MODULE_G027Q] - o!7pv-znpU$R=vs4Dhk;=v2Rhl7k%)
    O^fKR$0d-rPqQmhZd_=_4nQ_wvV+tu
    X<C#dm$Ud$P$KCrFWV(0nMdT<c_2/y

    首行正则表达式支持自动生成或手动输入。

    ^\[\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2}\]

    输入提取正则表达式,单击“验证”,提取key-value键值对,根据日志内容修改key值方便识别。

    ^\[(\S*)\]\s\[(\S*)\]\s\[(\S*)\]\s-\s(.*)

  • 结果展示:
    图26 多行-完全正则日志上报结果

组合解析

当您的日志结构太过复杂,涉及多种解析模式,单种解析模式(如Nginx模式、完整正则模式、JSON模式等)无法满足日志解析需求时,您可以使用组合解析规则解析日志,在插件配置下方输入插件语法(JSON格式)用来定义日志解析的流水线逻辑。您可添加一个或多个插件配置,ICAgent会根据处理配置顺序逐一执行。

设置操作:

  1. 选择组合解析。
  2. 从“从已有日志中选择”或“从剪切板中粘贴”选择日志样例,在插件配置下方输入配置内容。
  3. 您可以根据日志内容参考以下插件语法自定义设置。输入插件配置后,您可以单击“验证”,即可在提取结果下方显示解析结果。您可以通过4提供的日志示例,了解插件配置的用法。
    • processor_regex
      表6 正则提取

      参数

      类型

      说明

      source_key

      string

      原始字段名。

      multi_line_regex

      string

      首行正则表达式。

      regex

      string

      正则表达式()中为提取字段。

      keys

      string数组

      为提取的内容指定字段名。

      keep_source

      boolean

      是否保留原始字段。

      keep_source_if_parse

      boolean

      解析错误是否保留原始字段。

    • processor_split_string
      表7 分隔符解析

      参数

      类型

      说明

      source_key

      string

      原始字段名。

      split_sep

      string

      分隔符字符串。

      keys

      string数组

      为提取的内容指定字段名。

      keep_source

      boolean

      被解析后的日志中是否保留原始字段。

      split_type

      char/special_char/string

      分隔类型,支持char-单字符、special_char-不可见字符、string-字符串。

      keep_source_if_parse_error

      boolean

      解析错误是否保留原始字段。

    • processor_split_key_value
      表8 键值对分割

      参数

      类型

      说明

      source_key

      string

      原始字段名。

      split_sep

      string

      键值对之间的分隔符,默认值为制表符\t。

      expand_connector

      string

      单个键值对中键与值之间的分隔符,默认值为半角冒号(:)。

      keep_source

      boolean

      被解析后的日志中是否保留原始字段。

    • processor_add_fields
      表9 添加字段

      参数

      类型

      说明

      fields

      json/object

      待添加的字段名和字段值。键值对格式,支持添加多个。

    • processor_drop
      表10 丢弃字段

      参数

      类型

      说明

      drop_keys

      string数组

      丢弃的字段列表。

    • processor_rename
      表11 重命名字段

      参数

      类型

      说明

      source_keys

      string数组

      待重命名的原始字段。

      dest_keys

      string数组

      重命名后的字段。

    • processor_json
      表12 json展开提取

      参数

      类型

      说明

      source_key

      string

      原始字段名。

      keep_source

      boolean

      被解析后的日志中是否保留原始字段。

      expand_depth

      int

      json展开的深度。默认值为0,表示不限制。1表示当前层级,以此类推。

      expand_connector

      string

      json展开时的连接符,默认值为英文符号点(.)

      prefix

      string

      json展开时,对字段名附加的前缀。

      keep_source_if_parse_error

      boolean

      解析错误是否保留原始字段。

    • processor_filter_regex
      表13 过滤器

      参数

      类型

      说明

      include

      json/object

      key为日志字段,value为匹配的正则表达式。

      exclude

      json/object

      key为日志字段,value为匹配的正则表达式。

    • processor_gotime
      表14 提取时间

      参数

      类型

      说明

      source_key

      string

      原始字段名。

      source_format

      string

      原始时间的格式。

      source_location

      int

      原始时间的时区。参数值为空时,表示所在主机或容器的时区。

      set_time

      boolean

      是否将解析后的时间设置为日志时间。

      keep_source

      boolean

      被解析后的日志中是否保留原始字段。

    • processor_base64_decoding
      表15 base64解码

      参数

      类型

      说明

      source_key

      string

      原始字段名。

      dest_key

      string

      解析后的目标字段。

      keep_source_if_parse_error

      boolean

      解析错误是否保留原始字段。

      keep_source

      boolean

      被解析后的日志中是否保留原始字段。

    • processor_base64_encoding
      表16 base64编码

      参数

      类型

      说明

      source_key

      string

      原始字段名。

      dest_key

      string

      解析后的目标字段。

      keep_source

      boolean

      被解析后的日志中是否保留原始字段。

  4. 结合以下参考示例日志,提供多种插件组合使用的方法。

    原始日志示例:(以下日志示例仅供参考,请以实际日志为准)

    2025-03-19:16:49:03 [INFO] [thread1] {"ref":"https://www.test.com/","curl":"https://www.test.com/so/search?spm=1000.1111.2222.3333&q=linux%20opt%testabcd&t=&u=","sign":"1234567890","pid":"so","0508":{"sign":"112233445566 English bb Error, INFO, error bb&&bb","float":15.25,"long":15},"float":15.25,"long":15}

    通过插件配置组合使用解析字段,完整插件配置参考如下,您可以直接复制以下插件配置,单击“验证”,即可查看解析结果。

    [{
            "detail": {
                "keys": ["nowtime", "level", "thread", "jsonmsg"],
                "keep_source": true,
                "regex": "(\\d{4}-\\d{2}-\\d{2}:\\d{2}:\\d{2}:\\d{2})\\s+\\[(\\w+)\\]\\s+\\[(\\w+)\\]\\s+(.*)",
                "source_key": "content"
            },
            "type": "processor_regex"
        }, {
            "detail": {
                "expand_connector": ".",
                "expand_depth": 4,
                "keep_source": true,
                "source_key": "jsonmsg"           
            },
            "type": "processor_json"
        }, {
            "detail": {
                "keep_source": true,
                "keep_source_if_parse_error": true,
                "keys": [
                    "key1",
                    "key2",
                    "key3"
                ],
                "source_key": "0508.sign",
                "split_sep": ",",
                "split_type": "char"
            },
            "type": "processor_split_string"
        }, {
            "detail": {
                "keep_source": true,
                "keep_source_if_parse_error": true,
                "keys": [
                    "a1",
                    "a2",
                    "a3"
                ],
                "regex": "^(\\w+)(?:[^ ]* ){1}(\\w+)(?:[^ ]* ){2}([^\\$]+)",
                "source_key": "key1"
            },
            "type": "processor_regex"
        }
    ]

    接下来分步介绍示例中用到的插件配置和解析结果。

    1. 将原始日志示例复制到组合解析下方的日志样例中。

      原始日志示例:(以下日志示例仅供参考,请以实际日志为准)

      2025-03-19:16:49:03 [INFO] [thread1] {"ref":"https://www.test.com/","curl":"https://www.test.com/so/search?spm=1000.1111.2222.3333&q=linux%20opt%testabcd&t=&u=","sign":"1234567890","pid":"so","0508":{"sign":"112233445566 English bb Error, INFO, error bb&&bb","float":15.25,"long":15},"float":15.25,"long":15}
      图27 日志示例
    2. 分析原始日志示例结果如下:日志时间为2025-03-19:16:49:03,日志级别为[INFO],线程号为[thread1],日志内容如下,该日志内容是一个完整的json文本。
      {"ref":"https://www.test.com/","curl":"https://www.test.com/so/search?spm=1000.1111.2222.3333&q=linux%20opt%testabcd&t=&u=","sign":"1234567890","pid":"so","0508":{"sign":"112233445566 English bb Error, INFO, error bb&&bb","float":15.25,"long":15},"float":15.25,"long":15} 
    3. 按照日志时间、日志级别、线程号、日志内容提取日志验证,每一部分都是用空格来隔开,但是考虑json文本中也可能含有空格,就不选择分隔符插件来提取,使用正则提取插件(processor_regex)提取。

      正则表达式参考如下:

      日志时间提取为nowtime:(\d{4}-\d{2}-\d{2}:\d{2}:\d{2}:\d{2})

      日志级别提取为level:\[(\w+)\]

      线程号提取为thread:\[(\w+)\]

      日志内容提取为jsonmsg:(.*)

      每部分中间都是空格分割,完整的提取正则表达式:(\d{4}-\d{2}-\d{2}:\d{2}:\d{2}:\d{2})\s+\[(\w+)\]\s+\[(\w+)\]\s+(.*)

      正则提取插件(processor_regex)配置如下,需要将regex参数的值替换为正则表达式,同时将正则表达式里的\替换为\\用于转义。
      [{
              "detail": {
                  "keys": ["nowtime", "level", "thread", "jsonmsg"],
                  "regex": "(\\d{4}-\\d{2}-\\d{2}:\\d{2}:\\d{2}:\\d{2})\\s+\\[(\\w+)\\]\\s+\\[(\\w+)\\]\\s+(.*)",
                  "source_key": "content"
              },
              "type": "processor_regex"
      }]
    4. 将配置内容复制到插件配置框中,单击“验证”,在提取结果下方即可显示提取结果,key和value值提取正确。
    5. 接下来可以使用json插件(processor_json)将日志内容(jsonmsg)进行json展开。(每个插件配置{}中间需要加英文逗号隔开)
      , {
              "detail": {
                  "expand_connector": ".",
                  "expand_depth": 4,
                  "keep_source": true,
                  "source_key": "jsonmsg",
                  "source_location": 8
              },
              "type": "processor_json"
          }

      将json插件(processor_json)配置追加到正则提取插件(processor_regex)配置后面,单击“验证”,在提取结果下方即可显示提取结果。

    6. 如果您需要将json提取得到的0508.sign字段进一步分割,可以使用分隔符解析插件(processor_split_string)中的”,”进行分隔拆分,提取key1,key2,key3字段。
      ,{
              "detail": {
                  "keys": [
                      "key1",
                      "key2",
                      "key3"
                  ],
                  "source_key": "0508.sign",
                  "split_sep": ",",
                  "split_type": "char"
              },
              "type": "processor_split_string"
          }

      将分隔符解析插件(processor_split_string)配置追加到json插件(processor_json)配置后面,单击“验证”,在提取结果下方即可显示key1,key2,key3字段。

    7. 您还可以将key1使用正则提取插件(processor_regex)提取出a1,a2,a3等字段。
      , {
              "detail": {
                  "keep_source": true,
                  "keep_source_if_parse_error": true,
                  "keys": [
                      "a1",
                      "a2",
                      "a3"
                  ],
                  "regex": "^(\\w+)(?:[^ ]* ){1}(\\w+)(?:[^ ]* ){2}([^\\$]+)",
                  "source_key": "key1"
              },
              "type": "processor_regex"
          }

      正则提取插件(processor_regex)配置追加到分隔符解析插件(processor_split_string)配置后面,单击“验证”,在提取结果下方即可显示a1,a2,a3字段。

自定义日志时间

开启自定义日志时间后,使用自定义日志内容的时间作为日志搜索页面日志内容的时间,请参考表17设置参数。关闭自定义日志时间后使用日志采集时间作为日志搜索页面日志内容的时间。

常见的时间标准、示例及对应的时间表达式如下表19

表17 参数配置表

参数

说明

示例

时间字段key名称

已提取字段的名称。单击下拉框选择已提取的字段,该字段为string或long类型。

test

字段value

已提取的字段value,选择字段key后,将自动填充。

2023-07-19 12:12:00

时间格式

默认情况下,云日志服务LTS中的日志时间戳精确到秒,因此时间格式只需配置到秒,无需配置毫秒、微秒等信息。请参考表18

  • 若时间格式填写错误或指定字段不存在,将使用日志被采集时间作为日志时间。
  • 对结构化解析进行字段名称修改、字段删除、字段类型修改等操作,都需要重新校验时间字段。

yyyy-MM-dd HH:mm:ss

操作

单击校验图标,提示“时间格式和字段value匹配成功”则表示校验成功。

-

表18 常见时间格式

时间格式

说明

示例

EEE

星期的缩写。

Fri

EEEE

星期的全称。

Friday

MMM

月份的缩写。

Jan

MMMM

月份的全称。

January

dd

每月第几天,十进制,范围为01~31。

07, 31

HH

小时,24小时制。

22

h

小时,12小时制。

11

MM

月份,十进制,范围为01~12。

08

mm

分钟,十进制,范围为00~59。

59

a

am或pm。

am、pm

h:mm:ss a

12小时制的时间组合。

11:59:59 am

HH:mm

小时和分钟组合。

23:59

ss

秒数,十进制,范围为00~59。

59

yy

年份,十进制,不带世纪,范围为00~99。

04、98

yyyy

年份,十进制。

2004、1998

d

每月第几天,十进制,范围为1~31。

7、31

%s

Unix时间戳。

147618725

表19 示例

示例

时间表达式

时间标准

2022-07-14T19:57:36+08:00

yyyy-MM-dd'T'HH:mm:ssXXX

自定义

1548752136

%s

自定义

27/Jan/2022:15:56:44

dd/MMM/yyyy:HH:mm:ss

自定义

2022-07-24T10:06:41.000

yyyy-MM-dd'T'HH:mm:ss.SSS

自定义

Monday, 02-Jan-06 15:04:05 MST

EEEE, dd-MMM-yy HH:mm:ss Z

RFC850

Mon, 02 Jan 2006 15:04:05 MST

EEE, dd MMM yyyy HH:mm:ss Z

RFC1123

02 Jan 06 15:04 MST

dd MMM yy HH:mm Z

RFC822

02 Jan 06 15:04 -0700

dd MMM yy HH:mm Z

RFC822Z

2023-01-02T15:04:05Z07:00

yyyy-MM-dd'T'HH:mm:ss Z

RFC3339

2022-12-11 15:05:07

yyyy-MM-dd HH:mm:ss

自定义

2025-02-24T05:24:07.085Z

yyyy-MM-dd'T'HH:mm:ss.SSSZ

自定义