数据解析类插件

数据解析类插件用于将原始日志结构化为键值对或结构化数据。

数据解析效果示例

表格展示该原始日志在分别使用正则解析插件与不使用解析插件的情况下,保存到日志服务后的数据结构。使用解析插件能够结构化数据,为后续查询提供便利。

原始日志

不使用解析插件

使用正则解析插件

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"

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""

正则表达式:(\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

数据解析插件概览

日志服务提供以下多种类型的数据解析插件,请按需要进行选择。

插件名称

类型

功能说明

正则解析

原生

使用正则表达式提取字段并转为键值对

JSON解析

原生

解析JSON格式日志为键值对

分隔符模式解析

原生

按分隔符结构化日志

Nginx模式解析

原生

解析Nginx访问日志

Apache模式解析

原生

解析Apache访问日志

IIS模式解析

原生

解析IIS访问日志

功能入口

当您需要使用Logtail插件处理日志时,您可以在创建或修改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解析插件支持解析Object类型的JSON日志,提取为键值对,即提取Object首层的键作为Key,Object首层的值作为Value。但不支持解析Array类型的JSON日志。

配置说明

参数名称

说明

原始字段

解析日志前,用于存放日志内容的原始字段,默认值为content。

解析失败时保留原始字段

选中解析失败时保留原始字段,则解析失败时,将保留原始字段。

解析成功时保留原始字段

选中解析成功时保留原始字段,则解析成功时,将保留原始字段。

重命名的原始字段

选中解析失败时保留原始字段解析成功时保留原始字段后,可重命名原始字段名,用于存放原始的日志内容。

配置示例

  • 输入日志

    {"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"}
  • Logtail插件配置image.png

  • 解析结果image.png

分隔符模式解析

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

配置说明

参数

描述

原始字段

解析日志前,用于存放日志内容的原始字段,默认值为content。

分隔符

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

说明

指定分隔符为不可见字符时,您需要查找不可见字符在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及以上版本或Window Logtail 1.0.28.0及以上版本支持配置分隔符模式的允许部分字段参数。

处理超出字段方式

日志中提取的Value数量大于Key数量时的处理方法。

  • 展开:保留多余的Value内容,分别添加到__column$i__格式的字段中,其中$i代表多余字段序号,从0开始计数。例如__column0____column1__

  • 保留:保留多余的Value内容,并整体添加到名为__column0__的字段中。

  • 丢弃:丢弃多余的Value内容。

解析失败时保留原始字段

选中解析失败时保留原始字段,则解析失败时,将保留原始字段。

解析成功时保留原始字段

选中解析成功时保留原始字段,则解析成功时,将保留原始字段。

重命名的原始字段

选中解析失败时保留原始字段解析成功时保留原始字段后,可重命名原始字段名,用于存放原始的日志内容。

附录

分隔符模式解析插件支持单字符分隔符和多字符分隔符。

单字符

单字符的日志示例如下所示。

05/May/2022: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
05/May/2022:13:31:23,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1",401,23472,aliyun-sdk-java

在单字符模式中,您需要指定分隔符,也可以同时指定引用符。

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

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

  • 引用符:日志字段内容中包含分隔符时,需要指定引用符进行包裹,被引用符包裹的内容会被日志服务解析为一个完整字段。

    引用符可以设置为制表符(\t)、竖线(|)、空格、半角逗号(,)、半角分号(;)和不可见字符等单字符。

    例如分隔符为半角逗号(,),引用符为双引号("),日志为1997,Ford,E350,"ac, abs, moon",3000.00,该日志可以被解析为5个字段:1997FordE350ac, abs, moon3000.00

多字符

多字符的日志示例如下所示。

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
05/May/2022:13:31:23&&10.200.**.**&&POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1&&401&&23472&&aliyun-sdk-java

多字符模式中,分隔符包括2~3个字符(例如||&&&^_^)。日志解析根据分隔符进行匹配,您无需使用引用符对日志字段进行包裹。

重要

确保日志字段内容中不会出现分隔符的完整匹配,否则会导致字段误分割。

例如分隔符为&&,日志为1997&&Ford&&E350&&ac&abs&moon&&3000.00会被解析为5个字段:1997FordE350ac&abs&moon3000.00

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"';

原始字段

解析日志前,用于存放日志内容的原始字段,默认值为content。

日志提取字段

根据NGINX日志配置自动提取对应的日志字段(Key)。

解析失败时保留原始字段

选中解析失败时保留原始字段,则解析失败时,将保留原始字段。

解析成功时保留原始字段

选中解析成功时保留原始字段,则解析成功时,将保留原始字段。

重命名的原始字段

选中解析失败时保留原始字段解析成功时保留原始字段后,可重命名原始字段名,用于存放原始的日志内容。

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

原始字段

解析日志前,用于存放日志内容的原始字段,默认值为content。

正则表达式

用于提取Apache日志的正则表达式。日志服务会根据APACHE配置字段中的内容自动生成该正则表达式。

日志提取字段

根据APACHE配置字段中的内容自动生成日志字段(key)。

解析失败时保留原始字段

选中解析失败时保留原始字段,则解析失败时,将保留原始字段。

解析成功时保留原始字段

选中解析成功时保留原始字段,则解析成功时,将保留原始字段。

重命名的原始字段

选中解析失败时保留原始字段解析成功时保留原始字段后,可重命名原始字段名,用于存放原始的日志内容。

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:Microsoft IIS日志文件格式。

  • NCSA:NCSA公用日志文件格式。

  • W3C:W3C扩展日志文件格式。

IIS配置字段

配置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

原始字段

解析日志前,用于存放日志内容的原始字段,默认值为content。

正则表达式

用于提取IIS日志的正则表达式。日志服务会根据IIS配置字段中的内容自动生成该正则表达式。

日志提取字段

根据IIS配置字段中的内容自动生成日志字段(Key)。

解析失败时保留原始字段

选中解析失败时保留原始字段,则解析失败时,将保留原始字段。

解析成功时保留原始字段

选中解析成功时保留原始字段,则解析成功时,将保留原始字段。

重命名的原始字段

选中解析失败时保留原始字段解析成功时保留原始字段后,可重命名原始字段名,用于存放原始的日志内容。

相关文档