2016-06-28 6 views
0

Ich googelte eine Lösung zu einem für dieses Problem, und ich fügte den Ruby-Code hinzu. Problem ist, wenn ich gsub benutze, bekomme ich auch einen Fehler.Logstash - Hinzufügen von Ausnahmebedingung für JSON-Escape-Zeichen

Ich brauche bitte eine Lösung, entweder um den Ruby-Fehler zu beheben oder eine andere Methode, um eine Ausnahme für das Escape-Zeichen hinzuzufügen.

Hier ist mein Logstash Filter:

filter { 
    if [type] == "apache" { 
    json { 
      source => "message" 
     } 
    ruby { 
      code => "str=event['url']; str=str.gsub('\\','\*'); event['url']=str;" 
     } 
} 
} 

Ich meine Logs von Apache im JSON-Format zu bekommen. Hier ist die Logstash Fehlermeldung:

{:timestamp=>"2016-06-28T12:49:21.821000+0100", :message=>"Error 
parsing json", :source=>"message", :raw=>"{ \"@version\": \"1\", 
\"@timestamp\": \"2016-06-28T12:49:16.000+0100\", \"message\": \"GET 
/yolo/q-ap%C3%Ablah/?search%5Bdist%5D=15&page=13 HTTP/1.1\", \"via\": 
\"192.168.220.100\", \"client-ip\": \"123.123.123.123\", 
\"remote-logname\": \"-\", \"remote-user\": \"-\", \"recv-time\": 
\"[28/Jun/2016:12:49:16 +0100]\", \"serve-time-microsec\": \"88613\", 
\"request\": \"GET /yolo/q-ap%C3%Ablah/?search%5Bdist%5D=15&page=13 
HTTP/1.1\", \"status\": \"200\", \"size\": \"184985\", \"referer\": 
\"-\", \"user-agent\": \"Mozilla/5.0 (compatible; Googlebot/2.1; 
+http://www.google.com/bot.html)\", \"url\": \"/yolo/q-ap\\xc3\\xablah/\", \"query\": 
\"?search%5Bdist%5D=15&page=13\", \"method\": \"GET\", \"protocol\": 
\"HTTP/1.1\", \"vhost\": \"www.site.com\", \"received-size\": \"1136\" 
}", :exception=>#LogStash::Json::ParserError: Unrecognized character 
escape 'x' (code 120) at Source: [[email protected]; line: 1, column: 599>, 
:level=>:warn} 

{:timestamp="2016-06-28T12:49:21.821000+0100", :message=>"Ruby 
exception occurred: undefined method `gsub' for nil:NilClass", 
:level=>:error} 
+0

Ich bin nicht ganz sicher, aber vielleicht hat es etwas todo mit Ihrem Code eine Zeichenfolge innerhalb eines sein -> "<- und dann in Ihrem gsub, obwohl du ein -> '<- du hast ein \ normal benutzt, entkomme das folgende Zeichen. Kannst du hier etwas entkommen? – Shimu

+0

Der ursprüngliche Ruby-Code sieht so aus: 'code =>' str = event [" request_body "]; str = str.gsub (" \\ x22 "," \ ""). gsub ("\\ x5C", "\\"); event ["request_body"] = str; ''wo bekomme ich genau die gleiche Fehlermeldung. – Infinite

Antwort

Verwandte Themen