举个小栗子🌰SpringCloud集成Elastic Stack

1,205 阅读6分钟

前言-碎碎叨叨

刚了解Elastic Stack 可能有的同学可能有点蒙,ELK耳熟能详啊,Elastic Stack是个啥。

虽然是N年前就早已推出来的产品,但是目前来讲还是比较主流的解决方案,笔者继续以《举个小栗子🌰》系列(其实才第二篇)的方式和没接触过的同学入个门。

ELK,大家都知道是一套日志收集以及展示的解决方案

毕竟服务多了,节点多了,查个日志总不能挨个机器找吧。还真别说,我有个朋友以前就经历过,找一个bug敲碎了键盘的dockerlog加上从来都很可怜的空格

是不是你自己

这个朋友是我本人没错了。

回到正文

Elastic Stack和ELK什么关系?

笔者分析了一圈官网,起因大概是ElasticSearch官方新推出个产品线-Beats,与ELK集成效果更佳,非要把L(Logstash)篡位了呢,也不是不行。

这官方起名这步难住了,也寻思半天,ELKB是不是太长了,哪天再来几个产品,这帮软件工程师该背不下来了。

这就有点像十年前面试:

你java用什么框架?
ssh呗

仨字母搞定。
到了今天,项目使用技术越来越多,很多人都会改称为java相关技术栈

所以,类似这个原因一样,Elastic Stack这个高大上的名就诞生了。
ps:故事情节为笔者个人推测,没有官方证据😊

Beats又是什么?

同事老王:Beats我贼熟啊,上下班天天戴!
没错,官方就是希望你使用ELK的时候戴个耳机,会更专心的查bug。

当然不是和Beats出联名款耳机了。

Elastic中的Beats,官方定义为轻量型数据采集器Beats不是一个产品,是指一类产品,比如:

  • Filebeat - 实时日志查看
  • Packetbeat - 网络数据包分析
  • Winlogbeat - windows平台事件日志分析
  • Heartbeat - 关于心跳检测的基础设施
  • ....

目前大概有八个种类的Beats,每一种都专门对应一项设施,非常人性化。
看来这个B,还是很厉害的,值得改一次名。

正文

开启今天的正文,本文是《举个小栗子🌰》系列之一,接下来就用个小栗子演示一下SpringCloud与ELKB Elastic Stack的集成。

目标:本地启动SpringCloud工程,通过FileBeats(也就是其中一个Beats之一,主打日志收集功能)向ELK发送日志,观察负载在两个节点的同一个接口日志情况。

笔者手头的工程注册中心是Nacos,但是代码太多了,演示略显复杂,所以还是建个超级简单的工程吧。

有多简单呢,就这么简单:

  • eureka
  • gateway
  • producer-v
  • producer-t

两个producer服务代码是一样的,负载提供服务。

环境就这样,下面Demo开始~

ELK搭建

讲道理,应该是ELK展示搭建在一台Server,FileBeats因为要收集日志,所以和业务工程放在一个Server。 笔者也尝试了一下在我的资源匮乏的服务器上跑ELK,结果不出所料....

把敲碎的dockerlog粘上又打了一遍,还被机器训了,说我太low:

还是都在本地跑吧。

首先Dockerhub有已经集成好的ELK组合的仓库, 非常方便,直接使用即可,比如笔者使用docker-compose的话,直接本地新建一个文件,文件名一般就叫docker-compose.yml。

elk:
  image: sebp/elk
  ports:
    - "5601:5601"
    - "9200:9200"
    - "5044:5044"

把镜像名和对应端口指定好,就可以愉快的docker-compose up elk

ps:这里不用docker手动安装的话,的确会稍稍麻烦,要注意处理好依赖的配置。

容器启动完成后,可以先尝试访问kibana,笔者本地对应的就是localhost:5601/,看到欢迎界面,没错就是启动完成了。

这个界面欢迎你是客套一下,其实就想问你同不同意帮助改进😊,如果你看英文不习惯,可以进入容器中找到config/kibana.yml增加一行国际化配置即可:

i18n.locale: "zh-CN"

如果你的服务半天都没有启动好,不妨也查查日志,是不是和笔者一样“太low”了😂。

FileBeats安装

FileBeats的安装相对简单,只需要去官网下载页面下载对应平台的版本即可,当然了,也可以选择docker运行。

不同平台对应不同的安装方式,官网有对应的说明,大部分直接解压即可。

安装完成后,打开主要配置文件filebeat.yml, 文件比较重要的配置有两块:

  • input
  • output

这个就好理解了,日志从哪来的,到哪去的,都配置好它,就会从业务服务传送到日志服务中了。

  • Input的简单配置:

将type为log的开关打开,并且修改日志path为要扫描的路径。

yml写法的横线(-)大家都知道是数组元素的意思,所以path是支持多个的。

  • output的简单配置:

因为logstash我还想用,所以output是到logstash上的,需要把上面输出到elasticsearch的配置注释掉,并且将下方关于logstash的注释打开。

ip和端口对应的就是笔者环境的logstash,笔者的环境上面也说了,服务器说我太low,所以我就都搭到本地了。

配置完成后,按照官方文档写好的各个平台启动方式,启动即可。

对了,笔者本次是简单测试,所以SSL没有配置,需要把容器里logstash配置文件的SSL开启状态注释掉:

否则可能会报错哦,反正我是报错了

测试

环境杂七杂八都差不多了,启动SpringCloud套餐,准备测试,笔者的两个Producer都提供了一样的接口,如下:

传入名称,一个返回V Application前缀,一个返回T Application前缀。
负载策略是随机

好!下面就来调戏一下我们的接口,笔者分别改了几个参数请求了几次:

http://localhost:8888/producer/demo?name=哥
http://localhost:8888/producer/demo?name=大哥
http://localhost:8888/producer/demo?name=二哥
http://localhost:8888/producer/demo?name=三个
http://localhost:8888/producer/demo?name=四哥
http://localhost:8888/producer/demo

请求结果分别负载到了不同的接口,现在就去Kibana看看日志是不是成果输出了?

回到Kibana,笔者已经加好了国际化的配置,并且重启完成,一进来便是首页。

功能齐全,如果你还没有配好日志输入进来,也可以使用系统中提供的测试数据熟悉系统。

按照计划我们进入Logs模块:

可以看到,从空的列表,已经被我们服务的日志填满, 搜搜看刚才的参数,看看是不是能很快找到笔者的日志。

那么笔者就搜一下“来啦”两个字,看看响应速度和展示结果如何。

搜索速度非常快,不愧是Elasticsearch的基本功!

日志结果也可以看到,我们命中不同服务的日志记录也都找到了。

总结

本次的小demo省略了非常多的配置,只是为了呈现一个最基本的,从服务端点到日志端点的一个传输流程。

没有用过Elastic Stack的同学,是不是也大概了解了Elastic Stack是什么,以及如何整合到我们的工程中了呢😊?