SpringBoot集成ELFK(一)

414 阅读3分钟

公司需要搭建一套满足多服务查询的日志系统,正好尝试下ELK的搭建,本文主要讲的是docker环境下的ELK部署以及基础测试。真实环境中可能还会有Redis,kafka进行数据处理的缓冲。

更新

有关下面安装过程中的容器网络互通问题,单纯查询docker inspect 的ip是不行的,因为容器的ip在每次启动后都会发生改变,解决方法移步这边

一、安装ELK

前提:docker-ce环境

安装elasticsearch

版本问题可以去dockerhub中找比较新的版本,这里我采用的是7.17.22版本

image.png

  1. 拉取ElasticSearch
[root@VM-4-4-opencloudos config]# docker pull elasticsearch:7.17.22

拉取速度太慢以及连接超时问题, 进入/etc/docker 目录下,检查是否有daemon.json,没有的话加入一下配置后重启docker

{
   "registry-mirrors": [
   "https://mirror.ccs.tencentyun.com"  //这是腾讯云的国内加速地址,貌似只有腾讯云能用,也可以用其他的国内镜像
  ]
}

2.挂载elasticsearch配置

mkdir -p /data/elasticsearch/{plugins,data,logs,config}
docker cp elasticsearch:/usr/share/elasticsearch/config /data/elasticsearch 
docker cp elasticsearch:/usr/share/elasticsearch/logs /data/elasticsearch 
docker cp elasticsearch:/usr/share/elasticsearch/data /data/elasticsearch 
docker cp elasticsearch:/usr/share/elasticsearch/plugins /data/elasticsearch

3.修改config/elasticsearch.yml配置

cluster.name: "docker-cluster"
network.host: 0.0.0.0

http.cors.allow-origin: "*"
http.cors.enabled: true
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type


4.启动elasticsearch

docker run -d --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.17.22 

安装kibana可视化

老样子

docker pull kibana:7.17.22

docker run -d --name kibana -p 5601:5601 kibana:7.17.22
mkdir -p /data/kibana
docker cp kibana:/usr/share/kibana/config /data/kibana/

修改kibana配置文件,

# Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://172.17.0.2:9200" ]  #更改为容器内的es ip
monitoring.ui.container.elasticsearch.enabled: true

重新启动

docker rm <contrainer-id>
docker run -d --name kibana -p 5601:5601 -v /data/kibana/config:/usr/share/kibana/config kibana:7.17.22

这时候我们访问ip:5601就可以访问到页面了

image.png

安装Logstash

docker pull logstash:7.17.22 

docker run -d --name logstash -p 4560:4560 logstash:7.17.22

mkdir -r /data/logstash

docker cp logstash:/usr/share/logstash/config /data/logstash/
docker cp logstash:/usr/share/logstash/pipeline /data/logstash/

修改pipeline 下的配置文件

input {
  beats {
    port => 5044
  }
}

output {

  elasticsearch {
  hosts => "ESIP:9200" #更改为自己的IP
  index => "logstash-%{+YYYY.MM.dd}"  # 创建的ES的索引,可以配合spring.application.name或其他参数进行更改
}
  stdout {
    codec => rubydebug
  }
}

再更改config下的logstash.yml,配置好ES的ip 启动

docker run -d --name logstash \
-p 4560:4560 
-v /data/logstash/config:/usr/share/logstash/config \
-v /data/logstash/pipeline:/usr/share/logstash/pipeline logstash:7.17.22 

安装filebeat

docker pull elastic/filebeat:7.17.22

docker run -d --name filebeat elastic/filebeat:7.17.22 

docker cp filebeat:/usr/share/filebeat /data/

chmod 777 /data/filebeat/data/meta.json //文件权限放开,不然启动报错

修改filebeat下的配置文件filebeat.yml

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~

    #output.elasticsearch:
    #hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
    #username: '${ELASTICSEARCH_USERNAME:}'
    #password: '${ELASTICSEARCH_PASSWORD:}'
  
filebeat.inputs:   //控制filebeat读取的日志路径
- type: log
  enabled: true
  paths:
    - /data/logs/**.log

output.logstash:    
  hosts: ["logstashIp:5044"]  //这里跟之前的pipeline下的logstash.yml中的beats port一致,作为输入源

docker rm <container_id>

 docker run -d --name filebeat \ 
 --user=root \
 -v /data/filebeat:/user/share/filebeat \
 -v /data/logs:/data/logs \
 elastic/filebeat:7.17.22 

这里有个注意的,需要把服务器部署的项目的日志打印位置挂载到容器中,这样才能日志才能扫描到

image.png

容器启动后我们可以docker logs -f 容器名 来动态观察容器日志

image.png

这样就说明扫描到了输入源,会从指定目录中读取log日志

image.png kibana界面中也可以看到已经有了这个索引,我们之后只要创建索引就可以了。

Springboot方面

image.png

注意这里输出日志要和filebeat中的位置相同 image.png

后续准备再学习分享下日志的过滤、多服务的聚合以及增加kafka围绕项目为主的全局链路追踪的配置