背景
ELK是现在常用的日志方案,有多种组合方式:
ElasticSearch + Kibana + Logstash:由Logstash收集各终端的日志,过滤后发到送ElasticSearch,但Logstatsh比较耗资源,会影响本地应用的性能
ElasticSearch + Kibana + FileBeat:改由轻量的FileBeat收集日志,但FileBeat不支持过滤(注:新版的ignest node可以部分实现),所以又出现了下面的组合
ElasticSearch + Kibana + FileBeat + Logstash:FileBeat采集的日志统一经过Logstash处理后再到ElasticSearch
ElasticSearch + Kibana + Kafka/Redis + Logstash:这种组合也比较常见,使用Kafka/Redis的消息分发功能由Logstash统一收集消息再发到ElasticSearch
缺陷
上面的方案的主要缺陷是引入节点太多,增加了复杂性,降低了可靠性。另外Logstash的Grok配置也是需要啃一番文档的。
改进
做减法,能砍的都砍掉,尽量不要引进第三方组件,对原始代码无侵入。Logstash在里面主要是做收集和过滤,完全可以让终端直接提交Json数据代替这个处理过程。按此目标,我开发了一个Logback下的ElasticSearch Appender简化了ELK方案。任何一个Spring Boot应用只要加一个logback appender配置就能使本地日志提升为基于ElasticSearch的分布式日志系统,不需要增加第三方组件