重学ElasticSearch (ES) :ELK搭建SpringBoot日志实时分析系统

news2024/11/19 17:29:51

一、概述

在一个大型的分布式架构的项目里,不同的服务模块部署在不同的服务器上,如果想要定位问题,可能需要去不同的服务器上查看不同服务的日志。

那么,ELK可以很方便的把日志集成到一起,无须再去各个服务器上的日志中定位问题。

1.1、什么是ELK

ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称(但是后期出现的filebeat(beats中的一种)可以用来替代logstash的数据收集功能,比较轻量级)。市面上也被称为 Elastic Stack。

1.1.1、Elasticsearch

是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。

1.1.2、Logstash

Logstash是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。Logstash能够动态地采集、转换和传输数据,不受格式或复杂度的影响。

  • Logstash架构

    Logstash由Input、Filter、Output三部分组成

    Input: 数据采集,可以是kafka、http、文件等

    Filter: 对数据进行过滤、处理

    Output:数据存储,可以是ElasticSearch、MongoDB等

     

  • logstash.conf pipeline文件

    跟其架构一致,分为Input、Filter、Output三个部分,用于处理数据

    input {
    
    }
    filter {
    
    }
    output {
    
    }
    
    

1.1.3、Kibana

Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。

1.2、ELK与日志收集

日志---> Logstash 采集日志数据 ---> ES存储 ---> Kibana集中查看

 

ELK是Elastic公司的三个组件,他们三个配合实现日志收集.

  • ElasticSearch:用于存储日志信息;
  • Logstash:用于收集、处理和转发日志信息;
  • Kibana:提供可视化的Web界面.

二、ELK安装

2.1、安装ElasticSearch、Kibana

关于ElasticSearch、Kibana的安装请参看重学ElasticSearch (ES) 系列(一):核心概念及安装

2.2、安装Logstash

这里我是用docker进行安装

  • 拉取镜像

    docker pull logstash:7.16.2
    
    
  • 创建目录文件

    mkdir -p /usr/local/logstash/config  /usr/local/logstash/pipeline/
    cd /usr/local
    chmod -R 777 logstash
    
    
  • 编写配置文件

    在logstash/config目录下编写配置文件

    • logstash/config/logstash.yml

      http.host: "0.0.0.0"
      xpack.monitoring.elasticsearch.hosts: [ "http://10.100.21.17:9200" ]
      
      
    • logstash/config/pipelines.yml

      - pipeline.id: logstash_test
         path.config: "/usr/share/logstash/pipeline/logstash_test.conf"
      
      

      📢:这里pipeline.id前面的 - ,前后都有空格,不然启动会报错的

  • 编写pipeline

    在logstash/pipeline目录下,编写处理数据的规则

    • logstash/pipeline/logstash.conf

      input {
        tcp {
          mode => "server"
          host => "0.0.0.0"
          port => 4560
          codec => json_lines
        }
      }
      filter {
        mutate {
          lowercase => [ "logger", "level" ]
        }
      }
      output {
        stdout { codec => rubydebug }
        elasticsearch {
          hosts => "192.168.132.1:9200"
          index => "logstash-test-%{+YYYY.MM.dd}"
        }
      }
      
      
  • 运行

docker run -d -it --restart=always --privileged=true --name=logstash -p 4560:4560 -p 9600:9600 -v /usr/local/logstash/pipeline/:/usr/share/logstash/pipeline/ -v /usr/local/logstash/config/:/usr/share/logstash/config/ logstash:7.16.2

三、ELK搜集SpringBoot日志

Log4j2生产日志---> Logstash 采集日志数据 ---> ES存储 ---> Kibana查看

3.1、SpringBoot项目配置

  • 引入依赖

    <!-- logstash-encoder -->
    <dependency>
      <groupId>net.logstash.logback</groupId>
      <artifactId>logstash-logback-encoder</artifactId>
      <version>5.3</version>
    </dependency>
    
    
  • spring配置文件

    logging:
      # 指定日志配置文件的位置
        config: classpath:config/logback-spring-test.xml
    
    
  • 日志配置文件

    这里的配置会让springboot与Logstash建立链接,将日志发送给Logstash

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
      <!-- 输出日志到logstash -->
      <appender name="logstashLog" class="net.logstash.logback.appender.LogstashTcpSocketAppender" ignoreExceptions="true">
        <destination>192.168.1.111:4560</destination>
        <encoder>
          <charset>UTF-8</charset>
          <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
        </encoder>
      </appender>
    
      <root level="INFO">
          <appender-ref ref="logstashLog"/>
        </root>
    </configuration>
    
    

Over,启动项目,即可!

3.2、Logstash配置

配置基本可以完全参考安装Logstash这一步

  • 编写处理日志的pipeline

    这里配置接收springboot项目发来的日志、处理日志、将日志存入ElasticSearch

    input {
      tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 4560
        codec => json_lines
      }
    }
    filter {
      mutate {
        lowercase => [ "logger", "level" ]
      }
    }
    output {
      stdout { codec => rubydebug }
      elasticsearch {
        hosts => "192.168.1.111:9200"
        index => "logstash-test-%{+YYYY.MM.dd}"
      }
    }
    
    

    📢:这里index设置为logstash-test-%{+YYYY.MM.dd},可以每天生成一个index,这样可以根据Index删除ES中旧的没用的日志

Over 启动Logstash,即可!

3.3、Kibana配置

  • 创建索引模式(Index Patterns)

    Ip:5601/app/management/kibana/indexPatterns

    因为我们生成的index是logstash-test-%{+YYYY.MM.dd},每日生成的日志存在不同的Index里面,所以需要配置通配符的Index,如下

     

  • 进入日志展示页面discover

    进入到discover就能看到你的日志啦

     

3.4、效果展示

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

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

相关文章

Python自带的常数scipy.constants

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】Python自带的常数scipy.constants[太阳]选择题以下python代码结果错误的一项是?from scipy import constants print(【圆周率constants.pi】,constants.pi)print(【时间单位constants.minute】…

[实例讲解]计算机处理任务的方法和原理--线程

[实例讲解]计算机处理任务的方法和原理 文章目录[实例讲解]计算机处理任务的方法和原理情景一 所有的事情自己做情景二 找人去帮忙处理打印情景三 分别找人处理编码和打印情景四 不特定指定人去帮忙结束语在学习和工作中&#xff0c;我们自己都需要做很多的事情&#xff0c;事情…

【机器学习】匈牙利和KM匹配个人理解

基础知识 二分图 【定义】图论中的一种特殊模型。若能将无向图G(V,E)的顶点V划分为两个交集为空的顶点集&#xff0c;并且任意边的两个端点都分属于两个集合&#xff0c;则称图G为一个为二分图。 【解释】一张图要是二分图&#xff0c;需要满足以下几个要求&#xff1a; &a…

PS 矩形选区工具(2)模式快捷键 选区比例调整 颜色填充

本文为PS 矩形选区工具(1)基本用法 生成图层 选区方式演示讲解的续文 拉出选区后 用鼠标拖动选区 是可以拖动选区位置的 拉出一块选区是 按住键盘 Shift键 就可以用鼠标再拖出一块选区 加选区快捷键 按住 Shift 减选区 按住键盘 Alt 键 用鼠标拖出不要的选区位置即可 减选…

新认定金山区企业技术中心给予一次性奖励15万元

金山区企业技术中心一、主管部门金山区经济委员会二、政策依据《金山区关于深化建设打响“上海制造”品牌的重要承载区促进实体经济高质量发展的若干政策》&#xff08;金府发〔2019〕8号&#xff09;《印发<关于深化建设打响“上海制造”品牌的重要承载区促进实体经济高质量…

衣服、商品、商城网站模板首页,仿U袋网,vue+elementui简洁实现(三)

一.以往版本回顾 作者成品效果访问&#xff1a;点击访问 官方详情页访问&#xff1a;点击访问 版本1《衣服、商品、商城网站模板首页&#xff0c;仿U袋网&#xff0c;vueelementui简洁实现》版本2《衣服、商品、商城网站模板首页&#xff0c;仿U袋网&#xff0c;vueelementui…

【微服务】springboot 实现elasticsearch索引数据迁移

一、前言 在生产系统中&#xff0c;经常可能面临的一个状况就是&#xff0c;随着实际业务发生变更&#xff0c;现有的数据模型可能需要调整&#xff0c;而且到了必须调整不可的时候&#xff0c;那就只能硬着头皮做了&#xff1b; 数据模型的调整&#xff0c;说的大一点&#xf…

flask 和 echarts 使用柱状图折线图等可视化图表展示二手房统计数据

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据处理 flask web 框架 echarts 图表 jinja 模版 三、菜鸟实战 初始化 Flask 框架&#xff0c;设置路由 各行政区房屋均价柱状图分析 echarts 渲染柱状图 各面积区间房屋占比饼状图 echa…

逻辑漏洞渗透与攻防(六)之其他类型逻辑漏洞

目录 其他类型逻辑漏洞 数据包重放漏洞 条件竞争漏洞 订单金额任意修改 接口无限制枚举 支付漏洞 修改商品数量 修改支付状态 修改附属值 越权支付 无限制试用 支付漏洞总结 SRC中的逻辑漏洞总结 其他类型逻辑漏洞 数据包重放漏洞 漏洞介绍&#xff1a;通…

SpringBoot下RabbitMQ的实战应用:动态创建和动态监控队列、死信、备份交换机

一、应用场景 业务中心根据业务需求向特定用户发送消息&#xff1b;发送前不确定由哪个用户接收 特定用户接收特定消息&#xff1b;用户可以退出&#xff0c;再切换别的用户登录&#xff0c;用户登录后只接收与自已对应的消息 二、总体要求 项目要足够稳健&#xff0c;消息不能…

(3分钟了解)SLAM后端优化的四大金刚!g2o ceres gtsam SE-Sync

后端优化常用的库有g2o ceres gtsam 和 se-sync这篇博客首先介绍se-sync&#xff0c;然后比较四种库之间的差异。编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&…

Python实现检测图片中的人脸,将识别到的人脸向量存入数据库,并实现提交的图片的人脸信息与入库的人脸信息进行比对

facenet_face_regonistant 完整代码下载地址&#xff1a;Python实现检测图片中的人脸&#xff0c;将识别到的人脸向量存入数据库 利用facenet实现检测图片中的人脸&#xff0c;将识别到的人脸向量存入数据库&#xff0c;此外利用post提交一个新图片&#xff08;也可以提交一个…

【Qt】通过继承ui界面类的方式加载.ui转化的.h头文件显示窗体

【Qt】通过继承ui界面类的方式加载.ui转化的.h头文件显示窗体1、背景2、实例3、验证1、背景 将.ui文件转化为.h头文件参考如下博客&#xff1a; 【Qt】将QtDesigner生成的.ui文件转化为.h头文件 https://jn10010537.blog.csdn.net/article/details/128589666其中生成的ui_wid…

Web学习

Web概念JavaWeb&#xff1a;使用Java语言开发基于互联网小贷项目软件架构&#xff1a;B/S架构详解静态资源HTML举例标签学习文件标签<!--注释-->文本标签图片标签* img&#xff1a;展示图片* 属性&#xff1a;* src&#xff1a;指定图片的位置* 代码&#xff1a;<!--展…

你的PC机或者终端,是怎么上网的?怎么连接到网络的?无线网怎么接入Internet,如何访问网络资源?

你的PC机或者终端&#xff0c;是怎么上网的&#xff1f;怎么连接到网络的&#xff1f;无线网怎么接入Internet&#xff0c;如何访问网络资源&#xff1f; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都…

就该去造空调吗?

今天在知乎上收到一个网友的提问&#xff1a;大佬&#xff0c;我想咨询点人生问题&#xff0c;但是碍于没工作囊中羞涩&#xff0c;实在没钱问。希望能问一问人生选择问题 是这样的一个是奥克斯空调电控部&#xff0c;一个是大陆汽车电子重庆研发&#xff0c;奥克斯偏裸机&…

光耦合器:其类型和在DC/AC电路中的各种应用

光耦合器&#xff1a;其类型和在DC/AC电路中的各种应用 介绍 光耦合器是一种在两个隔离电路之间传输电信号的电子元件。光耦合器也称为光隔离器、光电耦合器或光隔离器。 光耦合器通常用于电路&#xff0c;尤其是低电压或高噪声敏感电路&#xff0c;用于隔离电路&#xff0c…

【C++常用算法】STL基础语法学习 | 排序算法

目录 ●sort ●random_shuffle ● merge ●reverse ●sort 1.功能描述&#xff1a; 对容器内元素进行排序 2.查看sort定义下底层代码的函数原型&#xff1a; 3.向vector容器中插入10个无序数&#xff0c;并且用sort排序法对其进行升序和降序&#xff08;内建仿函数greater<…

伦敦交通局在这里为您的无障碍旅程提供支持

伦敦交通局首席人事官特里西亚赖特&#xff08;Tricia Wright&#xff09;详细介绍了伦敦交通局努力使该市的交通网络更易于所有乘客使用的方式&#xff0c;并强调尽管已经做了很多工作&#xff0c;但这项工作只是一个开始。公共交通是伦敦人和游客在首都生活中必不可少的。它连…

c++写一个连接池

用c写一个数据库连接池 数据库连接池是为了提高数据库连接的性能&#xff0c;进行连接复用 对于复杂数据库进行大量引用的场景下就会出现访问瓶颈 常见的两种解决方法就是&#xff1a;为了减少磁盘 I/O的次数&#xff0c;在数据库和服务器的应用中间加一层 缓存数据库&#…