设置日志云端结构化解析
云日志服务LTS目前支持五种日志结构化方式,分别是正则分析、JSON、分隔符、Nginx和结构化模板。您可以根据日志内容的实际场景进行选择。
- 正则分析:适用于日志文本中每行内容为一条原始日志,且每条日志可按正则表达式提取为多个key-value键值的日志解析模式。使用正则表达式提取字段,您需要先输入日志样例,再自定义正则表达式。配置完成后,系统将根据正则表达式中的捕获组提取对应的key-value。
- JSON:适用于日志文本中每行内容为一条原始日志,且每条日志可按JSON解析规则提取为多个key-value键值的日志解析模式。
- 分隔符:适用于日志文本中每行内容为一条原始日志,且每条日志可根据指定的分隔符(例如:冒号、空格或字符等)提取为多个key-value键值的日志解析模式。
- Nginx:适用于日志文本中每行内容为一条原始日志,每条日志符合Nginx格式,支持通过log_format指令来自定义访问日志的格式。
- 结构化模板:适用于日志结构比较复杂或需要自定义提取key-value键值的场景,可以通过内置系统模板或者自定义模板提取字段。
结构化后的日志数据可理解为数据库中的二维表,结构化配置完成后就可以使用SQL语句对提取的字段进行查询与分析。
使用限制
- 若未配置索引配置,结构化字段默认分词符为空,最大长度限制为20KB,超过部分会被截断。
- 若已配置索引配置,结构化字段默认分词符参考设置LTS日志内容分词,此时最大长度限制为500KB。
注意事项
- 日志结构化是以日志流为单位。
- 日志流中的大部分日志需有一定的规则,否则结构化是无意义的。
- 结构化配置修改后,对新写入的日志数据生效,历史日志数据不会生效。
云端结构化解析
- 登录云日志服务控制台,进入“日志管理”页面。
- 单击目标日志组或日志流名称,进入日志流详情页面。
- 在“日志搜索”页面,单击右上角的日志设置,在弹出页面中,选择“云端结构化解析”,进行日志结构化配置。
- 开启“保留原始日志”后,原始日志将作为content字段的值存储到云日志服务。同时在资源统计和计费时content字段均会统计在内。
- 开启“上传解析失败日志”后,原始日志将作为_content_parse_fail_字段的值上传到云日志服务。
- 关于开启或关闭“保留原始日志”和“上传解析失败日志”时,日志上报参考如下。
图1 云端结构化解析
表1 日志上报说明 参数
日志上报说明
- 开启“保留原始日志”
- 开启“上传解析失败日志”
- 解析成功:上报解析后日志和原始日志content字段。
- 解析失败:为了避免日志冗余,只上报原始日志content字段,不重复上报_content_parse_fail_字段。
- 开启“保留原始日志”
- 关闭“上传解析失败日志”
- 解析成功:上报解析后日志和原始日志content字段。
- 解析失败:上报原始日志content字段。
- 关闭“保留原始日志”
- 开启“上传解析失败日志”
- 解析成功:上报解析后日志。
- 解析失败:上报_content_parse_fail_字段。
- 关闭“保留原始日志”
- 关闭“上传解析失败日志”
- 解析成功:上报解析后日志。
- 解析失败:仅上报内置字段和label字段。
- 结构化不支持的系统字段包括:groupName、logStream、lineNum、content、logContent、logContentSize、collectTime、category、clusterId、clusterName、containerName、hostIP、hostId、hostName、nameSpace、pathFile、podName。
- 云端结构化解析配置完成后,支持修改或删除结构化配置。
- 在云端结构化解析页面中,单击
,修改结构化配置。
- 在云端结构化解析页面中,单击
,删除结构化配置。
结构化配置删除后,将无法恢复,请谨慎操作。
- 在云端结构化解析页面中,单击
正则分析
正则分析是使用正则表达式提取字段。
- 选择示例日志:应选择一条比较典型的日志作为示例日志。
- 从已有日志中选择:单击“从已有日志中选择”,在弹出框中根据业务需求选择待操作的日志,单击“确定”。通过选择不同时间段筛选日志。
时间范围有三种方式,分别是相对时间、整点时间和自定义。您可以根据自己的实际需求,选择时间范围。
- 相对时间:表示查询距离当前时间1分钟、5分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置相对时间1小时,表示查询18:20:31~19:20:31的日志数据。
- 整点时间:表示查询最近整点1分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置整点时间1小时,表示查询18:00:00~19:00:00的日志数据。
- 自定义:表示查询指定时间范围的日志数据。
- 从剪切板中粘贴:单击“从剪切板中粘贴”,可直接自动将您剪切的日志内容复制到示例日志框中。
- 从已有日志中选择:单击“从已有日志中选择”,在弹出框中根据业务需求选择待操作的日志,单击“确定”。通过选择不同时间段筛选日志。
- 字段提取。包括自动生成和手动输入两种方式,可将选择的日志提取为以一个示例字段对应一个字段名称的格式的日志解析结果。
- 自动生成模式:当用户选择自动生成时,可以用鼠标选中示例日志中待结构化的日志内容,在弹出的对话框中为选中内容设置一个名称,单击“添加”。字段名称只支持输入英文、数字、中划线、下划线及小数点,不能以小数点开头或结尾且不能以双下划线结尾。
2025-06-06 11:00:00.676 WARN [https-jsse-nio-172.16.10.103-8029-exec-34] [94b34e8f9b45] [c.h.als.inventory.ClusterSearchIndex warn 139] - Searching For [clusterId, clusterName] In The New Index Takes 0 Milliseconds
根据原始日志示例,设置字段名称为time、level、thread、message等,自动生成字段参考如图2所示。
- 手动输入模式:当用户选择手动输入时,可以在输入框中输入正则表达式,单击“生成字段”来进行字段提取。正则表达式通过分组来捕获字段,分组指用圆括号"()"括起来的正则表达式,匹配出的内容就表示一个分组,分组包含如下三种形式:
- (exp):把括号内的正则作为一个分组,系统自动分配组号,规则为从正则表达式的左边开始,第一个左括号“(”对应第一个分组,第二个“(”对应第二个分组,依次类推,组号从1开始,从左向右,依次累加。
- (?<name>exp):表示命名分组,分组的正则表达式为exp,分组名为name。分组名必须以字母开始,且仅包含字母和数字,可以通过分组名或分组号引用该分组。
- (?:exp):表示不捕获分组,该分组只在当前位置匹配文本,在该分组之后,无法引用该分组,因为该分组没有分组名,没有分组号,也不会占用分组编号。
- 分词符指将日志内容切分为多个单词的符号,默认分词符包括, '";=()[]{}@&<>/:\\?\n\t\r,在日志搜索或者对日志进行结构化时,可以选取相邻两分词符之间的单词。
- 在手工输入方式中,正则表达式的长度不能超过5000个字符,不强制要求用户在输入正则表达式时对分组进行命名,单击“生成字段”会以命名分组中的分组名作为字段名称,对于非命名分组会提取出对应的字段,并给字段名称默认命名field1、field2、field3……。
- 由于手动输入正则表达式时不能填写双下划线,所以在日志提取字段下方可以将字段名称重命名为带有双下划线的字段。
- 自动生成模式:当用户选择自动生成时,可以用鼠标选中示例日志中待结构化的日志内容,在弹出的对话框中为选中内容设置一个名称,单击“添加”。字段名称只支持输入英文、数字、中划线、下划线及小数点,不能以小数点开头或结尾且不能以双下划线结尾。
- 若需要指定某一字段作为日志时间,详细请参考自定义日志时间。
- 单击“保存”,完成日志结构化配置,初次设置完成后将不能对字段类型编辑修改。
JSON
JSON是通过提取JSON字段将其拆分为键值对。
- 选择示例日志:应选择一条比较典型的日志作为示例日志。在“步骤1 选择示例日志”中,可单击“从已有日志中选择”,在弹出框中根据业务需求选择待操作的日志,也可以直接在输入框中输入待操作的日志,单击“确定”。通过选择不同时间段筛选日志。
- 字段提取。可将输入或选择的日志自动提取为以一个示例字段对应一个字段名称的格式的日志解析结果。
将以下参考示例原始日志输入待操作框中,在“步骤2 字段提取”下单击“智能提取”。自动生成字段参考如图3所示。
{ "start_time": 1749088800000, "end_time": 1749089730214 }
在字段提取完成后,可对日志模板进行设置。结构化字段设置规则请参考设置云端结构化字段。
- 当日志提取字段的类型为float时,精度为16位有效数字。如果超过16位有效数字,则会导致提取字段内容不准确,从而影响快速分析,因此建议将字段类型修改为String。
- 当日志提取字段的类型为long时,日志内容超过16位有效数字,只会精确显示前16位有效数字,后面的数字会变为0。
- 当日志提取字段的类型为long时,日志内容超过21位有效数字,则会识别为float类型,建议将字段类型修改为String。
- 若需要指定某一字段作为日志时间,详细请参考自定义日志时间。
- 单击“保存”,完成日志结构化配置,初次设置完成后将不能对字段类型编辑修改。
分隔符
分隔符是使用分隔符(例如:逗号、空格或字符)提取字段。
- 选择示例日志:应选择一条比较典型的日志作为示例日志。在“步骤1 选择示例日志”中,可单击“从已有日志中选择”,在弹出框中根据业务需求选择待操作的日志,也可以直接在输入框中输入待操作的日志,单击“确定”。通过选择不同时间段筛选日志。
时间范围有三种方式,分别是相对时间、整点时间和自定义。您可以根据自己的实际需求,选择时间范围。
- 相对时间:表示查询距离当前时间1分钟、5分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置相对时间1小时,表示查询18:20:31~19:20:31的日志数据。
- 整点时间:表示查询最近整点1分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置整点时间1小时,表示查询18:00:00~19:00:00的日志数据。
- 自定义:表示查询指定时间范围的日志数据。
- 在“步骤2 指定分隔符”需要根据原始日志内容选择分隔符,或自定义其他需要的特殊字符作为分隔符。
- 不可见字符需要输入长度为4个且以0x开头的16进制字符,例如0x01,最多可输入32个不可见字符。
- 自定义字符支持输入1-10个字符,每个字符都作为独立的分隔符。
- 自定义字符串支持输入1-30个字符,字符串整体作为一个分隔符。
- 字段提取。可将输入或选择的日志自动提取为以一个示例字段对应一个字段名称的格式的日志解析结果。
将以下原始日志示例输入待操作框中,在“步骤3字段提取”下单击“智能提取”。自动生成字段参考如图4所示。
1 5f67944957444bd6bb4fe3b367de8f3d 1d515d18-1b36-47dc-a983-bd6512aed4bd 192.168.0.154 192.168.3.25 38929 53 17 1 96 1548752136 1548752736 ACCEPT OK
在字段提取完成后,可对日志模板进行设置。结构化字段设置规则请参考设置结构化字段。
当日志提取字段的类型为float时,精确度为7位有效数字。
如果超过7位有效数字的话,则会导致提取字段内容不准确,从而影响快速分析,因此建议将字段类型修改为String。
- 若需要指定某一字段作为日志时间,详细请参考自定义日志时间。
- 单击“保存”,完成日志结构化配置,初次设置完成后将不能对字段类型编辑修改。
Nginx
Nginx是通过log_format指令来自定义访问日志的格式。
- 选择示例日志:应选择一条比较典型的日志作为示例日志。在“步骤1 选择示例日志”中,可单击“从已有日志中选择”,在弹出框中根据业务需求选择待操作的日志,也可以直接在输入框中输入待操作的日志,单击“确定”。通过选择不同时间段筛选日志。
时间范围有三种方式,分别是相对时间、整点时间和自定义。您可以根据自己的实际需求,选择时间范围。
- 相对时间:表示查询距离当前时间1分钟、5分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置相对时间1小时,表示查询18:20:31~19:20:31的日志数据。
- 整点时间:表示查询最近整点1分钟、15分钟等时间区间的日志数据。例如当前时间为19:20:31,设置整点时间1小时,表示查询18:00:00~19:00:00的日志数据。
- 自定义:表示查询指定时间范围的日志数据。
- 在“步骤2 输入Nginx日志配置”中需要输入Nginx日志配置,根据输入或选择的日志进行配置。其中有默认配置可使用,单击“默认Nginx配置”即可。
标准Nginx配置文件中,日志配置的部分通常以log_format开头。
- 默认配置如下所示,参考表2查看字段说明。除了默认字段,请参考表3查看常用扩展字段说明。
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
表2 默认配置字段参数 字段名称
说明
remote_addr
客户端IP地址。
remote_user
客户端用户名。
time_local
服务器时间,前后必须加上中括号([])。
request
请求的URI和HTTP协议。
status
请求状态。
body_bytes_sent
发送给客户端的字节数,不包括响应头的大小。
http_referer
URL跳转来源。
http_user_agent
客户端浏览器等信息。
http_x_forwarded_for
通过代理服务器转发的客户端真实IP地址。
表3 扩展字段参数 字段名称
说明
request_time
整个请求的总时间(单位:秒,精度毫秒)。
upstream_response_time
后端服务器响应时间。
http_cookie
客户端发送的Cookie数据。
http_x_real_ip
客户端的真实IP地址。
uri
请求的URI路径(如:/index.html)。
args
请求行中的参数(如:?param1=value1¶m2=value2)。
content_length
请求头中的Content-Length字段。
content_type
请求头中的Content-Type字段。
host
请求头中的Host字段,或处理请求的服务器名称。
server_addr
服务器地址。
server_name
服务器名称。
server_port
服务器端口。
server_protocol
服务器向客户端发送响应时的协议版本(如:HTTP/1.1)。
scheme
请求协议(如:http或https)。
- 用户也可进行自定义配置,具体配置格式要求如下所示。
- 使用Nginx配置,不可为空。
- 以log_format开头,并且包含(')和字段名称。
- 长度最大限制为5000。
- 需要与示例日志内容匹配。
- log_format字段之间的间隔,除大小字母、数字、下划线及中划线外,可使用其他任意字符。
- 以(')或者(';)结尾。
- 默认配置如下所示,参考表2查看字段说明。除了默认字段,请参考表3查看常用扩展字段说明。
- 字段提取。可将输入或选择的日志自动提取为以一个示例字段对应一个字段名称的格式的日志解析结果。
将以下原始日志示例输入待操作框中,在“步骤3 字段提取”下单击“智能提取”。自动生成字段参考如图5所示。
172.16.0.1 - alice [10/Oct/2023:14:30:45 +0800] "GET /api/users HTTP/1.1" 200 1234 "https://example.com/refer" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" "192.168.1.100"
并使用如下Nginx日志配置。
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
在字段提取完成后,可对日志模板进行设置。结构化字段设置规则请参考设置结构化字段。
- 当日志提取字段的类型为float时,精确度为7位有效数字。
- 如果超过7位有效数字的话,则会导致提取字段内容不准确,从而影响快速分析,因此建议将字段类型修改为String。
- 若需要指定某一字段作为日志时间,详细请参考自定义日志时间。
- 单击“保存”,完成日志结构化配置,初次设置完成后将不能对字段类型编辑修改。
相关文档
LTS支持通过调用API接口实现创建结构化配置、查询结构化配置、查询结构化模板、删除结构化配置等,详细请参考云端结构化配置。