plugin filebeat log4j logstash

filebeat - Usando Log4J con LogStash



logstash api input (3)

Soy nuevo en LogStash. Tengo algunos registros escritos desde una aplicación Java en Log4J. Estoy en el proceso de intentar obtener esos registros en ElasticSearch. Por mi vida, parece que no consigo que funcione de manera consistente. Actualmente, estoy usando la siguiente configuración de logstash:

input { file { type => "log4j" path => "/home/ubuntu/logs/application.log" } } filter { grok { type => "log4j" add_tag => [ "ApplicationName" ] match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}" ] } } output { elasticsearch { protocol => "http" codec => "plain" host => "[myIpAddress]" port => "[myPort]" } }

Esta configuración parece ser impredecible. No estoy seguro de por qué. Por ejemplo, tengo dos mensajes. Uno funciona, y el otro arroja un error de análisis. Sin embargo, no estoy seguro de por qué. Aquí están los mensajes y sus respectivos resultados:

Tags Message ------ ------- ["_grokparsefailure"] 2014-04-04 20:14:11,613 TRACE c.g.w.MyJavaClass [pool-2- thread-6] message was null from https://domain.com/id-1/env- MethodName ["ApplicationName"] 2014-04-04 20:14:11,960 TRACE c.g.w.MyJavaClass [pool-2- thread-4] message was null from https://domain.com/id-1/stable- MethodName

El que tiene ["Nombre de aplicación"] tiene mis campos personalizados de timestamp de timestamp y level . Sin embargo, la entrada con ["_grokparsefailure"] NO tiene mis campos personalizados. La parte extraña es que los registros son casi idénticos, como se muestra en la columna del mensaje anterior. Esto realmente me confunde, sin embargo, no sé cómo averiguar cuál es el problema o cómo superarlo. ¿Alguien sabe cómo puedo usar los registros de importación log4j en logstash y obtener los siguientes campos de manera consistente?

  • Nivel de registro
  • Marca de tiempo
  • Mensaje de registro
  • Nombre de la máquina
  • Hilo

Gracias por cualquier ayuda que pueda proporcionar. Incluso si puedo solo el nivel de registro, la marca de tiempo y el mensaje de registro, eso sería una GRAN ayuda. Sinceramente lo aprecio!



Recomiendo usar el detector de socket log4j para logstash y el log apper de log4j.

Logstash conf:

input { log4j { mode => server host => "0.0.0.0" port => [logstash_port] type => "log4j" } } output { elasticsearch { protocol => "http" host => "[myIpAddress]" port => "[myPort]" } }

log4j.properties:

log4j.rootLogger=[myAppender] log4j.appender.[myAppender]=org.apache.log4j.net.SocketAppender log4j.appender.[myAppender].port=[log4j_port] log4j.appender.[myAppender].remoteHost=[logstash_host]

Hay más información en los documentos de logstash para su entrada log4j: http://logstash.net/docs/1.4.2/inputs/log4j