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. 引入依赖
<!--集成logstash-->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.0.1</version>
</dependency>
  1. 创建 resources/logback-spring.xml
<configuration  scan="true" scanPeriod="10 seconds">
    <contextName>logback</contextName>

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

    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
    <!-- 引用application.properties内的配置 -->
    <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}}"/>

    <!--1. 输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
            <level>DEBUG</level>
            <level>INFO</level>
            <level>WARN</level>
            <level>ERROR</level>
            <level>FATAL</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>


    <!--输出到logstash的appender-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--可以访问的logstash日志收集端口-->
        <destination>127.0.0.1:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>


    <!-- 开发环境:打印控制台并传输给Logstash -->
    <springProfile name="dev">
        <root level="debug">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="LOGSTASH" />
        </root>
    </springProfile>
    
        <!-- 生产环境:直接将日志传输给Logstash -->
    <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 > 索引模式

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值