簡體   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