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的地址

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上看到。

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

相关推荐
ningqw2 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友2 小时前
vi编辑器命令常用操作整理(持续更新)
后端
胡gh3 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
一只叫煤球的猫4 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
uzong4 小时前
技术人如何对客做好沟通(上篇)
后端
颜如玉4 小时前
Redis scan高位进位加法机制浅析
redis·后端·开源
Moment5 小时前
毕业一年了,分享一下我的四个开源项目!😊😊😊
前端·后端·开源
why技术5 小时前
在我眼里,这就是天才般的算法!
后端·面试
绝无仅有5 小时前
Jenkins+docker 微服务实现自动化部署安装和部署过程
后端·面试·github
程序视点5 小时前
Escrcpy 3.0投屏控制软件使用教程:无线/有线连接+虚拟显示功能详解
前端·后端