“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,点击检查活动概况”

【系列文章】

重学ElasticSearch (ES) 系列(一):中心概念及装置

重学ElasticSearch (ES) 系列(二):查找外相关操作(集群、索引、文档)

重学ElasticSearch (ES) 系列(三):深化数据查找

重学ElasticSearch (ES) 系列(四):ELK搭建SpringBoot日志实时剖析体系

重学ElasticSearch (ES) 系列(五):常见面试题

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

@toc

一、概述

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

那么,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等

    重学ElasticSearch (ES) 系列(四):ELK搭建SpringBoot日志实时分析系统
  • logstash.conf pipeline文件

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

    input {
    }
    filter {
    }
    output {
    }
    

1.1.3、Kibana

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

1.2、ELK与日志收集

日志—> Logstash 收集日志数据 —> ES存储 —> Kibana集中检查

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

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,如下

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

  • 进入日志展示页面discover

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

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

3.4、作用展示

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