2017-08-10 1 views
1

Ich untersuche Machbarkeit von Spring Boot-Anwendungsprotokolle direkt in elastische Suche. Ohne Dateibeats oder Logstash. Ich glaube, dass das Ingest-Plugin dabei helfen kann.Wie speichere ich Spring Boot Logs direkt in elastische

Meine ersten Gedanken sind dies mit Logback über TCP zu tun.

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> 

suchen also auf die oben Sie Protokolle direkt in logstash senden können. Ich frage mich nur, ob es möglich ist, die neuere Funktionalität von ingest zu verwenden und mit logstash zu überspringen? Durch das Senden von Json-codierten Protokollen direkt in Elastic über das Netzwerk mithilfe der Ingest-Methode?

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

Meine Frage

Ich frage mich, ob dies möglich ist? Wenn ja, könnten Sie erklären, wie Sie es tun würden. Auch was möglich wäre was die Fallstricke etc. wären

+0

Der TCP-Appender ist dafür nicht geeignet, da Sie Daten über HTTP senden müssen. Ich würde stattdessen über den Loggly HTTP Appender schauen, der den Job gut machen sollte: https://www.loggly.com/docs/java-logback/ – Val

+0

sieht nicht so aus, dass das Senden es elastisch ist? es ist auch ein bezahltes Produkt –

+0

Sie können die URL natürlich ändern, um sie an Ihre eigene ES zu senden. Siehe [Quellcode] (http://grepcode.com/file/repo1.maven.org/maven2/org.logback-extensions/logback-ext-loggly/0.1.1/ch/qos/logback/ext/loggly /LogglyAppender.java), sendet es Ihre Logs an die von Ihnen konfigurierte URL – Val

Antwort

3

Ich habe gerade meinen Vorschlag ausprobiert und es hat perfekt geklappt.

Zuerst diese Abhängigkeit in Ihrem POM hinzu:

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

Dann in Ihrer logback.xml Konfiguration, fügen Sie ein appender und einen Logger wie folgt aus:

<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> 

Sie müssen auch eine Einspielung definieren Pipeline wie folgt:

Dann können Sie in Ihrem Code diesen Logger verwenden und senden alle Daten, die Sie Ihre ES haben

private Logger esLogger = LoggerFactory.getLogger("es"); 
... 
esLogger.info("{\"message\": \"Hello World from Logback!\"}"); 

Und dieses Dokument wird in Ihrem ES am Ende:

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

Danke Val .. das hilft wirklich und es protokolliert Nachrichten :-) Wie erweitere ich es um die anderen Standard-Log-Felder wie Zeit, hosts, log level usw. verwenden kibana, um die Logs zu verstehen. Können Sie auch eine Zeichenfolge anstelle der JSON-Codierungszeichenfolge übergeben? –

Verwandte Themen