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

2023-10-31

一、 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压缩包

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
在这里插入图片描述
1.6在浏览器访问http://localhost:9600/
在这里插入图片描述
成功启动logstash

2. ElasticSearch(Windows)

安装elasticsearch7.6和elasticsearch
2.1下载安装elasticsearch
https://www.elastic.co/cn/downloads/elasticsearch
2.2解压es的压缩包
进入bin目录,双击elasticsearch.bat脚本,es便开始安装
在这里插入图片描述
2.3打开浏览器,访问http://localhost:9200/
在这里插入图片描述
成功启动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/
在这里插入图片描述

3. Kibana(Windows)

3.1点击kibana官网下载,https://www.elastic.co/downloads/kibana
kibana的版本和elasticsearch的版本和必须一致.
3.2进入kibana的bin目录,双击kibana.bat
在这里插入图片描述

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整合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. 完整项目结构
在这里插入图片描述
6. 测试
6.1在浏览器中执行test请求
在这里插入图片描述
6.2kibana中查看索引
打开kibana管理页面,添加刚刚创建的索引:
将springboot-logstash-2020.03.4放入输入框,点击next step
在这里插入图片描述
接下来在浏览器多次访问刚刚在项目中输出日志的方法,查询控制台,如下所示
在这里插入图片描述
然后在进入kibana查看(点击左侧导航栏第一个标签),可以看到不光是日志内容,还有自定义的属性也显示出来了.
在这里插入图片描述
至此,我们在SpringBoot中整合了ELK实现日志的收集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot整合ELK快速搭建日志管理系统 的相关文章

随机推荐

  • X86指令:NOP指令

    NOP指令的作用 通常NOP用于对齐指令的地址 NOP指令的特性 因为NOP是X86指令中最短的 只有1byte 处理器执行NOP指令时 不进行任何的操作 不会影响系统的状态 NOP也有其他的用途 1 编程时如果使用了支持lable标记的编
  • javascript函数相关例题

    前言 虽然for也能实现一些简单的 重复操作 但是 比较具有局限性 我们js 里面 也有非常多的相同代码 可能需要大量重复使用 此时我们可以利用函数 一 函数是什么 函数 就是 封装了 一段 可被重复调用执行的 代码块 可以实现大量代码的重
  • 删除git在windows上的凭证

    由于本人安装git的客户端以及开始下载github上的项目代码 第一次输入的账户名以及密码错误 需要删除windows上自己保存的账号密码凭证 我自己的电脑配置 运用命令行打开控制面板也十分方便 快捷键 Win R 打开运行窗口 输入 co
  • vs2010 使用QT

    首先不要使用中文目录 1 下载Qt的安装包和VS2010的Qt插件 2 安装Qt SDK 3 安装Qt的VS开发插件 4 编译Qt Qt默认使用mingw进行编译 如果要使用VS2010开发 需要将Qt重新编译 进入开始菜单Microsof
  • 在VS8里面 fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory

    fatal error C1083 无法打开包括文件
  • pointCloudLibrary点云库使用

    pointCloudLibrary点云库使用 准备 下载源码 https github com PointCloudLibrary pcl 这个是pointCloudLibrary 但不包括 Boost Eigen FLANN OpenNI
  • gdb调试子进程

    GDB 是 linux 系统上常用的调试工具 本文介绍了使用 GDB 调试多进程程序的几种方法 并对各种方法进行比较 GDB 是 linux 系统上常用的 c c 调试工具 功能十分强大 对于较为复杂的系统 比如多进程系统 如何使用 GDB
  • 「前端学习」vue入门-井字棋

    1 Vue 学习路线 2 使用 vue cli 创建 vue 项目 注意 vue cli 对应版本 2 1 创建项目 在当前目录下创建项目 vue create 注意 项目文件名不能由大写 2 2 配置 3 Vue 组件 不成问的规定 默认
  • CentOS 安装 Docker 和 DockerCompose,超详细

    0 安装Docker Docker 分为 CE 和 EE 两大版本 CE 即社区版 免费 支持周期 7 个月 EE 即企业版 强调安全 付费使用 支持周期 24 个月 Docker CE 分为 stable test 和 nightly 三
  • [885]Tensorflow设置CUDA_VISIBLE_DEVICES来控制GPU的使用

    os environ CUDA DEVICE ORDER PCI BUS ID 按照PCI BUS ID顺序从0开始排列GPU设备 os environ CUDA VISIBLE DEVICES 0 设置当前使用的GPU设备仅为0号设备 设
  • Java:关于Java中的线程中断的几种方法

    Java 关于Java中的线程中断的几种方法 1 使用线程的stop 来中断线程 2 使用线程的interrupt 来中断线程 3 通过共享变量来控制 使用线程的stop 来中断线程 这种方式是直接调用线程的stop 方法 可以直接让线程终
  • 子网地址,广播地址,子网掩码,主机地址范围,求法总结

    熟练转换 十进制 gt 二进制 如给出 主机数或者说划分多少个子网 这时候 我们用2的n次方 2 gt 主机数或子网数 求出n n表示子网位数 那么子网总数为 2的n次方 而一个字节8位 那么剩下8 n 位主机号 可得出 子网间隔为2的 8
  • NTP-时间同步,(Linux / Windows)服务端搭建到时间同步配置操作-直接拿下

    一 NTP服务器搭建跟同步配置 centos8 1 安装chrony服务 centos8系统版本自带 centos8以前的版本为ntpd服务 yum install chrony 2 启动服务 Systemctl start chronyd
  • MySQL——变量与游标

    今天我们来一起学习MySQL中 的变量 系统变量与用户变量 以及什么是游标 游标如何使用 1 变量 在 MySQL 数据库的存储过程和函数中 可以使用变量来存储查询或计算的中间结果数据 或者输出最终的结果数据 在 MySQL 数据库中 变量
  • 多线程的锁

    简介 1 失败后进行锁膨胀 偏向锁 gt 轻量锁 gt 重量锁 2 偏向锁 认为没有竞争 每次都是同一个线程获取的锁 所以第一次通过CAS后 把线程id放到锁对象Mark Word后 以后每次都不需要CAS操作 3 轻量级锁 认为没有竞争
  • jdbc驱动安装以及简单测试

    最近又需要写jdbc啦 正好顺便把下载配置教程整理一下 教程分三个部分 下载jdbc驱动 配置jdbc到项目 简单连接一下数据库 1 下载jdbc驱动 下载网址 https dev mysql com downloads connector
  • 菜鸟级的Git与GitHub使用总结

    前言 这几天一直在折腾学习Git和GitHub的使用 几天下来 在网上查阅了大量的资料 总算有一些成果 作为一个已经工作两年了的菜鸟程序员 现在才来学习使用Git及github 实在忏愧 网上某大神说的好 不会使用Git和github 根本
  • 史上最牛mysql-02 (MySQL的下载、安装、配置)

    2 MySQL的下载 安装 配置 个人博客 www xiaobeigua icu 2 1 MySQL的4大版本 MySQL Community Server 社区版本 开源免费 自由下载 但不提供官方技术支持 适用于大多数普通用户 MySQ
  • chrome 该文件可能已遭到删除、移动,或者文件权限不允许进行访问

    最新 我他妈的直接拖到浏览器里 貌似就好了 下边也操作过 不知道是否有影响 草草草草 创建MyChromeDevUserData的文件夹 打开终端 输入下面的命令 需要替换路径中的yourname open n Applications G
  • springboot整合ELK快速搭建日志管理系统

    一 ELK简介 ELK是Elastic公司的三个组件 三个组件共同配合实现日志收集 Elasticsearch是实时全文搜索和分析引擎 提供搜集 分析 存储数据三大功能 是一套开放REST和JAVA API等结构提供高效搜索功能 可扩展的分