【三】实战:SpringBoot与ElasticSearch完美融合,WebFlux响应式编程实现
【其三】使用Filebeat解析你的SpringBoot日志到Elasticsearch
1. 前言
这是最后一部分,内容是使用Filebeat解析你的SpringBoot日志到Elasticsearch,并且能在Kibana上对你产生的日志进行分析。
前两节内容的部分你可以在如下地址找到:
可能你会有疑问,为什么不使用logstash呢?
确实Filebeat和Logstash都是Elastic Stack中用于收集、解析和发送日志数据的工具,但是对于个人开发者来说,Filebeat比Logstash轻量级很多,而且配置也简单不少,只要一个yml配置即可指定日志文件,然后docker容器一拉起来就完成了。日志数据分析什么的,其实现在还没有这么多精力去折腾,需求只是把不同服务器的日志同步到一个ES中,这样可以方便在Kibana上一次性看到不同服务器不同应用和API的日志,而不用一个个ssh连接上去,cd到指定目录,等待less命令滚动好一会儿才到最新的日志。
2. Filebeat介绍
首先放一下Filebeat的官方文档,这是大多数信息的来源。Filebeat Reference
Filebeat是一个轻量级、高效的工具,Filebeat的主要目标是从各种数据源(如日志文件、系统日志、应用程序输出等)收集日志数据,并将其传输到Elasticsearch或Logstash等目标存储或处理系统。
是的Filebeat也可以搭配logstash使用,所以后续有升级再安排logstash也不迟。
3. Filebeat使用
在使用前,我们要做的第一件事就是,找到日志的位置,如果你是根据前两节博客看过来的,那么在项目**demo-springboot-elasticsearch** 中,log会生成的路径配置logback.xml
中
默认是会生成到当前项目的目录下,所以你需要记录一下日志目录的绝对路径,这个等待会用到。
3.1 准备http_ca.crt和filebeat.yml配置文件
知道日志路径了,那么我们可以开始准备安装Filebeat了,这里依然是采取docker 部署的方案。
http_ca.crt
不知道你是否还有印象,在新版的ES中,需要通过这个建立SSL连接,这里也是需要的。你可以再从ES容器中复制一个出来,如下命令会把http_ca.crt
直接复制到当前目录。
docker cp elasticsearch:/usr/share/elasticsearch/config/certs/http_ca.crt .
接着我们直接下载一个filebeat.yml的模板文件
curl -L -O https://raw.githubusercontent.com/elastic/beats/8.9/deploy/docker/filebeat.docker.yml
下载比较慢的同学可以直接用下面这个内容,也是一样的
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
processors:
- add_cloud_metadata: ~
output.elasticsearch:
hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
username: '${ELASTICSEARCH_USERNAME:}'
password: '${ELASTICSEARCH_PASSWORD:}'
然后我们对这个模板文 件改改,改成根据你的环境改成如下样子:
#这个不用变,这个是filebeat内置了一些模块可以帮我们解析日志,比如nginx之类的,
#这里我们springboot日志不通过这个解析
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
#日志文件输入到filebeat的来源
filebeat.inputs:
- type: filestream
enabled: true
id: demo-springboot-elasticsearch
paths:
- /share/Develop/dockerData/runnable-run/demo-springboot-elasticsearch/logs/*.log
pipeline: springboot_pipeline
tags: ["demo-springboot-elasticsearch"]
processors:
- add_cloud_metadata: ~
#filebeat输出的配置,是你的ES配置
output.elasticsearch:
hosts: ['https://ip:9200']
username: 'elastic'
password: 'password'
ssl:
enabled: true
#http_ca.crt
certificate_authorities: "/usr/share/filebeat/http_ca.crt"
setup.kibana:
host: "ip:5601"
username: "elastic"
password: "password"
indices:
- index: "demo-springboot-elasticsearch"
when.contains:
tags: "demo-springboot-elasticsearch"
上面一些配置的说明:
type: filestream
这个类型有挺多,不够在这里我们需要让filebeat读取的是.log文件,所以使用filestream即可id: demo-springboot-elasticsearch
:指定一个唯一的ID,用于标识这个输入配置。paths
:指定要监控的日志文件的路径。/share/Develop/dockerData/runnable-run/demo-springboot-elasticsearch/logs/*.log
:这里使用通配符*
匹配指定目录下所有以.log
为后缀的日志文件。Filebeat将监控这些文件中的日志数据。
pipeline: springboot_pipeline
这个说的是日志推送到ES之后,需要ES用哪个pipeline
解析日志,等等我们会说到这个。tags: ["demo-springboot-elasticsearch"]
为从这个输入源收集的所有日志事件添加一个标签(tag)。这个标签可以帮助您在后续的处理中识别特定的日志数据来源。output.elasticsearch
:这部分指定了Filebeat将日志数据发送到Elasticsearch的配置。hosts: ['https://ip:9200']
:指定Elasticsearch集群的主机地址和端口。在这里使用https协议进行安全连接。username: 'elastic'