脚本宝典收集整理的这篇文章主要介绍了SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK@H_777_4@ +
Filebeat
。 话不多说,先看实现的效果图,绝不搞些浪费大家时间且没意义的东西。
ELK
作为分布式日志解决方案让人为之津津乐道,即使没有实践过也能耳熟,可见其火热程度。 Beats
作为数据采集器后来加入进来 Elastic 家族,ELK
正式更名为 Elastic Stack
。 在属于 ELK
的那个时代,数据采集是由 LOGstash
完成,还有比 Filebeat
更为强大的过滤处理能力,这样便不禁让人心生疑问,为什么还要引入 Filebeat
呢?是多此一举吗?先看下官方给 Beats
的解释:
轻量型,从源头采集,简单明了。
Beats 能够采集符合 Elastic Common Schema (ECS) 要求的数据,如果您希望拥有更加强大的处理能力,Beats 能够将数据转发至 Logstash 进行转换和解析。
其中重点的关键字从源头收集,更加轻量。
Logstash
拥有比 Filebeat
更为丰富的功能,但能力越大,背负的越多,意味着 Logstash
作为采集工具会比 Filebeat
占用更多的系统资源。其中有个依据Logstash
默认的堆内存大小是 1G,Filebeat
占用内存仅仅大概是 10M 左右。
Filebeat
会定时监听事先指定的日志文件,如果日志文件有变化,会将数据推送至 Logstash
,经过 Logstash
过滤筛选处理将我们想要的日志数据存入ElasticSeArch
,最终通过 Kibana
将数据呈现出来。
实战环境这里我使用 有来商城 线上云服务器做的,因服务器资源有限所以做了堆内存保守的设置,大家可以用虚拟机测试。
💻服务器 | 配置 | 开放端口 | 说明 | 内存 |
---|---|---|---|---|
e.youlai.tech | 1核2G | 5044 ,5601, 9200 | ELK部署服务器 | ELK+IK分词器实际占用1.4G |
f.youlai.tech | 1核2G | SPRingBoot 应用端口 | Filebeat + SpringBoot 应用部署服务器 | 300M± |
保证同一网络下的容器 (ElasticSearch、Logstash、Kibana)相互访问。
创建自定义网络elk
docker network create elk
查看已有网络
docker network ls
Docker自带3种网络模式 bridge、host、none
Docker 自定义网络模式
删除已有网络
docker network rm elk
mkdir -p /opt/elasticsearch/{config,data}
chmod 777 /opt/elasticsearch/{config,data}
拉取镜像
Docker Hub 镜像仓库查看 Elastic Search 最新版本
docker pull elasticsearch:7.14.1
配置文件
创建配置文件elasticsearch.yML
vi /opt/elasticsearch/config/elasticsearch.yml
添加配置信息
# 允许通过本机所有IP访问
http.host: 0.0.0.0
# 是否支持跨域,默认为false
http.cors.enabled: true
http.cors.allow-origin: "*"
创建和启动容器
docker run -d --name elasticsearch --net elk --restart always
-p 9200:9200 -p 9300:9300
-e "ES_JAVA_OPTS=-XMs256m -Xmx256m"
-e "discovery.tyPE=single-node"
-v /opt/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data
elasticsearch:7.14.1
JVM堆内存大小设置 128M 时,安装 IK 分词器的时候会报错,建议堆内存设置至少 256M。
安装IK分词器
访问 https://gIThub.COM/medcl/elasticsearch-analysis-ik/releases 查找与 ElasticSearch 版本对应的分词器,复制其完整下载地址。
docker exec -it elasticsearch /bin/sh
cd bin/
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.1/elasticsearch-analysis-ik-7.14.1.zip
查看已安装的IK分词器
elasticsearch-plugin list
重启 ElasticSearch
docker restart elasticsearch
删除分词器
elasticsearch-plugin remove analysis-ik
拉取镜像
Docker Hub 镜像仓库查看 Kibana 最新版本
docker pull kibana:7.14.1
创建和启动容器
docker run -d --name kibana --net elk --restart always -p 5601:5601 kibana:7.14.1
访问 http://d.youlai.tech:5601 ,可以看到Kibana界面
拉取镜像
Docker Hub 镜像仓库查看 Logstash 最新版本
docker pull logstash:7.14.1
创建目录
mkdir -p /opt/logstash/{config,data,pipeline}
chmod 777 /opt/logstash/{config,data,pipeline}
配置文件
设置JVM堆内存大小
vi /opt/logstash/config/jvm.options
添加配置信息
-Xmx128m
-Xms128m
Logstash配置
vi /opt/logstash/config/logstash.yml
添加配置信息
# 允许通过本机所有IP访问
http.host: "0.0.0.0"
# 指定使用管道ID
xpack.management.pipeline.id: ["main"]
管道ID和配置文件路径映射
vi /opt/logstash/config/pipelines.yml
添加管道ID和管道配置文件目录映射,注意符号 - 前后都要有空格(巨坑)
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline"
管道配置
添加 有来商城
微服务应用日志管道配置,在上面指定了管道配置容器目录 /usr/share/logstash/pipeline
, 后面启动 Logstash
时会将其挂载至宿主机目录 /opt/logstash/pipeline
,接下来只要在宿主机目录下添加管道配置文件 youlai-log.config
就可以被 Logstash
自动加载生效。
vi /opt/logstash/pipeline/youlai-log.config
添加完整内容如下
input {
beats {
port => 5044
client_inactivity_timeout => 36000
}
}
filter {
mutate {
remove_field => ["@version"]
remove_field => ["tags"]
}
}
output {
if [appname] == "youlai-admin" {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "youlai-admin-log"
}
}else if [appname] == "youlai-auth" {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "youlai-auth-log"
}
}
stdout {}
}
可以看到在 output
里根据 appname
生成的不同索引库,其中 appname
是 filebeat
自定义字段,目的区分多应用日志,自定义字段在 Filebeat
部署的时候定义。
创建和启动容器
docker run -d --name logstash --net elk --restart always
-p 5044:5044 -p 9600:9600
-v /opt/logstash/config:/usr/share/logstash/config
-v /opt/logstash/data:/usr/share/logstash/data
-v /opt/logstash/pipeline:/usr/share/logstash/pipeline
logstash:7.14.1
拉取镜像
Docker Hub 镜像仓库查看 Filebeat 版本
docker pull elastic/filebeat:7.14.1
目录创建
mkdir -p /opt/filebeat/config
chmod 777 /opt/filebeat/config
配置文件
添加 filebeat.yml
配置文件
vi /opt/filebeat/config/filebeat.yml
添加如下配置:
filebeat.inputs:
- type: log
enabled: true
paths:
- /logs/youlai-admin/log.log
fields:
appname: youlai-admin # 自定义字段,提供给 Logstash 用于区分日志来源
fields_under_root: true # 开启自定义字段
- type: log
enabled: true
paths:
- /logs/youlai-auth/log.log
fields:
appname: youlai-auth
fields_under_root: true
processors:
- drop_fields:
fields: ["log","input","host","agent","ecs"] # 过滤不需要的字段
output.logstash:
hosts: ['47.104.214.204:5044']
youlai-admin
输出的日志文件路径容器创建和启动
docker run -d --name filebeat --restart=always
--log-driver json-file
--log-opt max-size=100m
--log-opt max-file=2
-v /logs:/logs
-v /opt/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml
elastic/filebeat:7.14.1
在文章 IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用 中已经详细讲述 youlai-admin
服务是如何部署到线上云环境,接下来补充日志配置。
日志配置
在 youlai-mall 的日志公共模块 common-log
下的 logback-spring.xml 配置日志输出路径
指定生产环境输出至文件
日志打印
方便测试,在用户登录成功之后获取用户信息接口打印日志
日志目录挂载
在 Run/Debug Configurations
配置 Dockerfile
时在 IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用 基础上添加 Docker 容器日志目录 /VAR/log/youlai-admin
挂载至宿主机。
目录挂载配置如下, 宿主机 /var/log/youlai-admin
←→ 容器 /var/log/youlai-admin
,点击 OK
保存
SpringBoot 应用部署
选择 Dockerfile 配置然后点击 Run ▶️ 等待应用发布到云服务器
等待应用发布完成后,访问 有来商城 线上管理端 www.youlai.tech 登录后查看应用服务器日志文件 /logs/youlai-admin/log.log
查看日志
查看 Logstash
处理日志
docker logs logstash
访问 http://d.youlai.tech:5601 进入 Kibana
控制台,首先添加索引模式,才能进行数据探索(Discover),不过前提是存在数据也就是索引库。
添加索引模式,Management → Stack Management → Kibana → Index Patterns → Create Index pattern
输入匹配已存在的索引的规则,点击 Next step
选择时间字段,点击 Create index pattern
然后左侧栏点击 Analytics
→ Discover
进行数据搜索
本篇完整的讲述使用 Docker
搭建 ELK
+ Filebeat
环境,通过轻量级日志采集工具 Filebeat
来收集微服务应用日志,并将日志数据推送给Logstash
,经过 Logstash
的过滤处理后将数据存入ElasticSearch
,最终日志数据通过 Kibana
呈现。其实ELK + Filebeat
日志解决方案足够应对大多数的应用场景,但是考虑到 Logstash
的吞吐量存在瓶颈且收集多个 filebeat
采集过来的日志并做过滤处理,短时间如果有过多的日志会产生日志堆积和数据丢失,严重消耗服务器的资源,针对此问题目前最常见的解决方案是在 Filebeat
和 Logstash
引入消息队列 (Kafka、redis )进行消峰,让 Logstash
能够稳定匀速的处理日志,引入消息队列在本篇因为时间就没在本篇做说明了,会在后面的文章补充,如需要可以在网上搜索相关资料做整合,相信基于本篇实战基础之上,实现应该不难,希望大家都有所收获。
项目名称 | 码云(Gitee) | Github |
---|---|---|
微服务后台 | youlai-mall | youlai-mall |
系统管理前端 | youlai-mall-admin | youlai-mall-admin |
微信小程序 | youlai-mall-weapp | youlai-mall-weapp |
微信交流群只能通过邀请方式进入,如果项目中遇到什么问题或者想进入交流群学习的朋友请添加开发人员后由其拉进群,备注“有来”即可。
【有来小店】微信小程序体验码 | 进群加我,备注“有来”即可 |
---|---|
以上是脚本宝典为你收集整理的SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践全部内容,希望文章能够帮你解决SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。