2017-05-26 235 views
3

我對如何將日誌條目直接放到elasticsearch(而不是logstash)有點困惑。到目前爲止,我發現幾個appender(log4j.appender.SocketAppender,log4j.appender.server等)允許將日誌發送到遠程主機,並且ConversionPattern似乎允許我們將日誌轉換爲「彈性友好」格式,但這種方法看起來很怪異...還是我錯了?這是發送日誌到elastic的一種方法嗎?Log4j直接登錄到elasticsearch服務器

到目前爲止,我有一個這樣的配置:

log4j.rootLogger=DEBUG, server 
log4j.appender.server=org.apache.log4j.net.SocketAppender 
log4j.appender.server.Port=9200 
log4j.appender.server.RemoteHost=localhost 
log4j.appender.server.ReconnectionDelay=10000 
log4j.appender.server.layout.ConversionPattern={"debug_level":"%p","debug_timestamp":"%d{ISO8601}","debug_thread":"%t","debug_file":"%F", "debug_line":"%L","debug_message":"%m"}%n 

但我得到一個錯誤:

log4j:WARN Detected problem with connection: java.net.SocketException: Broken pipe (Write failed) 

我無法找到任何有用的例子,所以我不明白我該怎麼辦錯誤和如何解決它。謝謝。

+1

那是不可能的。你需要Logstash。如果您想使用已棄用的log4j插件(https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html),那麼可以,但我們建議將log4j日誌寫入文件並使用Filebeat接他們並將它們發送給Elasticsearch。 –

+2

看到這個問題:https://stackoverflow.com/questions/32302421/logging-from-java-app-to-elk-without-need-for-parsing-logs – diginoise

+0

@diginoise'如果你指向這個文件logstash'這意味着我會將日誌寫入文件,這不是我所需要的 – Daria

回答

0

我發現最符合我需求的解決方案。這是一個graylog。 由於它是基於elasticsearch構建的,因此使用方式非常熟悉,因此我可以立即切換到它。

要使用它,我加入這個依賴基本log4j2依賴沿:

<dependency> 
    <groupId>org.graylog2.log4j2</groupId> 
    <artifactId>log4j2-gelf</artifactId> 
    <version>1.3.2</version> 
</dependency> 

,並使用log4j2.json配置:

{ 
    "configuration": { 
    "status": "info", 
    "name": "LOGGER", 
    "packages": "org.graylog2.log4j2", 
    "appenders": { 
     "GELF": { 
     "name": "GELF", 
     "server": "log.myapp.com", 
     "port": "12201", 
     "hostName": "my-awsome-app", 
     "JSONLayout": { 
      "compact": "false", 
      "locationInfo": "true", 
      "complete": "true", 
      "eventEol": "true", 
      "properties": "true", 
      "propertiesAsList": "true" 
     }, 
     "ThresholdFilter": { 
      "level": "info" 
     } 
     } 
    }, 
    "loggers": { 
     "logger": [ 
     { 
      "name": "io.netty", 
      "level": "info", 
      "additivity": "false", 
      "AppenderRef": { 
      "ref": "GELF" 
      } 
     }   
     ], 
     "root": { 
     "level": "info", 
     "AppenderRef": [ 
      { 
      "ref": "GELF" 
      } 
     ] 
     } 
    } 
    } 
} 
1

如果你想使用它,我已經在這裏寫了這個appender Log4J2 Elastic REST Appender。它能夠在將事件發送到Elastic之前根據事件的時間和/或事件數來緩衝日誌事件(使用_bulk API,以便一次發送)。 它已發佈到Maven Central,因此非常簡單。