为Spring Cloud微服务系统添加ELK+logback可视化日志分析管理工具
一、问题起源
微服务架构中,除了Spring Cloud所需的组件,如网关、Eureka注册中心、配置中心等,还有大量经过业务拆分生成的微服务节点。如何有效地收集汇总各个微服务节点的日志,对于应对微服务架构的复杂性有很大的帮助。
一个良好的微服务日志中心需具备方便查询、可视化展示等特点。
二、技术调研
为此我们进行了深入的技术调研,研究了ElasticSearch、Logstash、Kibana等工具,并结合Docker容器化部署,决定采用logback中添加可视化分析工具,结合ELK对日志可视化展开工作。
Logback这个工具的appender视图如下:
![23507dcd99dd61da3c7761a38560c76c.png](https://i-blog.csdnimg.cn/blog_migrate/7329a1e21db513ad481000e2d5b4362e.jpeg)
进行了异步的日志记录,DBAppender基于数据库的日志记录
而ELK的日志分析套装图如下:
![550aae8048fce1cf0e57000663263047.png](https://i-blog.csdnimg.cn/blog_migrate/558d347308a4c3291fb1c24c7f2bd21b.jpeg)
三、实践之路
ElasticSearch
ElasticSearch是一个开源的分布式的搜索引擎,它负责存储数据,并且提供了许多灵活而实用的Rest API,所以,上层应用可以根据需要去查询数据,使用数据,分析数据。在日志中心,所有的日志数据都存储到ElasticSearch中,借助其强大的搜索能力,可以很灵活地查询日志。
Logstash
Logstash主要用于收集数据,并将数据保存到ElasticSearch中。
Logstash提供许多插件,易于扩展。Logstash收集到数据后,可以做很多处理,最终再将数据输出到ElasticSearch中。在日志中心,它主要负责采集应用的日志。
Kibana
Kibana主要负责读取ElasticSearch中的数据,并进行可视化展示。它还自带Tool,可以方便调用ElasticSearch的Rest API。在日志中心,我们通过Kibana查看日志。
四、环境工具
首先要搭建相关环境,没有采用Docker部署方式,采用了原生的安装方式
(1)官网下载elk安装包
(2)elk依赖java环境,下载jdk
4.1安装及更改配置
- 在cd /usr 创建目录 mkdir elk
- 由于root用户运行elasticsearch,因此创建一个用户组添加用户
gropuadd elk
useradd elk -g elk -p elk
cd /usr
chown -R elk:elk /elk(给elk用户赋权)
3.解压elasticsearch,配置yml
cd /usr/elk/elasticsearch/config
vi elasticsearch.yml
---------------------------------
注释放开:
node.name: dashan
network.host: 0.0.0.0
http.port: 9200
node.name: dashan
cluster.initial_master_nodes: ["dashan"]
4.切换elk用户 运行elasticsearch
su elk
sh elasticsearch &
5.解压kibana 修改配置文件(此处切回root用户: su root)
------------------------------------------------
cd /usr/elk/kibana/config
vi kibana.yml
----------------
server.port: 5601 (端口,后面要跟springboot项目匹配)
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"] (匹配elasticsearch路径)
kibana.index: ".kibana"
i18n.locale: "zh-CN"(国际化)
6.切换elk用户 运行kibana ,访问http://域名:5601
cd /usr/elk/kibana/bin
sh kibana &
![8d70a5e04803a74b51348f8a815ed8c7.png](https://i-blog.csdnimg.cn/blog_migrate/9e7c9c52d99e09e311ee30008a36964a.jpeg)
7.解压logstash 更改配置 启动(切回root)
cd /usr/elk/bin
在bin目录创建文件logstash1.conf,作为启动配置
------------------------------
input {
tcp {
port => 4560
mode => "server"
type => "tcplog"
codec => "json"
}
}
output {
elasticsearch {
action => "index" #The operation on ES
hosts => "localhost:9200" #ElasticSearch host, can be array.
index => "logstash-tcplog-sonhai-%{+YYYY.MM.dd}"
}
}
8.切换elk用户 启动项目
cd /usr/elk/logstash/bin
sh logstash -f logstash1.conf
五、Spring Boot项目加入日志可视化
在Spring Boot项目中添加项目依赖
![da78d04a53c19d7a51e4eb561bb3b7d1.png](https://i-blog.csdnimg.cn/blog_migrate/750fe3aef2be317a71627950d9c8b710.jpeg)
在resource目录下创建logback.xml
![5c27d5a6ce6f73976edf82d9e5b3de00.png](https://i-blog.csdnimg.cn/blog_migrate/3ed371275d61e6e345e8aaf90de15ca0.jpeg)
![9bd70e266f294c5b9cb3713e49e3d92b.png](https://i-blog.csdnimg.cn/blog_migrate/5d25a6e1dfd35533b6b5dd6de87e6aa3.jpeg)
![3227a8d91fca22296def05bd3bfafbec.png](https://i-blog.csdnimg.cn/blog_migrate/1dc81b1ebc7ef4d6c44287ec93d69b3b.jpeg)
![d82d56a4cf102c8a3a50eae88b807c59.png](https://i-blog.csdnimg.cn/blog_migrate/1fd6846d10bd450a84fd153c992f52ca.jpeg)
![5929b63d14034821828661fdc1a83f45.png](https://i-blog.csdnimg.cn/blog_migrate/0abc45a0319a6b78157ea692ab2cd089.jpeg)
配置说明:
192.168.1.3:4560
{"logstash-tcplog-dashan-%{+YYYY.MM.dd}":"dashanapp"}
中的 配置的即时远程的logstash域名及端口4560与logstash自定义的配置文件保持一致
作为索引的名称logstash-tcplog-dashan-%{+YYYY.MM.dd} 和上面配置保持一致,后面的值自定义,后面会展示到索引为logstash-tcplog-dashan-%{+YYYY.MM.dd}的后面
5.1编写Spring Boot接口
![55b9accff61160d647d0441bea968999.png](https://i-blog.csdnimg.cn/blog_migrate/1dd9c84bb6fe597c78b18e53ce1938d0.jpeg)
此时启动应用。通过postman向/test接口发送请求
登陆kibana,即可看到此时日志可以只展示host、service、log三部分内容,有效地减轻了我们使用微服务时日志查看时的工作量
![7e7df27f147f4285fafca3d71f0e5fbb.png](https://i-blog.csdnimg.cn/blog_migrate/fe80e9e5a31adfcc7d4e765019f5086c.jpeg)
![6ef89fa20d20be8a6247269ea1c9aaeb.png](https://i-blog.csdnimg.cn/blog_migrate/b032bf56ad9d50bee4045fc82192dacc.jpeg)
然后就能访问日志了,且可以通过日期字段等条件筛选展示
![a9bd757dfa35af2208967b027806e7d5.png](https://i-blog.csdnimg.cn/blog_migrate/757e142fa760ec32a510b4584d4381d5.jpeg)
六、总结
这样各微服务系统都能查看日志了