Intento enviar registros al evento de Windows usando logstash. Después de agregar algo de código ruby, se crea debajo del error. ¿Cómo puedo enviar registros para el evento windoes?
input { file { type => "json" path => ["C:/Temp/logs/*.json"] start_position => "beginning" codec => "json" discover_interval => 120 stat_interval => 60 sincedb_write_interval => 60 close_older => 60 } } filter { mutate { remove_field => [ "path" ] } ruby { code => " require 'win32/eventlog' logger = Win32::EventLog.new logger.report_event(:event_type => Win32::EventLog::INFO, :data => "a test event log entry") " } } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["http://loguser:xxxx@192.158.5.84:333"] index => "logstash-%{+YYYY.MM}" } }
Error:
[2018-03-20T09:51:28,629][ERROR][logstash.agent ] Cannot create pipeline {:reason=>"Expected one of #, {, } at line 23, column 75 (byte 464) after filter {\nmutate {\n remove_field => [ \"path\" ] \n\n}\n ruby {\n init => \" require 'win32/eventlog' \n\t \"\n code => \"\n logger = Win32::EventLog.new\n logger.report_event(:event_type => Win32::EventLog::INFO, :data => \""}
Como puede ver por el resaltado de syntax en su pregunta, hay un problema con las comillas dobles que está usando. Preste mucha atención a las letras negras en el bloque de código:
" require 'win32/eventlog' logger = Win32::EventLog.new logger.report_event(:event_type => Win32::EventLog::INFO, :data => "a test event log entry") "
Está envolviendo el bloque de código entre comillas dobles, pero también los está utilizando para definir la cadena en el evento: "a test event log entry"
. La primera cita para la cadena finaliza el bloque de código, y LogStash informa un error de syntax, porque esperaba que cerrara la instrucción con un }
.
También puede ver esto en el mensaje de error, donde informa el valor como el atributo de data
como una comilla doble simple :data => \"
.
Intente envolver la cadena en comillas simples: 'a test event log entry'
para solucionar este problema.