SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践
一. 前言
日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK
+Filebeat
。 话不多说,先看实现的效果图,绝不搞些浪费大家时间且没意义的东西。
二. Elastic Stask 技术栈
1. 为什么引入 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 左右。
2. ELK +Filebeat 日志解决方案流程
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 network rm elk
五. ELK 部署
1. Elastic Serach 部署
创建目录
mkdir -p /opt/elasticsearch/{config,data}
chmod 777 /opt/elasticsearch/{config,data}
拉取镜像
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
2. Kibana 安装
拉取镜像
docker pull kibana:7.14.1
创建和启动容器
docker run -d --name kibana --net elk --restart always -p 5601:5601 kibana:7.14.1
访问 www.youlai.tech:5601 ,可以看到Kibana界面
3. 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
六. 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']
- /logs/youlai-admin/log.log 是应用
youlai-admin
输出的日志文件路径 - 47.104.214.204 是部署 Logstash 服务器的IP地址
- /logs/youlai-admin/log.log 是应用
容器创建和启动
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
七. SpringBoot 应用部署和日志配置
在文章 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 ️ 等待应用发布到云服务器
八. ElasticSerarch 日志查询
等待应用发布完成后,访问 有来商城 线上管理端 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
能够稳定匀速的处理日志,引入消息队列在本篇因为时间就没在本篇做说明了,会在后面的文章补充,如需要可以在网上搜索相关资料做整合,相信基于本篇实战基础之上,实现应该不难,希望大家都有所收获。
附录
1. 开源项目
项目名称 | 码云(Gitee) | Github |
---|---|---|
微服务后台 | youlai-mall | youlai-mall |
系统管理前端 | youlai-mall-admin | youlai-mall-admin |
微信小程序 | youlai-mall-weapp | youlai-mall-weapp |
2. 联系信息
微信交流群只能通过邀请方式进入,如果项目中遇到什么问题或者想进入交流群学习的朋友请添加开发人员后由其拉进群,备注“有来”即可。
【有来小店】微信小程序体验码 | 进群加我,备注“有来”即可 |
---|---|
![]() |
![]() |
SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践的更多相关文章
- IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈项目有来商城云环境的部署方式
一. 前言 最近有些童鞋对开源微服务商城项目 youlai-mall 如何部署到线上环境以及项目中 的Dockerfile 文件有疑问,所以写了这篇文章做个答疑以及演示完整的微服务项目发布到线上的流程 ...
- AgileBoot - 手把手一步一步带你Run起全栈项目(SpringBoot+Vue3)
AgileBoot是笔者在业余时间基于ruoyi改造优化的前后端全栈项目. 关于AgileBoot的详细介绍:https://www.cnblogs.com/valarchie/p/16777336. ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- SpringBoot整合Flyway(数据库版本迁移工具)
简介 在团队开发当中,有可能每个人都是使用自己本地的数据库.当数据库的表或者字段更新时,往往需要告知团队的其他同事进行更新. Flyway数据库版本迁移工具,目的就是解决该问题而诞生的(我自己想的). ...
- SpringBoot微服务电商项目开发实战 --- 模块版本号统一管理及Redis集成实现
上一篇文章总结了基于SpringBoot实现分布式微服务下的统一配置.分环境部署配置.以及服务端模块的分离(每一个提供者就是一个独立的微服务).微服务落地.Dubbo整合及提供者.消费者的配置实现.本 ...
- SpringBoot微服务电商项目开发实战 --- Redis缓存雪崩、缓存穿透、缓存击穿防范
最近已经推出了好几篇SpringBoot+Dubbo+Redis+Kafka实现电商的文章,今天再次回到分布式微服务项目中来,在开始写今天的系列五文章之前,我先回顾下前面的内容. 系列(一):主要说了 ...
- springboot整合dubbo+zookeeper最新详细
引入 最近和小伙伴做一个比赛,处于开发阶段,因为涉及的服务比较多,且服务需要分开部署在不同的服务器上,讨论之后,打算采用分布式来做,之前学习springboot的时候,部分章节涉及到了springbo ...
- Springboot整合MongoDB(Eclipse版本)
IDEA版本其实也差不多的,大同小异 简单Demo地址: https://blog.csdn.net/shirukai/article/details/82152243 Springboot项目整合M ...
- SpringBoot微服务电商项目开发实战 --- Kafka集成接入
kafka作为消息中间件的一款产品,她比较轻量级,在吞吐量方面很优秀,默认消息持久化到硬盘当中 168小时=7天,log.retention.hours=168,比较适合来做运营的统计.其他的不多讲, ...
随机推荐
- Pytest+Allure 示例
0. 前言 简介 Allure 框架是一个灵活的.轻量级的.支持多语言的测试报告工具,它不仅以 Web 的方式展示了简介的测试结果,而且允许参与开发过程的每个人可以从日常执行的测试中,最大限度地提取有 ...
- 对象池在 .NET (Core)中的应用[2]: 设计篇
<编程篇>已经涉及到了对象池模型的大部分核心接口和类型.对象池模型其实是很简单的,不过其中有一些为了提升性能而刻意为之的实现细节倒是值得我们关注.总的来说,对象池模型由三个核心对象构成,它 ...
- NOIP 模拟 10 考试总结
T1 一道很妙的题,打暴力分也很多,但是考试的时候忘开 long long 了. 题解 T2 一道挺水的题,不过...(打挂了) 题解 T3 此题甚妙,转化真多,不过对思维是一个非常大的扩展 题解 考 ...
- 【软件工具】Git 使用总结
本地库就是由 对象 和 引用 构成的,或者叫 Repositories;下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 ...
- 1、二进制安装K8s 之 环境准备
二进制安装K8s 之 环境准备 1.系统&软件 序号 设备\系统 版本 1 宿主机 MacBook Pro 11.4 2 系统 Centos 7.8 3 虚拟机 Parallels Deskt ...
- wpf 中 theme 的使用 和 listview 模板的使用.
theme 文件 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio ...
- 使用javascript纯前端导出excel
前言(感谢技术的分享者) 参考博客地址 github地址 由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls.xlsx ...
- 战胜了所有对手,却输给了时代。MVVM--jQuery永远的痛。
前言 第二次浏览器战争中,随着以 Firefox 和 Opera 为首的 W3C 阵营与 IE 对抗程度的加剧,浏览器碎片化问题越来越严重,不同的浏览器执行不同的标准,对于开发人员来说这是一个恶梦.为 ...
- Java反射的浅显理解
一.回顾反射相关的知识 1.在xml文件中使用反射的好处: 1)代码更加灵活,后期维护只需要修改配置文件即可 · 初学者一般习惯于在代码本身上直接修改,后期也可以修改配置文件达到相同的目的 · 修改配 ...
- MySQL 5.7新特性介绍
本文是基于MySQL-5.7.7-rc版本,未来可能 还会发生更多变化. 1.即将删除的特性1.1.InnoDB monitoring features,详见:WL#7377(访问地址:http:// ...