[英]Fluentd apache log format with multiple host ip
我对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时,流畅的聚合器会报告“模式不匹配”警告。 我的意思是
这符合:
"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解析器模式捕获的很好的文档,以及一种测试有效的正则表达式的好方法。 这个Fluentd正则表达式编辑器并没有真正的帮助。
它总是生成配置,而不给出测试结果。
谢谢。
如果您有多个IP,可以使用以下正则表达式:
^(?<host>[^ ]*(?:,\s+[^ ]+)*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
^^^^^^^^^^^^^^
的(?:,\\s+[^ ]+)*
模式匹配0或更多( *
的)序列,
,1或多个空格( \\s+
)符号,并且比空间其它1个或多个字符( [^ ]+
)。
更加安全的表达式如下所示:
^(?<host>(?:\d+\.){3}\d+(?:,\s*(?:\d+\.){3}\d+)*|-) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
见演示2
(?:\\d+\\.){3}\\d+(?:,\\s*(?:\\d+\\.){3}\\d+)*
匹配number
+ .
+ number
+ .
+ number
+ .
+ number
,并以逗号列出可选的相同模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.