我用fluentd
更換logstash
的時候,我用in-tail
插件尾nginx access
日誌,訪問日誌的格式是這樣的:如何使用fluentd正則表達式滿足nginx的錯誤請求
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time';
的fluentd
的conf就像
format /^(?<host>\S+)\s-\s(?<user>\S+)\s\[(?<time>[^\]]*)\]\s(?<method>\S+)\s(?<url>\S+)\s(?<http_version>\S+)\s"(?<status>[^\"]+)"\s(?<bytes>\d+)\s"(?<rfc>[^\"]+)"\s"(?<agent>[^\"]+)"\s"(?<x_forward>[^\"]+)"\s(?<time_spent>\S+).*$/
當請求是正確的,它工作正常,但是當請求是壞的,就像下面這滿足錯誤:
172.31.33.157 - - [08/May/2017:16:30:20 +0800] - "400" 0 "-" "-" "-" 0.000
不良要求錯過了method
和rfc
字段,所以fluentd
運行錯誤。我如何修改format
以便我不關心請求是否不正確或不正確?
任何答案可以理解
運行到另一個場景中,提交的agent
或rfc
是沒有的,它運行錯誤。就像
172.31.44.196 - - [08/May/2017:18:47:31 +0800] GET /click?mb_pl=ios&version=1.1 HTTP/1.1 "302" 5 "-" "" "100.38.38.149, 54.224.136.60" 0.004
或
172.31.44.196 - - [08/May/2017:18:47:31 +0800] GET /click?mb_pl=ios&version=1.1 HTTP/1.1 "302" 5 "" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E304" "100.38.38.149, 54.224.136.60" 0.004
如何解決這種情況?
正確的請求是什麼樣的? –
172.31.44.196 - [08/May/2017:18:47:31 +0800] GET /click?mb_pl=ios&version=1.1 HTTP/1.1「302」5「 - 」「Mozilla/5.0(iPhone; CPU iPhone OS 10_3_1像Mac OS X)AppleWebKit/603.1.30(KHTML,如Gecko)Mobile/14E304「」100.38.38.149,54.224.136.60「0.004 –