ich die fluentd
verwenden, um die logstash
zu ersetzen, ich in-tail
Plugin Schwanz der nginx access
Protokoll Zugriffsprotokoll des Format verwenden wie:wie fluentd regexp verwenden, wenn die nginx schlecht Anfrage erfüllen
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';
die fluentd
conf wie ist
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+).*$/
es funktioniert gut, wenn die Anfrage korrekt ist, aber es Fehler treffen, wenn die Anforderung schlecht ist, wie folgt:
172.31.33.157 - - [08/May/2017:16:30:20 +0800] - "400" 0 "-" "-" "-" 0.000
die schlechte Anfrage vermisse die method
und rfc
Feld, so dass die fluentd
falsch läuft. Wie kann ich die format
ändern, so dass es mir egal ist, ob die Anfrage falsch oder richtig ist?
allfällige Antworten
laufen in ein anderes Szenario zu erkennen sind, die agent
oder rfc
abgelegt ist keine, es Fehler läuft. genau wie
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
oder
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
wie dieses Szenario zu lösen?
Was für eine korrekte Anfrage wie aus? –
172.31.44.196 - - [08/Mai/2017: 18: 47: 31 0.800] GET /click?mb_pl=ios&version=1.1 HTTP/1.1 "302" 5 "-" „Mozilla/5.0 (iPhone, CPU iPhone OS 10_3_1 wie Mac OS X) AppleWebKit/603.1.30 (KHTML, wie Gecko) mobile/14E304" "100.38.38.149, 54.224.136.60" 0.004 –