regex 分析程序允许对收集的数据使用一些正则表达式。
VMware Aria Operations for Logs 代理使用 C++ Boost 库正则表达式,此正则表达式使用 Perl 语法。 regex 分析程序可通过指定一个包含已命名的捕获组的正则表达式模式来进行定义。例如:(?<field_1>\d{4})[-](?<field_2>\d{4})[-](?<field_3>\d{4})[-](?<field_4>\d{4})
在组内指定的名称(例如:
field_1、
field_2、
field_3 和
field_4)将成为相应的已提取字段的名称。命名需遵循以下要求:
- 在正则表达式模式中指定的名称必须为 VMware Aria Operations for Logs 的有效字段名称。
- 名称中只能包含字母数字字符和下划线“_”字符。
- 名称不能以数字字符开头。
如果提供的名称无效,则配置会失败。
regex 分析程序选项
regex 分析程序的唯一必填选项是 format 选项。
在需要其他调试信息时,可以使用 debug 选项。
配置
要创建 regex 分析程序,请使用 regex 作为 base_parser,并提供 format 选项。
regex 配置示例
以下示例可用来分析 1234-5678-9123-4567:
[parser|regex_parser] base_parser=regex format=(?<tag1>\d{4})[-](?<tag2>\d{4})[-](?<tag3>\d{4})[-](?<tag4>\d{4}) [filelog|some_info] directory=D:\Logs include=*.txt parser=regex_parser
结果显示为:
tag1=1234 tag2=5678 tag3=9123 tag4=4567
要使用 regex 分析程序来分析 Apache 日志,请提供适用于 Apache 日志的特定 regex 格式:
[parser|regex_parser] base_parser=regex format=(?<remote_host>.*) (?<remote_log_name>.*) (?<remote_auth_user>.*) \[(?<log_timestamp>.*)\] "(?<request>.*)" (?<status_code>.*) (?<response_size>.*)
结果显示为:
127.0.0.1 - admin [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 remote_host=127.0.0.1 remote_log_name=- remote_auth_user=admin log_timestamp=10/Oct/2000:13:55:36 -0700 request=GET /apache_pb.gif HTTP/1.0 status_code=200 response_size=2326
以下代码显示了分析 Apache 日志的另一示例。
[parser|regex_parser] base_parser=regex format=(?<remote_host>.* (?<remote_log_name>.*)) (?<remote_auth_user>.*) \[(?<log_timestamp>.*)\] "(?<request>.* (?<resource>.*) (?<protocol>.*))" (?<status_code>.*) (?<response_size>.*) 127.0.0.1 unknown - [17/Nov/2015:15:17:54 +0400] \"GET /index.php HTTP/1.1\" 200 4868 remote_host=127.0.0.1 unknown remote_log_name=unknown remote_auth_user=- log_timestamp=17/Nov/2015:15:17:54 +0400 request=GET /index.php HTTP/1.1 resource=/index.php protocol=HTTP/1.1 status_code=200 response_size=4868
性能注意事项
与其他分析程序(例如 CLF 分析程序)相比,regex 分析程序消耗更多资源。如果您能够使用其他分析程序来分析日志,请考虑使用这些分析程序而不使用 regex 分析程序以获得更好的性能。
如果未提供分析程序,且您使用的是
regex 分析程序,请尽可能清晰地定义格式。以下示例显示了能够提供更佳性能结果的配置。该示例指定了包含数字值的字段。
(?<remote_host>\d+.\d+.\d+.\d+) (?<remote_log_name>.*) (?<remote_auth_user>.*) \[(?<log_timestamp>.*)\] "(?<request>.*)" (?<status_code>\d+) (?<response_size>\d+)