Подтвердить что ты не робот

Использование Log4J с LogStash

Я новичок в LogStash. У меня есть несколько журналов, написанных на Java-приложении в Log4J. Я пытаюсь получить эти журналы в ElasticSearch. Для моей жизни я не могу заставить ее работать последовательно. В настоящее время я использую следующую конфигурацию 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]"
  }
}

Эта конфигурация кажется удачной или пропущенной. Я не знаю, почему. Например, у меня есть два сообщения. Один работает, а другой бросает неудачу разбора. Тем не менее, я не знаю, почему. Вот сообщения и их соответствующие результаты:

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

У одного с [ "ApplicationName" ] мои пользовательские поля timestamp и level. Однако запись с [ "_grokparsefailure" ] не имеет моих настраиваемых полей. Странная деталь, журналы почти идентичны, как показано в столбце сообщений выше. Это меня действительно сбивает с толку, но я не знаю, как понять, в чем проблема или как выйти за ее пределы. Кто-нибудь знает, как я могу использовать журналы log4j импорта в logstash и последовательно получать следующие поля:

  • Уровень журнала
  • Отметка
  • Сообщение журнала
  • Имя машины
  • Тема

Спасибо за любую помощь, которую вы можете предоставить. Даже если я могу только уровень журнала, отметка времени и сообщение журнала, это будет ОГРОМНАЯ помощь. Я искренне ценю это!

4b9b3361

Ответ 1

Я бы посоветовал использовать прослушиватель сокетов log4j для logstash и app-app-приложения 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]

Там больше информации в logstash docs для входа log4j: http://logstash.net/docs/1.4.2/inputs/log4j

Ответ 2

В моем блоге я описал, как отправлять сообщения JSON в ElasticSearch, а затем анализировать его с помощью GROK. Нажмите, чтобы увидеть сообщение в блоге с описанием и примером Java В сообщении вы найдете описание, но также и простой проект maven с примером (полный проект на github).

Надеюсь, это поможет вам.