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上看到。
其他的大家自己去探索吧。