2017-05-26 3 views
3

ログエントリを直接elasticsearch(logstashではなく)に配置するにはどうしたらいいですか?これまで私はログをリモートホストに送ることを可能にするいくつかのアペンダ(log4j.appender.SocketAppenderlog4j.appender.serverなど)を見つけました。また、ConversionPatternの可能性もログを「弾力的な」形式に変換する可能性があります。または私は間違っていますか?ログをelasticに送信する方法の1つですか?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

このアペンダーはここではLog4J2 Elastic REST Appenderと書いてあります。それは時間とイベントの数に基づいてログイベントをバッファリングしてからElasticに送信します(_bulk APIを使用してすべてを一度に送信します)。 Maven Centralに公開されているので、かなり簡単です。

関連する問題