ELK 日志框架搭建 (springboot 接入 elk)

news2025/1/11 0:04:22

什么是ELK?

ELK 是一个开源的实时日志分析平台,它主要由 Elasticsearch、Logstash 和 Kiabana 三部分组成。

Logstash

Logstash 主要用于收集日志,它是一个开源数据收集引擎,具有实时管道功能。Logstash 可以动态地将来自不同数据源的数据统一起来,并将数据标准化到您所选择的目的地。

Logstash 收集数据的过程主要分为以下三个部分:

  • 输入:数据(包含但不限于日志)往往都是以不同的形式、格式存储在不同的系统中,而 Logstash 支持从多种数据源中收集数据(File、Syslog、https://cloud.tencent.com/product/cdb?from=10680、消息https://cloud.tencent.com/product/tdmq?from=10680等等)。
  • 过滤器:实时解析和转换数据,识别已命名的字段以构建结构,并将它们转换成通用格式。
  • 输出:Elasticsearch 并非存储的唯一选择,Logstash 提供很多输出选择。

Elasticsearch

Elasticsearch (ES)是一个分布式的 Restful 风格的搜索和数据分析引擎,它具有以下特点:

  • 查询:允许执行和合并多种类型的搜索 — 结构化、非结构化、地理位置、度量指标 — 搜索方式随心而变。
  • 分析:Elasticsearch 聚合让您能够从大处着眼,探索数据的趋势和模式。
  • 速度:很快,可以做到亿万级的数据,毫秒级返回。
  • 可扩展性:可以在笔记本电脑上运行,也可以在承载了 PB 级数据的成百上千台服务器上运行。
  • 弹性:运行在一个分布式的环境中,从设计之初就考虑到了这一点。
  • 灵活性:具备多个案例场景。支持数字、文本、地理位置、结构化、非结构化,所有的数据类型都欢迎。

Kibana

Kibana 可以使海量数据通俗易懂。它很简单,基于浏览器的界面便于您快速创建和分享动态数据仪表板来追踪 Elasticsearch 的实时数据变化。其搭建过程也十分简单,您可以分分钟完成 Kibana 的安装并开始探索 Elasticsearch 的索引数据 — 没有代码、不需要额外的基础设施。
在 ELK 中,三大组件的大概工作流程如下图所示,由 Logstash 从各个服务中采集日志并存放至Elasticsearch 中,然后再由 Kiabana 从 Elasticsearch 中查询日志并展示给终端用户。

ELK的大致工作流程如下图所示:

在这里插入图片描述

ELK 安装部署

ES安装
logstash安装
kibana安装

简单 ELK 日志搭建

我们首先从简单的ELK日志框架开始搭建,简单的讲logstash中的数据输出到es中,然后再kibana进行展示。
首先我们需要再Logstash处进行相关的设置:

  • Logstash 基于插件开发和应用,包括输入、过滤器和输出三大类插件。输入插件指定了数据来源,过滤器插件则对数据做过滤清洗,而输出插件则指定了数据将被传输到哪里。在实际应用中,通常都是使用配置文件指定插件。

  • 配置文件的语法形式与命令行相同,要使用的插件是通过插件名称来指定。 例如,想要向 Elasticsearch 中发送数据,则应该使用名称为 elasticsearch 的输出插件。在Logstash 安装路径下的config目录中,有一个名为logstash-sample.conf 的文件,提供了配置插件的参考。
    在这里插入图片描述

  • 这个文件配置的输入插件为 beats,输出插件为 elasticsearch。复制这个文件并重命名为 logstash-es. conf (通过cp命令, 也可以直接创建空文件),下面通过修改这个文件配置一个从命令行提取输入,并传输到 Elasticsearch 的 Logstash 实例。
    按如下内容修改 logstash-es. conf 文件的输入输出插件:

input {
  stdin {
    
  }
}

output {
  elasticsearch {
    hosts => ["http://192.168.42.111:9200"]
    index => "mylogstash1"
    #user => "elastic"
    #password => "changeme"
  }
}

  • 在上面的配置中,easticsearch 输出插件中的 hosts 参数指定了 Elasticsearch 地址和端口,index 参数则指定了存储的索引。Elasticsearch 索引不需要预先创建,但要保证它启动的地址和端口与配置文件中的一致。按如下方式启动 Logstash:
./logstash -f ../config/logstash-es.conf
  • 其中,-f 参数后面指定了配置文件的路径。启动后如果没有异常,可在命令行窗口中输入"Hello world!" 等任意字符串,Logstash 将把输入内容提取到指定的 Elastiesearch 服务中。通过 Kibana 开发工具输入 GET _cat/indices, 可以 看到 mylogstash1 这个索引已经创建出来了。
    在这里插入图片描述
  • 输入GET /mylogstash1/_search,则返回结果为
    在这里插入图片描述
  • 通过上图可以看到,Elasticsearch 为输入创建了一个 mylogstash1 索引,在命令行输入的字符已经被索引,在返回结果的_ source 字段上可以看到文档内容。

Spring boot 集成 ELK

ELK 收集 Spring boot 项目中的日志信息其实很简单,我们只需要做如下几步即可:

Logstash 配置

首先我们要对 Logstash 进行相关配置,将 input 设置为 从服务上获取数据,然后将数据输出到ES中。(如果是在服务器上操作,记得开放端口号)
可以自行创建一个新配置文件,启动的时候指定就可以了。

./logstash -f ../config/logstash-es.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}"
  }
}

Spring boot 项目

  • 引入依赖

     <!--集成logstash-->
          <dependency>
              <groupId>net.logstash.logback</groupId>
              <artifactId>logstash-logback-encoder</artifactId>
              <version>5.3</version>
          </dependency>
    
  • 添加日志文件
    在资源文件夹下面创建日志文件:logback-spring.xml;配置的地址要和logstash配置的input相同。

<?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>

  • 接口创建
    创建一个接口输出日志用来测试;
@Slf4j
@RestController
public class TestController {
    @GetMapping("/test")
    public void test(){
        log.info("测试日志!");
    }
}

测试

首先分别将 logstash ,es,kibana 启动,然后启动spring boot 项目调用接口。(es 中的数据可能会有延时,稍等会)
接口调用之后,我们就可以到 kibana 界面查看了,我们首先需要创建 index pattern 这样才能查询数据:
在这里插入图片描述

最后在 discover 界面选择对应索引就可以查看数据了。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《大正野球娘》:棒球少女·棒球1号位

《大正野球娘。》是根据神乐坂淳的人气轻小说「大正棒球少女」及「大正棒球少女&#xff5e;沾满土与尘&#xff5e;」改编的电视动画。原作小说是神乐坂淳原作&#xff0c;小池定路插画的轻小说改德间书店出版&#xff0c;至2009年6月已发行三卷。此外&#xff0c;小说还被改编…

曙光超算平台如何使用以及常见问题

官方参考链接如下&#xff0c;有需要的自取&#xff1a; Notebook 计算服务 了解常用的E-shell命令 (1) squeue: 查看目前提交作业的信息 (2) salloc :抢占计算资源命令 salloc -p wzhdtest -N 1 -n 8 --gresdcu:1 &#xff08;部分地区有绑卡机制&#xff0c;比如乌镇&am…

PHP将PDF转图片-实战

Windows环境下 一、开启 Imagick 扩展 1、安装PHP扩展&#xff1a;Imagick&#xff0c;下载地址 https://pecl.php.net/package/imagick 注意和php版本保持一致&#xff1b; 2、将下载下来的文件解压&#xff0c;把php_imagick.dll复制到php/ext下&#xff0c;即php的扩展目…

【人脸识别】形态学教室人数统计(带面板)【含Matlab源码 1703期】

⛄一、人数统计简介&#xff08;附课程作业报告&#xff09; 1 课题背景 本课题为基于matlab的人数统计系统。近年来&#xff0c;很多行业对人流信息有极大的需求&#xff0c;如汽车公交站&#xff0c;地铁站台&#xff0c;商场出入口等。通过人数统计系统可以方便、可靠、实时…

5-6: Elasticsearch(入门安装)

Elasticsearch简介 一个分布式的&#xff08;多台服务器集群部署&#xff09;、Restful风格(设计风格&#xff0c;前后端交互的风格&#xff0c;请求标准的描述)的搜索引擎。支持对各种类型的数据的检索。搜索速度快&#xff0c;可以提供实时的搜索服务。便于水平扩展&#xf…

23.层和块

在构造自定义块之前&#xff0c;我们先回顾一下多层感知机 的代码。 下面的代码生成一个网络&#xff0c;其中包含一个具有256个单元和ReLU激活函数的全连接隐藏层&#xff0c; 然后是一个具有10个隐藏单元且不带激活函数的全连接输出层。 import torch from torch import nn …

是面试官放水,还是公司实在是太缺人?这都没挂,京东原来这么容易进...

“京东是大企业&#xff0c;是不是很难进去啊&#xff1f;”“在京东做软件测试&#xff0c;能得到很好的发展吗&#xff1f;一进去就有9.5K&#xff0c;其实也没有想的那么难”直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在字节和腾讯…

第04讲:Security之用户授权

一、创建项目 参考&#xff1a;浅试Security 二、实现用户授权 2.1、基于权限进行访问控制 hasAuthority方法&#xff1a;如果当前的主体具有指定的权限&#xff0c;则返回true&#xff0c;否则返回false。hasAnyAuthority方法&#xff1a;如果当前的主体有任何提供的权限的…

二叉树的前序-中序-后序遍历

在牛客网刷到了二叉树的遍历&#xff0c;二叉树的遍历分为前序遍历&#xff0c;前序遍历也有先序遍历之称&#xff0c;还有中序遍历&#xff0c;以及后序遍历&#xff0c;这么多种遍历&#xff0c;遍历的方式不一样而已&#xff0c;前序遍历是先遍历根然后左节点然后是右节点&a…

两年前端的2022:24岁、辗转三省、进入阿里

前言 前排声明&#xff1a;文中主人公不是博主&#xff0c;另外本文只是一些朋友在工作、生活上的经历和琐碎&#xff0c;想看技术干货的掘友请止步&#xff0c;不要在本文上浪费你的学习时间~~~ 2022年&#xff0c;也实实在在满24岁了&#xff0c;毕业进入社会两年多&#xff…

我与外企上司的四个职场故事

标题&#xff1a;我与外企上司的四个职场故事 我在目前这家任职的外企从事软件开发工作&#xff0c;已经整整十五年了。本系列文章通过介绍我与自己上司的四个职场小故事&#xff0c;想和大家分享在外企里&#xff0c;一个程序员除了埋头提升自己技术之外&#xff0c;还有哪些…

数据自动录入并生成报表神器怎么玩?

做报表、分析数据、做汇报是许多打工人的日常&#xff0c;每天都要耗费不少的时间用Excel来整理、清洗数据和生成好看的报表。如果这些数据都是手动整理、复制粘贴的话&#xff0c;不仅费时费力&#xff0c;而且很容易出错。 在越来越多企业采用SaaS产品和不同数据应用的今天&…

没有任何销售经验怎么进行销售团队管理?

没有任何销售经验想要进行销售团队管理&#xff0c;并不是一件容易的事情。每一行都有值得研究和学习的地方&#xff0c;需要学习补充的知识点还是比较多的。 参考《销售管理管理成长手册》&#xff0c;本文为您讲解以下管理知识&#xff0c;包括&#xff1a;1、明白销售经理是…

春招升级打怪拿offer,10w+字总结的Java面试题(附答案)够你刷

春招升级打怪拿offer&#xff0c;献上熬夜整理最新“10w字总结的Java面试题&#xff08;附答案&#xff09;”够你刷&#xff01; 其包含的内容模块有&#xff1a;基础、JVM、多线程与高并发、Spring、MyBatis、SpringBoot、MYSQL、SpringCloud、Dubbo、Nginx、MQ、数据结构与算…

libevent实战学习

目录 编译安装libevent libevent 事件对象 事件操作 事件循环 事件处理 libevent 客户端demo libevent 服务端demo libevent 服务端升级demo libevent完整demo 总结 C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 编译安装libevent git上下载h…

十分钟彻底搞懂python异常

异常 目标 异常的概念捕获异常异常的传递抛出异常 01. 异常的概念 程序在运行时&#xff0c;如果 Python 解释器 遇到 到一个错误&#xff0c;会停止程序的执行&#xff0c;并且提示一些错误信息&#xff0c;这就是 异常程序停止执行并且提示错误信息 这个动作&#xff0c;…

真无线耳机哪个品牌音质最好?半入耳式真无线蓝牙耳机推荐

对于社恐的人来说&#xff0c;出门在外都会选择佩戴上耳机&#xff0c;那么这种情况下&#xff0c;一款高品质的耳机真的是必不可少的&#xff0c;选择了一款性能优秀的耳机&#xff0c;不光能够让自己听音乐的过程中有更好的体验感&#xff0c;同时还能舒缓身心&#xff0c;让…

编程常见的问题(三) 线程池

编程常见的问题(三) 线程池 今天&#xff0c;我来讲讲使用线程池需要注意的一些问题。 在程序中&#xff0c;我们会用各种池化技术来缓存创建昂贵的对象&#xff0c;比如线程池、连接池、内存池。一般是预先创建一些对象放入池中&#xff0c;使用的时候直接取出使用&#xff…

[附源码]Node.js计算机毕业设计高校运动会管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

阿里三面,mmap 没答好!

1、mmap基础概念 mmap 是一种内存映射文件的方法&#xff0c;即将一个文件或者其他对象映射到进程的地址空间&#xff0c;实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一映射关系。 实现这样的映射关系后&#xff0c;进程就可以采用指针的方式读写操作这一段内存&a…