0

Logstashを使用してnginxログを解析しようとしていますが、この_grokparsefailureタグをNginx $ remote_userを含む行にすることを除いて、すべてうまく見えます。 「 - 」$のREMOTE_USERがある場合には(何の$ REMOTE_USERが指定されていないデフォルト値)、Logstashは仕事をするが、[email protected]のような本当の$ REMOTE_USERと、それは失敗し、_grokparsefailureタグ入れる:Nginxログを解析するときの_grokparsefailure

127.0.0.1を - - Mozilla/5.0(X11; Linux x86_64)AppleWebKit/537.36(KHTML、Geckoのように) - [17/Feb/2017:23:14:08 +0100] "GET/favicon.ico HTTP/1.1" 302 169 "http://training-hub.tn/trainer/" )クローム/ 56.0.2924.87 サファリ/ 537.36"

=====>細かい作品

127.0.0.1 - [email protected] [17/Feb/2017:23:14:07 +0100]「GET /trainer/templates/home.tmpl.html HTTP/1.1」304 0 「http://training-hub.tn/trainer/」「Mozilla /5.0(X11; Linuxのx86_64で) のAppleWebKit/537.36(ヤモリのようにKHTML、)クローム/ 56.0.2924.87 サファリ/ 537.36"

=====>_grokparsefailureタグと私は使用していますライン

のログを解析するために失敗しますこの設定ファイル:

input {  
    file {  
     path => "/home/dev/node/training-hub/logs/access_log"  
     start_position => "beginning"  
     sincedb_path => "/dev/null" 
     ignore_older => 0 
     type => "logs" 
    } 
} 

filter {  
    if[type] == "logs" {   
     mutate {    
      gsub => ["message", "::ffff:", ""]   
     }  
     grok {   
      match=> [ 
       "message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}", 
       "message" , "%{COMMONAPACHELOG}+%{GREEDYDATA:extra_fields}" 
      ] 
      overwrite=> [ "message" ] 
     } 

     mutate { 
      convert=> ["response", "integer"] 
      convert=> ["bytes", "integer"] 
      convert=> ["responsetime", "float"] 
     } 
     geoip { 
      source => "clientip" 
      target => "geoip" 
      database => "/etc/logstash/GeoLite2-City.mmdb" 
      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] 
      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] 
     } 
     mutate { 
      convert => [ "[geoip][coordinates]", "float"] 
     } 

     date { 
      match=> [ "timestamp", "dd/MMM/YYYY:HH:mm:ss Z" ] 
      remove_field=> [ "timestamp" ] 
     } 

     useragent { 
      source=> "agent" 
     } 
    } 
} 

output { elasticsearch {   hosts => "localhost:9200" } } 

答えて

0

多くの値で出力をテストした後、私はそれが有効なユーザー名(メールアドレス)ではありませんので、私はを追加しましたので、Logstashは、このような$remote_userを含む行をログ解析に失敗していることが実現@と残りのメールアドレスを削除して有効な$remote_userを持つフィルタ。

GSUB => [ "メッセージ"、 「@ +-Z0-9(:(?:-Z0-9??。)?|?[(:(?:25 [0- {0-9} | [0-9] [0-9]?)){3}(?: 25 [0-5] | 2 [0- 4] [0-9] | [01]?[0-9] [0-9]?| [a-z0-9 - ] * [a-z0-9] :(?:[\ x01- \ x08 \ x0c \ x0e \ x1f \ x0- \ x1f \ x21- \ x5a \ x53- \ x7f] | \ [\ x01 \ x0b \ x0c \ x0e- \ x7f])))))) [ ]

そして今、正常に動作します。