SpringBoot 整合 ELK 实现日志采集和管理

ELK:

  • Elasticsearch:用于存储收集到的日志信息
  • Logstash: 用于日志采集并上传到Elasticsearch
  • Kibana: Web端可视化页面

下载

Elasticsearch7.16.2

Kibana7.16.2

Logstash7.16.2

配置并启动elasticsearch

elasticsearch无需过多配置,直接进入bin目录启动即可

配置并启动Logstash

  1. 创建 spring-boot-logstash.yaml 配置文件
input {
  tcp {
    #模式选择为server
    mode => "server"
    #ip和端口根据自己情况填写,端口默认4560,对应下文logback.xml里appender中的destination
    host => "127.0.0.1"
    port => 4560
    #格式json
    codec => json_lines
  }
}
filter {
  #过滤器,根据需要填写
}
output {
  elasticsearch {
    action => "index"
    #这里填写es的地址,多个es要写成数组的形式
    hosts  => "127.0.0.1:9200"
    #存放的索引名称,这里每天会创建一个新的索引保存当天的日志
    index => "myapp-log-%{+YYYY.MM.dd}"
  }
}
  1. 通过配置文件启动一个logstash实例
bin/logstash.bat -f D:\conf\spring-boot-logstash.yaml

配置并启动Kibana

  1. 配置es地址和中文语言
#设置es地址
elasticsearch.hosts: ["http://127.0.0.1:9200"]
#设置中文
i18n.locale: "zh-CN"
  1. 启动
bing/kibana.bat

Springboot 整合 Logstash将日志发送到ES

  1. 引入依赖

<dependency>
    <groupId>net.logstash.logbackgroupId>
    <artifactId>logstash-logback-encoderartifactId>
    <version>7.0.1version>
dependency>
  1. 创建 resources/logback-spring.xml
<configuration  scan="true" scanPeriod="10 seconds">
    <contextName>logbackcontextName>

    <include resource="logback-logstash.xml"/>

    
    
    <springProperty scope="context" name="log.path" source="logging.file.path" defaultValue="log"/>



    
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){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>TRACElevel>
            <level>DEBUGlevel>
            <level>INFOlevel>
            <level>WARNlevel>
            <level>ERRORlevel>
            <level>FATALlevel>
        filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}Pattern>
            
            <charset>UTF-8charset>
        encoder>
    appender>


    
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        
        <destination>127.0.0.1:4560destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    appender>


    
    <springProfile name="dev">
        <root level="debug">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="LOGSTASH" />
        root>
    springProfile>
    
        
    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="LOGSTASH" />
        root>
    springProfile>

configuration>

application.properties

spring.profiles.active=dev
#设置日志级别和本地存放路径(随便配)
logging.level.root=info
logging.file.path=applog
  1. 启动SpringBoot 查看es是否创建了新的索引,如果创建了myapp-log-xxx则日志已经成功存放到es了
GET /_cat/indices?pretty

通过Kibana提供的可视化功能查看日志

左上角目录 > Stack Management > 索引模式

SpringBoot 整合 ELK 实现日志采集和管理_第1张图片

SpringBoot 整合 ELK 实现日志采集和管理_第2张图片

创建好索引模式后进入 左上角目录 > discover

SpringBoot 整合 ELK 实现日志采集和管理_第3张图片

你可能感兴趣的:(业务场景&解决方案,elk,elasticsearch,spring,boot,kibana)