SpringBoot整合ELK日志收集

首先下载ELK,官网:https://www.elastic.co/cn/
小编这里下载的7.16.1版本,注意,elasticsearch、logstash、kibana的版本要一致,否则可能报错。

需要提前安装JDK1.8。

启动顺序为:Logstash >= Elasticsearch > Kibana

1. Elasticsearch
# 解压
tar -zxvf elasticsearch-7.16.1-linux-x86_64.tar.gz
# 切换目录
cd elasticsearch-7.16.1/

修改配置文件 config/elasticsearch.yml

node.name: node-1
network.host: 192.168.12.128
http.port: 9200
cluster.initial_master_nodes: ["node-1"]

启动es:

# ./bin/elasticsearch -d 加-d后台运行
./bin/elasticsearch

注:若启动时报错不允许root用户启动、权限不足、内存大小与默认配置等问题,请查阅小编的上一篇文章:https://blog.csdn.net/RookiexiaoMu_a/article/details/122023471

启动成功,访问192.168.37.189:9200
在这里插入图片描述

2. Logstash
# 解压
tar -zxvf logstash-7.16.1-linux-x86_64.tar.gz
# 切换目录
cd logstash-7.16.1/

修改配置文件 config/logstash.yml,在最后追加:

http.host: "192.168.12.128"

在logstash-7.16.1目录下编辑文件:

vi logstash.conf

输入以下内容:

input {
  tcp {
    #模式选择为server
    mode => "server"
    #ip和端口根据自己情况填写,端口默认4560,对应下文logback.xml里appender中的destination
    host => "192.168.12.128"
    port => 4560
    #格式json
    codec => json_lines
  }
}
filter {
  #过滤器,根据需要填写
}
output {
  elasticsearch {
    action => "index"
    #这里是es的地址,多个es要写成数组的形式
    hosts => "192.168.12.128:9200"
    #用于kibana过滤,可以填项目名称
    index => "api_log"
  }
}

在logstash-7.16.1目录下使用命令启动:

./bin/logstash -f logstash.conf

访问http://192.168.12.128:9600,成功的话会显示一个JSON串
在这里插入图片描述

3. Kibana
# 解压
tar -zxvf kibana-7.16.1-linux-x86_64.tar.gz
# 切换目录
cd kibana-7.16.1-linux-x86_64/

修改配置文件 config/kibana.yml

server.port: 5601
server.host: "0.0.0.0"
# 原默认是30000(30s),酌情修改,也可使用默认
elasticsearch.requestTimeout: 60000
#修改为es的地址【.url的方式会报错】
#elasticsearch.url: http://192.168.12.128:9200
elasticsearch.hosts: ["http://192.168.12.128:9200/"]

elasticsearch.url的方式会报错:
FATAL Error: [elasticsearch.url]: definition for this key is missing

进入kibana-7.16.1-linux-x86_64目录启动:

# 非后台启动
./bin/kibana --allow-root
# 后台启动
nohub ./bin/kibana --allow-root &

kibana也不能使用root用户启动,可以创建一个新用户给予权限启动,也可在启动命令后追加 --allow-root

启动成功访问页面:http://192.168.12.128:5601
在这里插入图片描述

3. SpringBoot项目接入ELK日志收集
3.1 新建一个SpringBoot项目,其中一个UserController.java内容如下:
package com.xiaomu.problem.controller;

import com.xiaomu.problem.entity.UserA;
import com.xiaomu.problem.entity.UserB;
import com.xiaomu.problem.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * 用户
 *
 * @author xiaomu
 * @date 2021/12/11 14:04
 */
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
    
    

    @Autowired
    private UserService userService;

    @GetMapping("/test1/{userId}")
    public String test1(@PathVariable Long userId) {
    
    
        UserA user = userService.getUserInfo(userId);
        log.warn("UserController.test1 userId:{}, user:{}", userId, user.toString());
        return "SUCCESS";
    }
}

其中User重写了toString方法。

3.2 logback-spring.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!--
    scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
    canPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<!--<configuration scan="true" scanPeriod="60 seconds" debug="false"></configuration>-->
<configuration debug="false">

    <!-- springProperty标签来引用yml的值 -->
    <springProperty scope="context" name="log.path" source="spring.application.name"/>

    <!--
        property标签:配置直接管理属性 我们可以直接改属性的value 格式:${name}
    -->
    <property name="FILE_LOG_PATTERN" value="logs/${log.path}-log"/>
    <!--
        日志输出格式:
        %-5level
        %d{yyyy-MM-dd HH:mm:ss.SSS}日期
        %c类的完整名称
        %M为method
        %L为行号
        %thread线程名称
        %m或者%msg为信息
        %n换行
    -->
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level∶级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %-5level %msg%n"/>

    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.12.128:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <!-- root logger配置 -->
    <!-- 日志等级:OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL【OFF:关闭日志】 -->
    <root level="INFO">
        <appender-ref ref="stash"/>
    </root>

</configuration>

3.3 启动项目访问项目

在这里插入图片描述
返回SUCCESS,说明成功!

5. Kibana查看日志

根据步骤走:
在这里插入图片描述
创建索引:
在这里插入图片描述
这里的name小编实际是填写的api_log*
因为name不能重复,为了演示所以填写的是api*
在这里插入图片描述
创建完成之后,点击Discover
在这里插入图片描述
在这里插入图片描述
接下来我们试试搜索日志,输入:WARN
在这里插入图片描述
可以看到日志内容,正是程序中打印的日志。

猜你喜欢

转载自blog.csdn.net/RookiexiaoMu_a/article/details/122027613