【发布时间】:2015-11-24 23:12:35
【问题描述】:
我想将日志从 Java 应用程序发送到 ElasticSearch,传统的方法似乎是在运行应用程序的服务器上设置 Logstash,并让 Logstash 解析日志文件(使用正则表达式...!)并加载它们进入 ElasticSearch。
这样做是否有原因,而不是仅仅设置 log4J(或 logback)以将所需格式的内容直接记录到日志收集器中,然后可以异步发送到 ElasticSearch?当应用程序本身可以首先将其记录为所需的格式时,我不得不摆弄 grok 过滤器来处理多行堆栈跟踪(并在日志解析时消耗 CPU 周期),这对我来说似乎很疯狂?
另一方面,对于在 Docker 容器中运行的应用程序,最好的做法是直接登录到 ElasticSearch,因为只需要运行一个进程?
【问题讨论】:
-
即使你将一个漂亮的 json 文档直接发送到 elasticsearch,仍然可以在途中应用商业智能。这对logstash 很有用。此外,大多数人并不生活在一个异构的世界中,因此使用一个聚合器可能会很强大。 tmtowtdi,当然。
-
我觉得这主要是因为可扩展性的原因。如果应用程序正在向 Elasticsearch 推送日志,那么来自 ELlasticsearch 的慢速背压会影响应用程序的性能,如果应用程序在主内存中排队大量日志,则肯定会产生不利影响。
标签: java logging elasticsearch logstash elastic-stack