srpingboot项目使用elk收集业务日志

srpingboot项目使用elk收集业务日志,第1张

srpingboot项目使用elk收集业务日志

本文采用的是Elasticsearch + Logstash + Kibana的形式来收集的日志
部署方式采用的是docker的形式来部署,所以必须安装docker,部署为单节点模式

1、Elasticsearch + Logstash + Kibana

在自己的工作目录下[~]创建一个elk目录

mkdir -p ~/elk
1.1、安装Elasticsearch

创建es的文件夹用来存放配置信息和数据

mkdir -p ~/elk/es
mkdir -p ~/elk/es/logs
mkdir -p ~/elk/es/data

复制容器中的内容elasticsearch.yml出来(可以使用docker cp的方法)

elasticsearch.yml写入下面信息

cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"

开启目录的读写权限

chmod 777 -R ~/elk/es

执行下面的命令启动es

docker run -d --name elasticsearch 
        -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" 
        -v ~/elk/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 
        -v ~/elk/es/data:/usr/share/elasticsearch/data 
        -v ~/elk/es/logs:/usr/share/elasticsearch/logs 
        elasticsearch:6.8.22

在浏览器输入:http://localhost:9200/,如看到下面信息则部署成功

{
  "name" : "2drCdwB",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "BFsPJv11S8GSu1nG5wv3WQ",
  "version" : {
    "number" : "6.8.22",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "71fcb50",
    "build_date" : "2021-12-19T01:10:56.497443Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.3",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
1.2、安装Logstash

搞明白,Logstash是读取一个日志文件然后输出到es的一个中间件,所有我们部署这中间件的目的是为了读取日志文件的,日志文件从哪里来,Logstash有提供多中方法,本文这里之介绍一种,tcp监听端口的形式,所以必须要有服务往这个端口里面写日志

需要有一个java服务来写日志,这里采用logback这个java的日志框架来写

准备一个springboot项目,pom文件中加入

		
            net.logstash.logback
            logstash-logback-encoder
            5.2
        

准备一个logback.xml文件放在resource目录下(下面我准备了一个写的比较全面的文件,可以保存使用,只要注意几个日志文件我输出的位置即可)




    
    
    
    

    
    
    
    
    

    
    


    
    

        
        
            ${DEV_FILE_PATH}${file.separator}${LOG_NAME}.log
            
                
                ${DEV_FILE_PATH}${file.separator}${LOG_NAME}-%d{yyyy-MM-dd}.%i.log
                
                7
                100MB
                20GB
            
            
                ${CONSOLE_LOG_PATTERN}
                UTF-8
            
        

        
            
                ${CONSOLE_LOG_PATTERN}
            
        

        
            10.152.178.5:5000
            
            1048576
            5 minutes
        
        
            
            
            
        
    

    
    
        
        
            ${TEST_FILE_PATH}${file.separator}${LOG_NAME}.log
            
                
                ${TEST_FILE_PATH}${file.separator}${LOG_NAME}-%d{yyyy-MM-dd}.%i.log
                
                7
                100MB
                20GB
            
            
                ${CONSOLE_LOG_PATTERN}
                UTF-8
            
        
        
            
                ${CONSOLE_LOG_PATTERN}
            
        
        
            
            
        
    

    
    
        
            ${PROD_FILE_PATH}${file.separator}${LOG_NAME}.log
            
                
                ${PROD_FILE_PATH}${file.separator}${LOG_NAME}-%d{yyyy-MM-dd}.%i.log
                
                7
                100MB
                20GB
            
            
                ${CONSOLE_LOG_PATTERN}
                UTF-8
            
        
        
            
        
    

注意appender name=“logstash” 这个地方,要和下面的logstash服务所监听的端口一致,ip要和logstash所在的ip一致哦

举个例子:

@RestController
public class Controller {

    Logger elkLogger = LoggerFactory.getLogger(Controller.class);
    
    @GetMapping("/logger")
    public Object getLogger() {
        Map map = new HashMap<>();
        map.put("application","logger");
        map.put("createTime",new Date());
        map.put("message","this is logger");
        elkLogger.info(JSON.toJSONString(map));
        return map;
    }
}

拉取logstash:6.8.22镜像

docker pull logstash:6.8.22

直接启动

docker run --name logstash -d logstash:6.8.22

复制容器内的文件到外面

docker cp logstash:/usr/share/logstash: ~/elk

编辑文件(注意es的地址)

vim ~/elk/logstash/config/logstash.yml

---- 
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://你es的ip地址:你es的端口" ]
path.config: /usr/share/logstash/config/conf.d/*.conf
path.logs: /usr/share/logstash/logs
----

创建读取与输出文件

mkdir -p ~/elk/logstash/config/conf.d
cd ~/elk/logstash/config/conf.d
touch syslog.conf
vim syslog.conf
----
input {
        tcp {
                port => 5000
                codec => json
        }
}
filter{
    json{
        source => "message"
        remove_field => ["message"]
    }
}
output {
        elasticsearch {
                hosts => "你es的地址加端口"
                index => "logstash-system-%{+YYYY.MM.dd}"
        }
        stdout{}
}

启动镜像(注意5000端口哦)

docker run -d  
        --name=logstash 
        -p 5000:5000 -p 5044:5044 
        -v ~/elk/logstash:/usr/share/logstash 
        logstash:6.8.22

调用上面写日志的接口,看控制台输出

1.3、安装kibana

创建目录和配置文件

mkdir ~/elk/kibana/config
cd ~/elk/kibana/config
touch kibana.yml
vim kibana.yml
---- 
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://你es的ip:你es的端口" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true

启动

docker run -d  
        --name=kibana 
        -p 5601:5601 
        -v ~/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml 
        kibana:6.8.22

访问 localhost:5601

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5701712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存