Springboot中集成ELK进行日志分析

引言

ELK(ElasticSearch分布式搜索引擎、Logstash数据收集处理引擎和Kibana可视化化平台)是在大型后端架构中,一个标准的数据采集方案。

Kibana
Elasticsearch
Logstash
Log Sources
Logs
Logs
Logs
Filter, Parse
Transform
Store, Search
Visualize, Dashboard
Users
Kibana
Parse and Enrich Data
Elasticsearch
Logstash
Application 1
Application 2
Application 3
  • Log Sources:表示各种应用程序(Application 1、Application 2、Application 3)生成的日志数据。
  • Logstash:负责收集、过滤和解析来自各个日志源的数据,然后将其传输到Elasticsearch进行存储和索引。
  • Elasticsearch:作为中央存储和搜索引擎,接收Logstash处理后的日志数据,并提供高效的存储和检索能力。
  • Kibana:可视化和分析工具,用于创建仪表盘、图表和报表,并帮助用户对日志数据进行查询和探索。

其中springboot应用的角色就是Log Sources,进行日志分析集成主要是对接Logstash。主要使用到的是依赖logstash-logback-encoder

集成

Springboot集成

  • 修改maven的依赖配置。
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.4</version>
</dependency>
<!-- Your project must also directly depend on either logback-classic or logback-access. For example: -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.3.7</version>
</dependency>

运行时出现 ClassNotFoundException/NoClassDefFoundError/NoSuchMethodError 这些异常可能需要降低logstash-logback-encoder的版本。

  • 修改logback.xml配置文件。
    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>127.0.0.1:5044</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <customFields>{"host":"${HOSTNAME}", "appname":"bigdata-air"}</customFields>
        </encoder>
    </appender>

    <root level="INFO">
        <!-- stash输出 -->
        <appender-ref ref="stash" />
    </root>

修改Logstash的pipeline

修改Logstash的管道配置,增加tcp和json解析。

vi logstash/pipeline/logstash.conf

## 增加配置
input {
    tcp {
        port => 5044
        codec => json_lines
    }
}

output {
  elasticsearch {
     hosts => ["http://elasticsearch:9200"]
     index => "app-%{[appname]}-%{+YYYY.MM.dd}"
     user => "test"
     password => "123qazwww.."
  }
  stdout {
  }
}

通过kibana查看日志

  • 选择Management>Kinaba>Index Patterns 菜单
  • 然后Create index pattern
    • index pattern 输入 app-bigdata-air
    • Time Filter field name 选择 currentDateTime
  • 选择Discover菜单即可查看

参考

posted @ 2023-08-31 11:20  落叶微风  阅读(89)  评论(0编辑  收藏  举报  来源