我对fluend日志解析器有一点问题。我有清漆服务器,我在其上设置了 X-Forwarded-For 参数,以满足http请求经过的所有主机堆栈的ip列表。我用它来获取 varnishncsa 日志中的信息。这是log:
的例子"192.168.79.16, 192.22.10.22, 10.2.2.22 - - [13/Aug/2015:09:50:45 +0000] \"GET http://poc.mydomain.com/panier/payment/payline?notificationType=WEBTRS&token=1KB01BwKWdUhVj1222301439454223514 HTTP/1.1\" 401 0 \"-\" \"Java/1.8.0_45\""
在奥德手中,我想在流利的基础上汇总这些日志。然后当vanishncsa日志使用apache格式时,我使用 apache2 flentd格式进行输入解析,就像在这个配置中一样:
<source>
type tail
format apache2
path /var/log/varnish/varnishncsa.log
pos_file /var/log/td-agent/tmp/access.log.pos
tag "apache2.varnish.mydomain.com.access"
</source>
现在的问题是,如果我在日志中只有一个主机ip,但是当有多个IP时,流利的agregator报告&#34;模式不匹配&#34;警告。我的意思是
匹配:
"192.168.79.16 - - [13/Aug/2015:09:50:45 +0000] \"GET http://poc.mydomain.com/panier/payment/payline?notificationType=WEBTRS&token=1KB01BwKWdUhVj1222301439454223514 HTTP/1.1\" 401 0 \"-\" \"Java/1.8.0_45\""
这不匹配:
"192.168.79.16, 192.22.10.22, 10.2.2.22 - - [13/Aug/2015:09:50:45 +0000] \"GET http://poc.mydomain.com/panier/payment/payline?notificationType=WEBTRS&token=1KB01BwKWdUhVj1222301439454223514 HTTP/1.1\" 401 0 \"-\" \"Java/1.8.0_45\""
apache2流利的正则表达式是:
^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
使用这种时间格式:
%d/%b/%Y:%H:%M:%S %z
我试图找出并发布正确的regx,但尚未找到。
我试过了,但它没有用
<source>
type tail
format format /^(?<host>\,*[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/
time_format %d/%b/%Y:%H:%M:%S %z
path /var/log/varnish/varnishncsa.log
pos_file /var/log/td-agent/tmp/access.log.pos
tag "apache2.varnish.mydomain.com.access"
</source>
有人可以帮忙吗?并且还给我一个关于fluend解析器模式捕获的好文档,以及测试fulentd正则表达式的好方法。 这Fluentd regular expression editor并没有真正帮助。
它始终生成配置,而不提供测试结果。
感谢。
答案 0 :(得分:2)
以下是您可以使用的正则表达式,以防您有多个IP:
^(?<host>[^ ]*(?:,\s+[^ ]+)*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
^^^^^^^^^^^^^^
请参阅demo on a good Web regex tester
(?:,\s+[^ ]+)*
模式匹配0个或更多(*
),
个序列,1个或更多个空格(\s+
)符号,以及1个或更多个字符以外的字符([^ ]+
)。
更安全的表达式如下:
^(?<host>(?:\d+\.){3}\d+(?:,\s*(?:\d+\.){3}\d+)*|-) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
请参阅Demo 2
(?:\d+\.){3}\d+(?:,\s*(?:\d+\.){3}\d+)*
匹配number
+ .
+ number
+ .
+ number
+ .
+ {{1} },使用逗号列出可选的相同模式。