当前位置: 首页 > news >正文

SpringBoot集成ELK

一,ELK了解

Elastic官网  Elastic Docs | Elastic Docs

中文社区 搜索客,搜索人自己的社区

ELK = Elasticsearch + Logstash + Kibana

现在比较流行的日志平台,还有一种是EFK(Elasticsearch + Filebeat+ Kibana)

Elasticsearch 是一个基于 Lucene 的、支持全文索引的分布式存储和索引引擎,主要负责将日志索引并存储起来,方便业务方检索查询。

Logstash是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。

Kibana是一个可视化工具,主要负责查询 Elasticsearch 的数据并以可视化的方式展现给业务方,比如各类饼图、直方图、区域图等。

基于对日志的实时分析,可以随时掌握服务的运行状况、统计 PV/UV、发现异常流量、分析用户行为、查看热门站内搜索关键词等。

二,ELK安装

1,安装docker

(1)安装依赖 yum install -y yum-utils

(2)设置镜像库,阿里或者docker官方都可以,或者两个都设置

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

(3)安装docker

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

(4)启动docker

systemctl start docker

(5)查看启动状态

systemctl status docker

(6)设置开机启动

systemctl enable docker

(7)查看版本

docker -v

(8)查看信息

docker info

(9)开启路由转发,docker是通过虚拟交换机来进行通讯的,需要开启路由转发的功能

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

(10)让配置立刻生效

sysctl -p

2,安装docker-compose

(1)下载

wget https://github.com/docker/compose/releases/download/v2.39.2/docker-compose-linux-x86_64

(2)修改名称,移动到/usr/local/bin目录

mv docker-compose-linux-x86_64 docker-compose

cp docker-compose /usr/local/bin/docker-compose

(3)修改权限

sudo chmod +x /usr/local/bin/docker-compose

(4)验证

docker-compose --version

(5)后台启动指定docker-compose配置文件

docker-compose -f <文件路径> up -d

3,通过docker-compose安装elasticsearch, logstash, kibana

(1)elk-docker-compose.yml

注意版本号必须一致

version: '3'
services:
   elasticsearch:
      image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
      container_name: elasticsearch
      environment:
         #设置集群名称为elasticsearch
         - "cluster.name=elasticsearch"
         #以单一节点模式启动
         - "discovery.type=single-node"
         #设置使用jvm内存大小
         - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
         - TZ=Asia/Shanghai
      volumes:
         #插件文件挂载
         - /home/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
         #数据文件挂载
         - /home/elk/elasticsearch/data:/usr/share/elasticsearch/data
      ports:
         - 9200:9200
         - 9300:9300
   kibana:
      image: docker.elastic.co/kibana/kibana:7.12.1
      container_name: kibana
      links:
         #可以用es这个域名访问elasticsearch服务
         - elasticsearch:es
      depends_on:
         #kibana在elasticsearch启动之后再启动
         - elasticsearch
      environment:
         #设置访问elasticsearch的地址
         - "elasticsearch.hosts=http://es:9200"
         - TZ=Asia/Shanghai
      ports:
         - 5601:5601
      restart: always
   logstash:
      image: docker.elastic.co/logstash/logstash:7.12.1
      container_name: logstash
      environment:
         - TZ=Asia/Shanghai
      volumes:
         #挂载logstash的配置文件
         - /home/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
      depends_on:
         #kibana在elasticsearch启动之后再启动
         - elasticsearch
      links:
         #可以用es这个域名访问elasticsearch服务
         - elasticsearch:es
      ports:
         - 9600:9600
         - 5044:5044
      restart: always

(2)在运行之前先准备一下logstash.conf文件,并放到正确的目录下(/home/elk/logstash)

input{
  tcp {
      mode => "server"
      host => "0.0.0.0"
      port => 5044
      codec => json_lines
      tags => ["logstash"]
  }
}
filter{
  json{
      source => "message"
      remove_field => ["message"]
  }
}
output{
  elasticsearch{
          hosts=> ["es:9200"]
          index => "logstash-%{+YYYY.MM.dd}"
          }
  stdout{codec => rubydebug}
}

(3)我这边先创建了/home/elk/elasticsearch,/home/elk/elasticsearch/data, /home/elk/logstash等目录,需要给/home/elk/elasticsearch授权

cd /home/elk/

chmod 777 -R elasticsearch

(4) 通过docker-compose启动

docker-compose -f elk-docker-compose.yml up -d

第一次启动的时候需要pull镜像下来,会需要一段时间

(5) 查看运行状态

docker ps -a

如果都是up就是成功了,这里如果显示Elasticsearch exited的话,原因可能是内存不足或者权限不够。

完成之后各个组件的地址如下:
Elasticsearch: http://服务器IP:9200/  可以通过web查看elasticsearch状态
Kibana: http://服务器IP:5601/   后面用来查询日志的平台
Logstash: http://服务器IP:5044/   这个不能通过web访问,是用来后面集成到数据源的,比如SpringBoot项目

4, 扩充知识点

(1)安装logstash插件

# 查看有哪些docker container

docker container ls

# 进入logstash容器

docker exec -it logstash bash

# 进入的bin目录

cd /bin

# 安装logstash-codec-json_lines插件

logstash-plugin install logstash-codec-json_lines

# 退出,重启

exit
docker restart logstash

(2)拉取镜像

如果分别安装的话,用下面命令分别拉取镜像,后面版本需要一致
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.12.1
docker pull docker.elastic.co/kibana/kibana:7.12.1
docker pull docker.elastic.co/logstash/logstash:7.12.1

(3)docker常用命令

(1)查看 Docker 版本

docker version

(2)查看 Docker 系统信息

docker info

(3)列出本地镜像

docker images

(4)列出运行中的容器

docker ps

(5)列出所有容器

docker ps -a

(6)拉取镜像

docker pull <镜像名>

(7)运行容器

docker run <镜像名>

(8)停止容器

docker stop <容器ID>

(9)删除容器

docker rm <容器ID>

(10)删除镜像

docker rmi <镜像ID>

(11)创建网络

docker network create -d bridge elk

(12)查看网络

docker network ls

(13)搜索Elasticsearch镜像

docker search elasticsearch

(14)下载镜像elasticsearch:7.12.1

docker pull elasticsearch:7.12.1

(15)运行Elasticsearch

docker run -d --name elasticsearch --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1

(16)进入容器查看配置文件路径

docker exec -it elasticsearch /bin/bas

三,SpringBoot集成

下面以log4j2日志框架为例

1,pom文件引入logstash-gelf

<dependency><groupId>biz.paluch.logging</groupId><artifactId>logstash-gelf</artifactId><version>1.11.1</version>
</dependency>

2,log4j2.xml文件加入appender

<appenders>

这里也可以加入其他的日志配置

<Gelf name="logstash" host="tcp:你安装ELK的服务器IP" port="5044" version="1.1" ignoreExceptions="true"extractStackTrace="true" filterStackTrace="true"><Field name="timestamp" value="%d{yyyy-MM-dd HH:mm:ss.SSS}"/><Field name="level" value="%level"/><Field name="host" value="%host"/></Gelf>
</appenders>
<loggers><root level="INFO">这里也可以加入其他的配置<AppenderRef ref="logstash"/></root>
</loggers>

3,正常打日志即可

四,体验

打开Kibana网址 http://你的服务器IP:5601/, 打开discover目录

第一次会让你创建index,你可以创建一个logstash-*的, 因为前面在安装的时候配置文件里的索引就是logstash-%{+YYYY.MM.dd}。

因为日志是异步写入的,可能有一些延迟,请求之后过几秒才能在Kibana上看到。

其他的大家自己去探索吧。

http://www.dtcms.com/a/343896.html

相关文章:

  • 【Dubbo】高性能的 RPC
  • 零基础从头教学Linux(Day 18)
  • Slither 审计自己写的智能合约
  • 《R for Data Science (2e)》免费中文翻译 (第5章) --- Data tidying
  • 园区 “一表多属” 电仪表能碳数据归集与编码实施文档
  • 《LINUX系统编程》笔记p3
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记与代码示例:XILINX UART控制器详解:特性与功能
  • 新手向:计算机视觉入门OpenCV实战项目
  • elasticsearch 7.x elasticsearch 使用scroll滚动查询一页,删除一页,影响后面滚动的查询吗
  • 【LeetCode热题100道笔记+动画】最大子数组和
  • 任务同步和锁
  • 基于django/python的服装销售系统平台/服装购物系统/基于django/python的服装商城
  • sqli-labs通关笔记-第61关 GET字符型报错注入(单引号双括号闭合 限制5次探测机会)
  • 基于Django的学校实验室预约管理系统/基于python的实验室管理系统的设计与实现#python#django#FLASK
  • JAVA基础-java虚拟机
  • uniapp googlepay支付 内购项目
  • 豆包AI PPT与秒出PPT对比评测:谁更适合你?
  • 计算机毕设选题推荐 基于Spark的家庭能源消耗智能分析与可视化系统 基于机器学习的家庭能源消耗预测与可视化系统源码
  • Python办公之Excel(openpyxl)、PPT(python-pptx)、Word(python-docx)
  • 2026年计算机毕设推荐:基于大数据的慢性肾病数据可视化分析系统技术选型指南【Hadoop、spark、python】
  • 使用PPT进行科研绘图过程中常用的快捷键
  • 日志logging学习(1)
  • Gemini 2.5 Flash-Lite与 DeepSeek-V3 深度对比:谁在性价比上更胜一筹?
  • 【typenum】 21 类型级别计算最大公约数(Gcd)
  • map和set的使⽤
  • 52 C++ 现代C++编程艺术1-禁止隐式转换关键字explicit
  • Qt中用于图像缩放的核⼼⽅法QPixmap::scaled
  • 编写Linux下设备驱动时两种方案:内核态驱动开发和用户态驱动开发
  • --- 使用OpenFeign来优雅的对服务进行调用 ---
  • vue2怎么修改el-table样式