我正在研究将Spring Boot应用程序日志直接发送到elasticsearch的可行性。不使用文件拍或logstash。我相信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。我只是想知道是否有可能使用较新的摄取功能,并跳过使用logstash?通过使用摄取方法通过网络将json编码的日志直接发送到Elastic中?
https://www.elastic.co/blog/new-way-to-ingest- part-1
我的问题
我想知道这是否可能?如果可以的话,您可以解释一下如何做。还有什么可能的陷阱等。
我只是尝试了我的建议,结果很完美。
首先,在您的POM中添加此依赖项:
<dependency> <groupId>org.logback-extensions</groupId> <artifactId>logback-ext-loggly</artifactId> <version>0.1.2</version> </dependency>
然后,在您的logback.xml配置中,添加一个附加器和一个记录器,如下所示:
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!", } }