2017-08-10 6 views
1

私はスプリングブートアプリケーションログを弾性検索に直接送ることの可能性を検討しています。ファイルビートやログを使用せずに。私はIngestのプラグインがこれを助けるかもしれないと信じています。スプリングブートログを直接弾性に取り込む

私の最初の考えは、TCP経由のログバックを使用してこれを行うことです。

https://github.com/logstash/logstash-logback-encoder

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> 
     <destination>127.0.0.1:4560</destination> 
     <encoder class="net.logstash.logback.encoder.LogstashEncoder" /> 
    </appender> 

    <root level="DEBUG"> 
     <appender-ref ref="stash" /> 
    </root> 
</configuration> 

ですから、logstashに直接ログを送信することができます上記を見て。 Imはちょうどそれがingestのより新しい機能を使用し、logstashを使用してスキップすることが可能かどうか疑問に思っていますか?エンジェストメソッドを使用してネットワーク上で直接jsonエンコードされたログをエラスティックに送信することによって?

https://www.elastic.co/blog/new-way-to-ingest-part-1

私の質問

これが可能である場合、私は思ったんだけど?もしそうなら、あなたはあなたがそれをやる方法を説明することができます。 また、何が落とし穴になる可能性がありますか。

+0

TCPアペンダーは、HTTP経由でデータを送信する必要があるため、これには適していません。私はLoggly HTTP appenderを見て、その代わりにちゃんと仕事をする必要があります:https://www.loggly.com/docs/java-logback/ – Val

+0

それは弾性に送信するようなdoesntのように見える?また、その製品の代金を支払う –

+0

もちろん、自分のESに送るURLを変更することができます。 [ソースコード](http://grepcode.com/file/repo1.maven.org/maven2/org.logback-extensions/logback-ext-loggly/0.1.1/ch/qos/logback/ext/loggly)を参照してください。 /LogglyAppender.java)、設定したURLにあなたのログを送信します – Val

答えて

3

私はちょうど私の提案を試み、それは完璧に機能しました。

まず、あなたのPOMでこの依存関係を追加します。

<dependency> 
     <groupId>org.logback-extensions</groupId> 
     <artifactId>logback-ext-loggly</artifactId> 
     <version>0.1.2</version> 
    </dependency> 

次に、あなたのlogback.xml構成では、アペンダと、このようなロガーを追加します。

<appender name="ES" class="ch.qos.logback.ext.loggly.LogglyAppender"> 
    <endpointUrl>http://localhost:9200/tests/test?pipeline=logback</endpointUrl> 
    <pattern>%m</pattern> 
</appender> 
<logger name="es" level="INFO" additivity="false"> 
    <appender-ref ref="ES"/> 
</logger> 

あなたはまた、取り込みを定義する必要があります

PUT _ingest/pipeline/logback 
{ 
    "description": "logback pipeline", 
    "processors": [ 
    { 
     "set" : { 
     "field": "source", 
     "value": "logback" 
     } 
    } 
    ] 
} 

次に、コードでは、そのロガーを使用することができますそして

あなたのESにあなたが持っているものは何でもデータ
private Logger esLogger = LoggerFactory.getLogger("es"); 
... 
esLogger.info("{\"message\": \"Hello World from Logback!\"}"); 

を送信し、この文書は、あなたのESになってしまいます。

{ 
    "_index": "tests", 
    "_type": "test", 
    "_id": "AV3Psj5MF_PW7ho1yJhQ", 
    "_score": 1, 
    "_source": { 
     "source": "logback", 
     "message": "Hello World from Logback!", 
    } 
} 
+1

ありがとうございます..これは本当に役立ち、メッセージをログします:-)他の標準的なログフィールド、例えば時刻、ホスト、ログレベルなどは、木場を使用してログの意味を理解します。また、あなたはjsonエンコーディング文字列ではなく文字列を渡すことができますか? –

関連する問題