springboot整合ELK快速搭建日志管理系统

一、 ELK简介

ELK是Elastic公司的三个组件,三个组件共同配合实现日志收集。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

二、 ELK环境安装

1. Logstash(Windows)

1.1下载logstash
https://www.elastic.co/downloads/logstash
1.2解压logstash的zip压缩包
springboot整合ELK快速搭建日志管理系统_第1张图片
1.3进入bin目录,新建文件logstash_default.conf

input {
     
  stdin{
     }
}
output {
     
  stdout{
     }
}

1.4在bin目录下新建文件run_default.bat
1.5 cmd控制台启动logstash
logstash -f logstash_default.conf
springboot整合ELK快速搭建日志管理系统_第2张图片
1.6在浏览器访问http://localhost:9600/
springboot整合ELK快速搭建日志管理系统_第3张图片
成功启动logstash

2. ElasticSearch(Windows)

安装elasticsearch7.6和elasticsearch
2.1下载安装elasticsearch
https://www.elastic.co/cn/downloads/elasticsearch
2.2解压es的压缩包
进入bin目录,双击elasticsearch.bat脚本,es便开始安装
springboot整合ELK快速搭建日志管理系统_第4张图片
2.3打开浏览器,访问http://localhost:9200/
springboot整合ELK快速搭建日志管理系统_第5张图片
成功启动elasticsearch
2.4安装ElasticSearch5.6.8 Head插件
2.4.1安装nodejs
从https://nodejs.org/en/download/下载msi走安装流程。
在这里插入图片描述
2.4.2安装grunt
grunt是一种构建工具,类似于Maven,可以进行打包压缩、测试、执行等等的工作.

head插件就是通过grunt启动的,因此需要安装grunt.
#切换到E:\Node下.

npm install -g grunt-cli

#-g代表全局安装.
2.4.3把head插件从GitHub上clone下来

git clone git://github.com/mobz/elasticsearch-head.git

在这里插入图片描述
2.4.4通过elasticsearch.bat启动,访问http://localhost:9100/
springboot整合ELK快速搭建日志管理系统_第6张图片

3. Kibana(Windows)

3.1点击kibana官网下载,https://www.elastic.co/downloads/kibana
kibana的版本和elasticsearch的版本和必须一致.
3.2进入kibana的bin目录,双击kibana.bat
springboot整合ELK快速搭建日志管理系统_第7张图片

3.3访问 http://localhost:5601

三、 配置logstash

1. 创建logstash.conf配置文件
在bin目录下创建logstash.conf,文件内容为:

input {
     
  tcp {
     
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
     
  elasticsearch {
     
    hosts => "localhost:9200"
    index => "springboot-logstash-%{+YYYY.MM.dd}"
  }
}

2. 启动logstash
logstash -f logstash.conf
springboot整合ELK快速搭建日志管理系统_第8张图片

四、 springBoot整合logstash

1. 添加依赖
Pom文件中引入下列依赖

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>9.0.31</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>

2. 创建logback-spring.xml文件
新建一个logback-spring.xml文件,配置logback日志信息,注意这里配置的destination属性,输出的要和logstash配置的对应上,不然收集不上,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <springProperty scope="context" name="appName" source="spring.application.name"/>
    <!-- 日志在工程中的输出位置 -->
    <property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${appName}"/>
    <!-- 控制台的日志输出样式 -->
    <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <!-- 日志输出编码 -->
        <encoder>
            <pattern>${
     CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>
    <!--logstash配置-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>127.0.0.1:4560</destination>
        <!-- 日志输出编码 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
     
                        "logLevel": "%level",
                        "serviceName": "${springAppName:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "rest": "%message"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
        <!--<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>-->
    </appender>
    <root level="INFO">
        <appender-ref ref="LOGSTASH"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

3. 创建controller类

package com.skz.boot.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author Rockey
 * @description controller测试类
 * @date 2020/3/4  9:41
 */
@Slf4j
@RestController
public class LogController {
     
    @GetMapping("/test")
    public String showLog() {
     
        log.info("日志测试。ELK简单实现日志收集");
        return "helloWorld";
    }
}

4. 创建启动类

package com.skz.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @author Rockey
 * @description 启动类
 * @date 2020/3/3  15:20
 */
@SpringBootApplication
public class LogApplication {
     
    public static void main(String[] args) {
     
        SpringApplication.run(LogApplication.class, args);
    }
}

运行启动类,启动服务
5. 完整项目结构
springboot整合ELK快速搭建日志管理系统_第9张图片
6. 测试
6.1在浏览器中执行test请求
springboot整合ELK快速搭建日志管理系统_第10张图片
6.2kibana中查看索引
打开kibana管理页面,添加刚刚创建的索引:
将springboot-logstash-2020.03.4放入输入框,点击next step
springboot整合ELK快速搭建日志管理系统_第11张图片
接下来在浏览器多次访问刚刚在项目中输出日志的方法,查询控制台,如下所示
springboot整合ELK快速搭建日志管理系统_第12张图片
然后在进入kibana查看(点击左侧导航栏第一个标签),可以看到不光是日志内容,还有自定义的属性也显示出来了.
springboot整合ELK快速搭建日志管理系统_第13张图片
至此,我们在SpringBoot中整合了ELK实现日志的收集。

你可能感兴趣的:(spring,boot)