如何将 Spring 引导日志直接提取到 elastic 中
How do you ingest Spring boot logs directly into elastic
我正在研究将 spring 启动应用程序日志直接发送到 Elastic Search 的可行性。不使用 filebeats 或 logstash。我相信 Ingest 插件可能会对此有所帮助。
我最初的想法是通过 TCP 使用 logback 来做到这一点。
<?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中。我只是想知道是否可以使用 ingest 和 skip using logstash 的新功能?通过使用摄取方法通过网络将 json 编码日志直接发送到 elastic?
我的问题
我想知道这是否可能?如果是这样,你能解释一下你会怎么做吗?
还有什么可能是什么陷阱等等
我刚刚尝试了我的建议,结果很完美。
首先,在您的 POM 中添加此依赖项:
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-loggly</artifactId>
<version>0.1.2</version>
</dependency>
然后,在您的 logback.xml
配置中,像这样添加一个 appender 和一个 logger:
<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!",
}
}
我之前问过同样的问题:Direct integration of Logback with Elasticsearch
看看https://github.com/internetitem/logback-elasticsearch-appender
更新 logback-elasticsearch-appender 的开发于 2017 年 10 月停滞 breaking issues for ES v6.x
我正在研究将 spring 启动应用程序日志直接发送到 Elastic Search 的可行性。不使用 filebeats 或 logstash。我相信 Ingest 插件可能会对此有所帮助。
我最初的想法是通过 TCP 使用 logback 来做到这一点。
<?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中。我只是想知道是否可以使用 ingest 和 skip using logstash 的新功能?通过使用摄取方法通过网络将 json 编码日志直接发送到 elastic?
我的问题
我想知道这是否可能?如果是这样,你能解释一下你会怎么做吗? 还有什么可能是什么陷阱等等
我刚刚尝试了我的建议,结果很完美。
首先,在您的 POM 中添加此依赖项:
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-loggly</artifactId>
<version>0.1.2</version>
</dependency>
然后,在您的 logback.xml
配置中,像这样添加一个 appender 和一个 logger:
<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!",
}
}
我之前问过同样的问题:Direct integration of Logback with Elasticsearch
看看https://github.com/internetitem/logback-elasticsearch-appender
更新 logback-elasticsearch-appender 的开发于 2017 年 10 月停滞 breaking issues for ES v6.x