缘起
在微服务开发过程中,一般都会利用多台服务器做分布式部署,如何能够把分散在各个服务器中的日志归集起来做分析处理,是一个微服务服务需要考虑的一个因素。
搭建一个日志系统
搭建一个日志系统需要考虑一下一些因素:
- 利用什么技术,是自己实现还利用现成的组件
- 日志需要定义统一的格式
- 日志需要拥有一个锚点来进行全局跟踪
第一个问题,针对我们小公司来说,基本没有自己的研发能力,绝对是选用第三方开源的组件了。ELK配置比较简单,有现成的UI界面,容易检索日志信息,是首选。
第二个问题,利用log4j2定义好统一的日志格式,利用logstash过滤日志内容。
第三个问题,全局跟踪的ID有几种生产方式,一种是利用UUID或者生成随机数,一种是利用数据库来生成sequence number,还可以通过自定义一个id生成服务来获取。考虑到自身服务的需要,这里选用生成随机数来实现。
日志系统架构
从左边看起,每一台webserver上都会部署一个logstash-agent,它的作用是用类似tailf的方式监听日志文件,然后把新添加的日志发送到redis队列里面,logstash-indexer负责从redis相应的队列里面取出日志,对日志进进行加工后输出到elasticsearch中,elasticsearch会根据要求对日志进行索引归集,最后用户可以通过kibana来查看和分析日志。
开始搭建日志系统
准备工作
- 安装JDK8
- 安装Redis2.8
这里不涉及怎样安装JDK和Redis,请自行查阅资料
使用logstash2.3.1, elasticsearch2.3.1, kibana2.3.1
首先去ELK官网下载相应的压缩包
https://www.elastic.co/downloads
在webserver上安装logstash-agent
1.解压 tar -zxvf logstash2.3.1
2.检验安装是否成功 bin/logstash -e "input{stdin{}}output{stdout{}}"
,然后在终端输入hello,看看有没有内容返回