我想将日志从Java应用程序发送到ElasticSearch,传统方法似乎是在运行应用程序的服务器上设置Logstash,并使用logstash解析日志文件(使用正则表达式…!)并将其加载到ElasticSearch中.
是否有这样做的原因,而不是仅仅设置log4J(或logback)将所需格式的内容直接记录到日志收集器中,然后可以异步运送到ElasticSearch?当应用程序本身可以首先将其记录为所需的格式时,我必须摆弄grok过滤器以处理多行堆栈跟踪(并在日志解析时刻录CPU周期),这似乎很疯狂?
在切向相关的注释中,对于在Docker容器中运行的应用程序,最佳做法是直接登录到ElasticSearch,因为只需要运行一个进程?
解决方法:
我认为从Log4j / Logback /无论是哪个appender直接登录到Elasticsearch通常都是不明智的,但我同意编写Logstash过滤器来解析“正常”的人类可读Java日志也是一个坏主意.我尽可能地使用https://github.com/logstash/log4j-jsonevent-layout让Log4j的常规文件追加器生成JSON日志,这些日志不需要Logstash进一步解析.
标签:java,elasticsearch,logging,logstash,elastic-stack
来源: https://codeday.me/bug/20191004/1852736.html