繁体   English   中英

具有多个主机IP的流利的Apache日志格式

[英]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>[^\"]*)")?$
              ^^^^^^^^^^^^^^

在优质的Web正则测试器上查看演示

(?:,\\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM