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_1field_2field_3field_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+)