likes
comments
collection
share

Spring Boot | ELK环境搭建&整合,真的不能再详细了

作者站长头像
站长
· 阅读数 10

0、前言

本篇文件详细讲述了在Centos7系统中搭建ELK&在Spring Boot项目中整合ELK的操作步骤。

1、ELK简介

ELK是ElasticsearchLogstashKibana三个开源项目的项目名称首字母缩写。这三个开源项目一起为我们提供了一个成熟且强大的实时日志集中处理解决方案。其中,Logstash负责收集日志数据,Elasticsearch用于存储并索引数据,Kibana提供了一个可视化界面查看Elasticsearch中存储的日志数据。

2、环境&版本

服务器系统版本、JDK版本、ELK版本信息如下:

环境版本端口号
Centos7.9
JDK1.8
Elasticsearch7.2.139100
Logstash7.2.139102
Kibana7.2.139101

ElasticsearchLogstashKibana三个开源项目都需要在Java环境下运行,所以需要提前在服务器上安装JDK。

笔者汪小成这里安装的是JDK1.8。本文中没有讲述JDK的安装,有需要的朋友可以参数《Centos7 | 安装JDK1.8》这篇文章。

3、Elasticsearch

3.1、下载Elasticsearch

$ wget –c  https://mirrors.huaweicloud.com/elasticsearch/7.2.1/elasticsearch-7.2.1-x86_64.rpm

为了更快的下载速度,笔者汪小成选择在华为开源镜像站下载Elasticsearch。

3.2、安装Elasticsearch

$ rpm -ivh elasticsearch-7.2.1-x86_64.rpm

3.3、配置Elasticsearch

Elasticsearch配置文件位置:/etc/elasticsearch

进入配置文件所在文件夹:

$ cd /etc/elasticsearch

备份配置文件(非必要):

$ cp elasticsearch.yml elasticsearch.backup.yml

使用vim打开elasticsearch.yml配置文件,按下i进入编辑模式。修改内容如下:

network.host: 0.0.0.0
http.port: 39100
discovery.seed_hosts: ["127.0.0.1:39100"]

配置项说明:

network.host用于设置绑定的主机地址,可以是IP地址或主机名。http.port用于设置监听的HTTP端口,出于一些特殊原因,笔者汪小成将elasticsearch的端口号由默认的9200修改为39100discovery.seed_hosts用于设置集群节点的种子主机地址,用于节点发现和加入集群。

3.4、启动Elasticsearch

# 启动Elasticsearch
$ sudo systemctl start elasticsearch

将Elasticsearch设置为开机启动(非必要):

# 将Elasticsearch设置为开机自启
$ sudo systemctl enable elasticsearch

查看Elasticsearch的运行状态:

$ sudo systemctl status elasticsearch

或者,使用如下命令检查Elasticsearch是否启动成功:

# 检查Elasticsearch是否启动成功
$ netstat -antp | grep 39100

待Elasticsearch启动成功后,可以使用curl命令来测试Elasticsearch是否正常运行。例如:

$ curl http://127.0.0.1:39100

如果返回类似以下内容,说明Elasticsearch已经成功运行:

{
  "name" : "localhost.localdomain",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "NqlpN5iJQmeSV_TvHqPo6w",
  "version" : {
    "number" : "7.2.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "fe6cb20",
    "build_date" : "2019-07-24T17:58:29.979462Z",
    "build_snapshot" : false,
    "lucene_version" : "8.0.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

最后,使用如下命令修改Centos防火墙配置开放端口号供外访问:

$ sudo firewall-cmd --zone=public --add-port=39100/tcp --permanent

重新加载防火墙规则以使更改生效:

$ sudo firewall-cmd --reload

4、Logstash

4.1、下载Logstash

在华为开源镜像站下载Logstash:

$ wget –c https://repo.huaweicloud.com/logstash/7.2.1/logstash-7.2.1.rpm

4.2、安装Logstash

$ rpm -ivh logstash-7.2.1.rpm

4.3、配置Logstash

/etc/logstash/conf.d文件夹下创建logstash.conf配置文件,配置文件内容如下:

input {
    tcp {
        host => "0.0.0.0"
        port => 39102
        mode => "server"
        codec => json_lines
    }
}
output {
    elasticsearch {
        hosts => "localhost:39100"
        index => "%{[appname]}-%{+YYYY.MM.dd}"
    }
}

配置说明:

  • input - 用于定义数据的输入源,即Logstash的数据来源。

    • tcp - 用于指定Logstash监听指定的IP和端口,接收 TCP 连接传入的数据。

      • host - 监听的主机IP地址,这里的0.0.0.0表示监听所有可用的网络接口。
      • port - 监听的端口号。笔者汪小成这里将端口号由默认的9600改为了39102
      • mode - 连接模式。
      • codec - 数据编码解码方式,json_lines表示接收到的数据将以JSON行的形式解析。
  • output - 用于定义数据的输出目录。

    • elasticsearch - 表示将数据输出到Elasticsearch集群。

      • hosts - 用于设置Elasticsearch集群的主机地址和端口号。
      • index - 用于指定Elasticsearch索引的名称。这里使用 %{[appname]} 表示索引名称从数据中的appname字段获取。%{+YYYY.MM.dd}表示在索引中包含日期信息。

4.4、启动Logstash

$ sudo systemctl start logstash

最后,使用如下命令修改Centos防火墙配置开放端口号供外访问:

$ sudo firewall-cmd --zone=public --add-port=39102/tcp --permanent

重新加载防火墙规则以使更改生效:

$ sudo firewall-cmd --reload

5、Kibana

5.1、下载Kibana

$ wget –c https://repo.huaweicloud.com/kibana/7.2.1/kibana-7.2.1-x86_64.rpm

5.2、安装Kibana

$ rpm -ivh kibana-7.2.1-x86_64.rpm

5.3、配置Kibana

进入/etc/kibana文件夹,修改kibana.yml配置文件中如下内容:

server.port: 39101
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:39100"]
i18n.locale: "zh-CN"

配置说明:

  • server.port - 用于指定Kibana服务监听的端口号,这里笔者汪小成将端口号由默认的5601改成了39101
  • server.host - 用于指定Kibana服务监听的主机地址。"0.0.0.0"表示监听所有可用的网络接口,即可以从任意IP地址访问Kibana。
  • elasticsearch.hosts - 用于设置Elasticsearch集群的主机地址和端口号。
  • i18n.locale - 用于设置界面语言,这里将界面语言设置成了中文。

5.4、启动Kibana

$ sudo systemctl start kibana

最后,使用如下命令修改Centos防火墙配置开放端口号供外访问:

$ sudo firewall-cmd --zone=public --add-port=39101/tcp --permanent

重新加载防火墙规则以使更改生效:

$ sudo firewall-cmd --reload

6、SpringBoot集成ELK

Spring Boot应用输出日志到ELK的大体流程如下图所示: Spring Boot | ELK环境搭建&整合,真的不能再详细了

说明:

  1. Spring Boot应用产生日志数据,使用Logback日志框架记录日志。
  2. Logstash作为日志收集器,接收Spring Boot应用发送的日志数据。
  3. Logstash解析和过滤日志数据,可能会对其进行格式化和处理。
  4. 处理后的日志数据被发送到ElasticsearchElasticsearch将日志数据存储在分布式索引中。
  5. Kibana连接到Elasticsearch,可以查看存储在Elasticsearch中的日志数据。

6.1、添加依赖

修改pom.xml文件,添加如下配置:

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.2</version>
</dependency>

6.2、修改Logback配置

修改Logback的配置文件:

+<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+    <!-- 端口是在logstach.conf中配置的 -->
+    <destination>60.211.159.140:39102</destination>
+    <!-- encoder必须配置,有多种可选 -->
+    <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
+        <!-- "appname":"spring-boot-lee" 的作用是指定创建索引的名字时用,并且在生成的文档中会多了这个字段,切记小写  -->
+        <customFields>{"appname":"spring-boot-elk"}</customFields>
+    </encoder>
+</appender>
<!-- 日志输出级别 -->
<root level="INFO">
    <appender-ref ref="STDOUT"/>
+    <appender-ref ref="LOGSTASH"/>
</root>

6.3、启动SpringBoot项目

这一步,笔者汪小成就不废话了。

6.4、在Kibana中查看日志

1、在浏览器地址样中输入服务器IP+Kibana端口号 --> 点击管理 --> 点击索引模式 --> 点击创建索引模式Spring Boot | ELK环境搭建&整合,真的不能再详细了

2、输入索引模式名称 --> 点击下一步Spring Boot | ELK环境搭建&整合,真的不能再详细了

3、设置时间筛选字段名称,笔者汪小成这里没有使用时间筛选。

Spring Boot | ELK环境搭建&整合,真的不能再详细了

4、点击Discover图标就可以看到Spring Boot项目输出的日志了。 Spring Boot | ELK环境搭建&整合,真的不能再详细了