从Java应用程序登录到ELK而无需解析日志

Rob*_*Rob 14 java logging elasticsearch logstash elastic-stack

我想将日志从Java应用程序发送到ElasticSearch,传统方法似乎是在运行应用程序的服务器上设置Logstash,并使用logstash解析日志文件(使用正则表达式...!)并将其加载到ElasticSearch中.

是否有这样做的原因,而不是仅仅设置log4J(或logback)将所需格式的内容直接记录到日志收集器中,然后可以异步运送到ElasticSearch?当应用程序本身可以首先将其记录为所需的格式时,我必须摆弄grok过滤器以处理多行堆栈跟踪(并在日志解析时刻录CPU周期),这似乎很疯狂?

在切向相关的注释中,对于在Docker容器中运行的应用程序,最佳做法是直接登录到ElasticSearch,因为只需要运行一个进程?

Val*_*Val 8

如果您真的想沿着这条路走下去,那么我们的想法就是使用像Elasticsearch appender(或者这个另一个)这样的东西,它可以将您的日志直接发送到您的ES集群.

但是,出于与@Vineeth Mohan提到的相同的原因,我建议反对它.您还需要问自己几个问题,但主要是如果您的ES群集因任何原因(OOM,网络故障,ES升级等)出现故障会发生什么?

存在异步性的原因有很多,其中一个原因是架构的健壮性,而且大部分时间比在日志解析中多烧几个CPU周期重要得多.

另请注意,正式的ES讨论论坛正在讨论这个主题.


Mag*_*äck 2

我认为从 Log4j/Logback/任何附加程序直接登录到 Elasticsearch 通常是不明智的,但我同意编写 Logstash 过滤器来解析“正常”人类可读的 Java 日志也是一个坏主意。我尽可能使用https://github.com/logstash/log4j-jsonevent-layout让 Log4j 的常规文件附加程序生成 JSON 日志,不需要 Logstash 进行任何进一步的解析。