springboot集成ELK日志分析平台(windows版)

1.elk是什么?

在安装ELK之前,建议大家先了解一下elk。

ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。

ElasticSearch简称ES,它是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。
Logstash是一个具有实时传输能力的数据收集引擎,用来进行数据收集(如:读取文本文件)、解析,并将数据发送给ES。
Kibana为 Elasticsearch 提供了分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度表格、图形。

2.搭建elk平台的环境配置

2.1开发环境:

win11,idea,jdk1.8

2.2ELK版本:

elasticsearch-7.11.1-windows-x86_64,logstash-7.6.1,kibana-7.11.1-windows-x86_64

值得一提的是elasticsearch的版本一定要和kibana的版本对应(很重要)不然会出现因为版本不兼容而引发的各种错误。开发人员一般使用jdk8,这就要求elasticsearch的版本在7.13以下。

我这里的elasticsearch和kibana版本都选择了7.11.1。

3.下载和安装

3.1下载:

我这里给出了下载路径,直接下载对应的版本即可

elasticsearch:https://www.elastic.co/cn/downloads/past-releases/

logstash:https://www.elastic.co/cn/downloads/past-releases/#logstash

kibana:https://www.elastic.co/cn/downloads/past-releases/#kibana

3.2安装:

elasticsearch:直接解压即可

logstash:解压压缩包,进入bin目录新建logstash.conf文件,文件内容如下

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"
    #用于kibana过滤,可以填项目名称
    index  => "logstash_test"
  }
}

kibana:解压文件即可

4.启动ELK

4.1ELK工作流程:

在启动ELK之前我们要先了解一下ELK的工作流程,这样才能更好的理解ELK的启动顺序。

ELK工作流程:一般都是需要在收集日志的服务上部署logstash,作为logstash shipper用于监控,过滤日志,将过滤后的日志发送给broker,然后logstash indexer将存放在broker中的数据再写入elasticsearch,elasticsearch对这些数据创建索引,然后kibana对其进行各种分析并以图表的形式展示。

elk收集syslog日志 elk收集windows日志_elasticsearch

有些时候,如果日志的收集量比较大,为了保证日志收集的性能和数据的完整性,logstash shipper和logstash indexer之间的缓冲器(broker)也经常用kafka来实现。

4.2ELK启动

通过ELK的工作流程我们不难得知,ELK的启动顺序为logstash>=elasticsearch>kibana,如果先启动logstash,logstash会轮询请求配置文件的elasticsearch,会报警告,所以我们更改启动顺序为elasticsearch>logstah>kibana。

4.2.1启动elasticsearch:

双击bin文件夹中的elasticsearch.bat即可

启动成功如下图所示

elk收集syslog日志 elk收集windows日志_windows_02

浏览器输入URL:http://localhost:9200/ 会输出json字符串

{
  "name" : "DESKTOP-4N5REV4",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ashqHfBHTbCyWrS-xa05Tg",
  "version" : {
    "number" : "7.11.1",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "ff17057114c2199c9c1bbecc727003a907c0db7a",
    "build_date" : "2021-02-15T13:44:09.394032Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
4.2.2启动logstash:

切换到logstash中的bin目录下,终端输入

logstash -f logstash.conf

通过conf启动完成,启动成功如下如图所示

elk收集syslog日志 elk收集windows日志_elk_03

浏览器输入URL:http://localhost:9600/ 会输出json字符串:

{"host":"DESKTOP-4N5REV4","version":"7.6.1","http_address":"127.0.0.1:9600","id":"85acfd96-129b-4a71-8e26-e5837e4ae228","name":"DESKTOP-4N5REV4","ephemeral_id":"19dcb65c-f4da-4dcf-8b53-13422cd1bc78","status":"green","snapshot":false,"pipeline":{"workers":8,"batch_size":125,"batch_delay":50},"build_date":"2020-02-29T01:53:17+00:00","build_sha":"0a75e90f49c005bffea8525d1b06728d17dbdf58","build_snapshot":false}
4.2.3启动kibana:

进入到kibana的bin目录,终端输入kibana.bat,启动成功如下图所示

elk收集syslog日志 elk收集windows日志_elasticsearch_04

浏览器输入URL:http://localhost:5601/ 截图

elk收集syslog日志 elk收集windows日志_elk_05

5.springboot集成ELK

5.1引入pom依赖
<!-- 集成logback -->
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>5.3</version>
    </dependency>
</dependencies>
5.2修改配置文件

如果配置文件是application.properties形式,则在配置文件下写入

logging.config=classpath:logback.xml

如果配置文件是application.yml形式,则在配置文件加写入

logging:
  config: classpath:logback.xml
5.3编写logback.xml

我这里给出以下xml文件,直接复制到你的项目下即可,如果有修改需求,直接在logback.xml文件下修改即可。

<?xml version="1.0" encoding="UTF-8"?>
<!--该日志将日志级别不同的log信息保存到不同的文件中 -->
<configuration>
    <appender name="LOGSTASH"
              class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--        端口是在logstach.conf中配置的-->
        <destination>localhost:4560</destination>
        <!-- encoder必须配置,有多种可选 -->
        <encoder charset="UTF-8"
                 class="net.logstash.logback.encoder.LogstashEncoder">
            <!-- "appname":"spring-boot-lee" 的作用是指定创建索引的名字时用,并且在生成的文档中会多了这个字段,切记小写  -->
            <customFields>{"appname":"spring-boot-lee"}</customFields>
        </encoder>
    </appender>

    <!-- ch.qos.logback.core.ConsoleAppender 表示控制台输出 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--
        日志输出格式:
         %d表示日期时间,
         %thread表示线程名,
         %-5level:级别从左显示5个字符宽度
         %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
         %msg:日志消息,
         %n是换行符
        -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
        </layout>
    </appender>

    <!--
      logger主要用于存放日志对象,也可以定义日志类型、级别
      name:表示匹配的logger类型前缀,也就是包的前半部分
      level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR
      additivity:作用在于children-logger是否使用 rootLogger配置的appender进行输出,
      false:表示只用当前logger的appender-ref,true:
      表示当前logger的appender-ref和rootLogger的appender-ref都有效
    -->
    <!-- hibernate logger -->
    <logger name="com.example" level="debug"/>
    <!-- Spring framework logger -->
    <logger name="org.springframework" level="debug" additivity="false"></logger>

    <root level="INFO">
        <appender-ref ref="stdout"/>
        <appender-ref ref="LOGSTASH"/>
    </root>
</configuration>
6.kibana图形化界面使用使用

全部配置完成后浏览器访问http://localhost:5601/进入到kibana图形化界面

点击左侧discover

elk收集syslog日志 elk收集windows日志_spring boot_06

点击创建索引

elk收集syslog日志 elk收集windows日志_elasticsearch_07

接下来就可以看到你配置的索引了

elk收集syslog日志 elk收集windows日志_spring boot_08

输入索引名称

elk收集syslog日志 elk收集windows日志_elasticsearch_09

第二步选择@timestamp

elk收集syslog日志 elk收集windows日志_spring boot_10

点击创建就能创建成功了,截图如下

elk收集syslog日志 elk收集windows日志_elk_11

随后再次点击discover页面就可以看到自己的日志内容了。

elk收集syslog日志 elk收集windows日志_elk_12

7.拓展

kibana中文模式设置

修改kibana安装文件下的config的kibana.yml文件,在文件最后一行加入

i18n.locale: "zh-CN"