最近由于公司需要有一个统一的日志管理平台,由我负责将ELK日志收集器整合到项目中。作为开发者,我们都知道日志的重要性,单体架构的项目通常把日志统一输出到控制台或者某个文件中,但是在分布式架构下,尤其是微服务中,各个微服务都有自己的日志,我们不可能一一的检查所有服务器的日志,毕竟一一打开各个服务器可是一件很麻烦的事情,于是我们需要将日志进行集中化管理,这也是今天的主题。
那么,什么是ELK?
ELK是指elasticsearch、logstash以及kibina三大法宝。ELK实现日志收集的原理是什么?
让我们先来分析一下这三个软件的用途。Elasticsearch是一个基于Lucene的搜索框架,我们可以把它当成一个查询效率极高的数据库。Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据、转换数据,然后它可以将数据发送到elasticsearch中。Kibina提供了一个可视化的管理界面,方便我们对elasticsearch中的数据进行操作,网上有人形象的将它们和MVC结合起来理解。ELK收集日志的原理很简单,首先我们把需要打印的日志输出到logstash,logstash再把日志存进elasticsearch,最后通过kibina对日志进行分析和管理。
接下来是正题,教大家如何用spring boot构建一个ELK日志收集器。
ELK的安装和配置
首先,去官网下载ELK三大利器,并一一解压。在它们各自的目录下找到对应的配置文件,改动如下:
1. Elasticsearch配置文件
elasticsearch安装目录:
/config/elasticsearch.yml
其中network.host是你安装elasticsearch的机器的ip,也可以是127.0.0.1。
2. Logstash配置文件
(config文件夹下新建一个elk.conf文件)
其中的input是指你要作为输入源的东西,这里我们选择通过tcp插件监听本机的(安装logstash的那台)4560端口,一旦有日志输送过来,就把它输出到存到elasticsearch( hosts的ip是安装elasticsearch的机器ip)中去。
3.Kibina的配置:好吧,这货不需要配置。
配置完成后,先启动elasticsearch。我们接着通过配置文件elk.conf作参数启动logstash,
命令:在终端中cd到logstash的bin目录下执行
logstash -f ../config/elk.conf
最后启动kibina。
Spring boot创建一个测试项目
在idea中创建一个名为demo的springboot项目,pom依赖改动如下:
在resources文件夹下新建一个log4j2.xml文件,内容如下:
在resources文件夹下新建一个log4j2.xml文件,内容如下:
其中host是我们的logstash所在的机器的ip地址,port配置成我们logstash正在监听的4560端口。
修改DemoApplication.java:
启动spring boot然后访问http://localhost:8080/index
最终控制台输出:
与此同时,logstash终端会更新信息:
最后我们打开kibina:打开导航的Management->Index Management可以看到成功生成了索引
大功告成,ELK收集器的配置到此结束。
本文作者:
刘洪涛
芦苇科技 Java初级后台工程师
芦苇科技-广州专业软件外包服务公司
提供微信小程序、APP应用研发、UI设计等专业服务,专注于互联网产品咨询、品牌设计、技术研发等领域
领取专属 10元无门槛券
私享最新 技术干货