写作背景
前面我对SpringCloud Netflix相关的组件,Eureka、Ribbon、OpenFeign、Hystrix和Zuul都进行了复习,后面随着代码越写越多就想着,要不就慢慢完善这个项目代码,把工作里用到的东西慢慢在这个Demo级别的项目里用起来,也算是对自己掌握的知识的积累和一次练手的机会。
本次就是在原来的基础上增加了日志模块,我当前所在公司看日志一般都是在SpringBoot Admin里,然后也有集成过ELK,在kibana里看日志。本文的写作思路是直接在原来项目里集成ELK实战演练。
ELK实战
前置环境准备
1、本地安装elasticsearch 6.6版本并启动
安装elasticsearch比较简单,网上博客一大堆,包括后面的kibana和logstash我这里就不介绍了。我本地启动elasticsearch成功后访问如下地址
http://localhost:9200/
代表我本地elasticsearcha安装成功了。
2、本地安装kibana并启动
主要是config目录下的kibana.yml里几个配置有简单改动
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
#汉化
i18n.locale: "zh_CN"
3、本地安装logstash并启动
主要是config目录下我新建了一个my-logstash.yml配置文件,待会启动logstash指定我的这个配置,主要就是采集项目的日志路径里的日志文件信息,然后输出到es里去,然后日志索引名是logstash开头,每天一个索引
input {
file {
type => "log"
#这个地址是项目lockback里指定的日志路径
path => ["/app/logs/*/*.log"]
start_position => "end"
ignore_older => 0
codec=> multiline {
pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
negate => true
auto_flush_interval => 5
what => "previous"
}
}
beats {
port => 5044
}
}
output {
if [type] == "log" {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "logstash-%{+YYYY.MM}"
}
}
}
项目里集成Logstash
1、pom.xml里引入logstash坐标依赖
<!-- logback集成logstash -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.3</version>
</dependency>
2、logback日志文件里增加输出logstash的appender
<!--输出到logstash的appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
fc-gateway-zuul、fc-service-portal、还有fc-service-screen里都集成了elk,然后启动服务
进入Kibana查看日志
调几次接口产生一点日志,然后去kibana里http://localhost:5601查看日志
http://localhost:8000/portal/getPortByFeign
还是这个测试的接口
@GetMapping("/getPortByFeign")
public int getPortByFeign() throws InterruptedException {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
log.info("请求头的token参数值:{}", request.getHeader("token"));
//睡1s测试hystrix默认超时时间
Thread.sleep(1000);
return screenFeignClient.getPort();
}
第一次打开kibana会让你创建索引范例
其实下面你的索引logstash-2023.01索引已经看到了,你就随便定义一个然后选它,然后点下面这个discover就可以看到日志了