栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Springboot整合ELFK(docker安装部署ELFK)

Springboot整合ELFK(docker安装部署ELFK)

Springboot整合ELFK(docker安装部署ELFK) 前言:日志对于一个程序的重要程度不用多说,正好之前部署了一套分布式日志解决方案(通过查阅大佬教程做此记录分享^ v ^) - ELFK(Elasticsearch+Logstash+FileBeat+Kibana)

简单流程:Filebeat 会定时监听事先指定的日志文件,如果日志文件有变化,会将数据推送至 Logstash,Logstash通过配置进行过滤筛选存入es,最终通过 Kibana 将数据呈现出来。

一. 环境准备
准备服务器:目前使用linux centos搭建docker(docker环境搭建可查阅相关教程)
二.自定义网络:保证同一网络下的容器 (ElasticSearch、Logstash、Kibana)相互访问
  1. 创建自定义网络elk
docker network create elk
  1. 查看已有网络(Docker自带3种网络模式 bridge、host、none)
docker network ls

三. ELFK部署 - ElasticSerach+ik分词器 部署
  1. 创建目录并设置目录777权限
mkdir -p /opt/elasticsearch/{config,data}
chmod 777 /opt/elasticsearch/{config,data}
  1. 拉取镜像
    ElasticSearch7以上版本需要JDK11支持,但是我们系统安装的是JDK8(请自行匹配es版本)
docker pull elasticsearch:7.14.1
  1. 配置文件
vi /opt/elasticsearch/config/elasticsearch.yml
  1. 配置信息
# 允许通过本机所有IP访问
http.host: 0.0.0.0
# 是否支持跨域,默认为false
http.cors.enabled: true 
http.cors.allow-origin: "*" 
# elasticsearch 7版本以上的默认只允许1000个分片,可能会报分片不足的问题
cluster.max_shards_per_node: 10000
  1. 创建和启动容器
docker run -d --name elasticsearch --net elk --restart always 
-p 9200:9200 -p 9300:9300  
-e "ES_JAVA_OPTS=-Xms3g -Xmx3g" 
-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堆内存大小建议设置大一点,不然可能会报错,建议堆内存设置至少 256M以上。

  • 安装IK分词器
    复制对应es版本的ik分词器完整下载地址—下载链接
  • 容器下载安装
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

  • 重启es生效
docker restart elasticsearch
- Kibana部署
  • 拉取对应es版本的kibana镜像
docker pull kibana:7.14.1
  • 创建和启动容器
docker run -d --name kibana --net elk --restart always 
-p 5601:5601 
-e "I18N_LOCALE=zh-CN"  
kibana:7.14.1
-e 汉化启动
-p 指定端口号
  • 访问 http://ip:5601,显示kibana界面
- Logstash 部署
  • 拉取对应es版本的Logstash镜像
docker pull logstash:7.14.1
  • 创建目录并设置目录777权限
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"
  • 管道配置
vi /opt/logstash/pipeline/logstash-log.conf
input {
 beats {
    port => 5044
    client_inactivity_timeout => 36000
  }
}
filter {

  grok {
                match =>{
                        "message"=>"(?({.*}))"
                }
        }

  grok {
                match =>{
                        "message"=>"%{TIMESTAMP_ISO8601:logTime}"
                }
        }

  grok {
                match =>{
                        "message"=>"%{LOGLEVEL:logLevel}"
                }
        }


  grok {
                match => {
                        "message"=>"(?(?<="userId":)(d+))"
                }
        }

        # 设置东八区时间
  ruby {
                code => "event.set('logstashTime', event.get('@timestamp').time.localtime + 8*60*60);
                        event.set('@timestamp', event.get('logstashTime'))"
        }
 mutate {
	  remove_field => ["@version"]
      remove_field => ["tags"]
	 }
}

output {
  if [appname] == "admin-server" {
     elasticsearch {
       hosts => ["http://es-ip:9200"]
       index => "saas-admin-log"
     }
  }else if [appname] == "auth-server" {
     elasticsearch {
       hosts => ["http://es-ip:9200"]
       index => "saas-auth-log"
     }
  }else if [appname] == "biz-server" {
     elasticsearch {
       hosts => ["http://es-ip:9200"]
       index => "saas-biz-log"
     }
  }
  stdout { codec => rubydebug }
}

可以看到在 output 里根据 appname 生成的不同索引库,其中 appname 是 filebeat 自定义字段,目的区分多应用日志,自定义字段在 Filebeat部署的时候定义(es-ip:es部署服务的ip地址或域名)。

  • 创建和启动容器
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 部署
  • 拉取对应es版本的Filebeat镜像
docker pull elastic/filebeat:7.14.1
  • 创建目录并设置目录777权限
mkdir -p /opt/filebeat/config
chmod 777 /opt/filebeat/config
  • 配置文件
vi /opt/filebeat/config/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /logs/admin-server/log.log
  fields:
    appname: admin-server  # 自定义字段,提供给 Logstash 用于区分日志来源
  fields_under_root: true  # 开启自定义字段
- type: log
  enabled: true
  paths:
  - /logs/auth-server/log.log
  fields:
    appname: auth-server
  fields_under_root: true
- type: log
  enabled: true
  paths:
  - /logs/biz-server/log.log
  fields:
    appname: biz-server
  fields_under_root: true

processors:
  - drop_fields:
      fields: ["log","input","host","agent","ecs"] # 过滤不需要的字段

output.logstash:
  hosts: ['ipxxxx:5044']

/logs/admin-server/log.log 是应用 admin服务 输出的日志文件路径
ipxxxx 是部署 Logstash 服务器的IP地址

  • 容器创建和启动
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部署日志 - 配置日志模块

在SpringBoot项目日志公共模块中加入如下日志配置









    logback

    
    

    
    
    
    
    
    

    
    
        
        
            DEBUG
    
        
            ${CONSOLE_LOG_PATTERN}
            
            UTF-8
        
    

    
    
        
        ${LOG_HOME}/log.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} -%5level ---[%15.15thread] %-40.40logger{39} : %msg%n%n
            UTF-8 
        
        
        
            ${LOG_HOME}/%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
            INFO
            ACCEPT
            DENY
        
    

    
    
    
    
         
        
            
        
    

    
    
        
            
            
        
    


项目本地启动,接口添加log打印(log.info(xxxx);)项目日志,会在本地根目录生成日志文件夹

然后将项目发布到线上,因为项目使用idea集成docker远程部署(可以查询相关资料进行部署),所以先添加Docker容器日志目录挂载宿主机

然后启动发布到服务器上

五. 查询日志

查看 Logstash 处理日志

docker logs logstash

然后再Kibana中查找索引进行日志管理





ok!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/670920.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号