likes
comments
collection
share

Spring Boot整合ELK:日志收集,分析与可视化

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

ELK简介

Spring Boot整合ELK:日志收集,分析与可视化

ELK是一个开源的数据分析平台,它由三个不同的开源项目组成:Elasticsearch、Logstash和Kibana。这三个项目共同合作,构成一个功能强大的日志分析解决方案。

  • Elasticsearch是一个分布式搜索和分析引擎,它可以用来存储和搜索大量的数据。
  • Logstash是一个数据收集引擎,它可以从不同的数据源收集数据,并将数据转换为统一的格式。
  • Kibana是一个数据可视化平台,它可以帮助用户将数据呈现为易于理解和分析的图表、表格和仪表盘等形式。

ELK平台主要用于日志管理和分析,它可以帮助用户收集、存储、搜索和可视化各种类型的日志数据。这些日志数据可以来自不同的应用程序、操作系统和设备,ELK平台可以将这些数据集中起来,进行集中管理和分析,以便用户更好地了解他们的系统运行情况和性能瓶颈。

ELK安装

版本信息

Elasticsearch8.8.0
Logstash8.8.0
Kibana8.8.0

安装Elasticsearch

下载

Download Elasticsearch

Spring Boot整合ELK:日志收集,分析与可视化

启动ES

Start the Elastic Stack with security enabled automatically | Elasticsearch Guide [8.7] | Elastic

// 进入到elasticsearch-8.8.0, 启动 elasticsearch
./bin/elasticsearch

首次启动会发生:

  • 在certs下生成https证书
  • TLS配置会被写入配置文件  elasticsearch.yml
  • 为用户elastic 生成密码(这个密码只展示一次,记得保存)
  • 未kibana生成一个enrollment token

通过命令行确认一下是否启动成功(或者直接在浏览器访问也行)

curl --cacert config/certs/http_ca.crt -u elastic <https://localhost:9200>

Spring Boot整合ELK:日志收集,分析与可视化

关于安全选项

我用的这个版本的ES默认会开启安全选项,通讯的时候使用https协议,可以通过修改配置文件关闭该选项.

xpack.security.enabled: false

Spring Boot整合ELK:日志收集,分析与可视化

安装Logstash

下载

Download Logstash Free | Get Started Now

Spring Boot整合ELK:日志收集,分析与可视化

配置config

vim logstash.conf

logstash-8.8.0下新建logstash.conf文件

input {
  # 输入内容的配置
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    user => "elastic"
    password => "yourpassword"
    ssl => true
    ssl_certificate_verification => true
    cacert => "/path/to/ca.crt"
    index => "your_index"
  }
}

Logstash 的配置文件 logstash.conf 决定了 Logstash 如何处理输入的数据。在该配置文件指定输入插件、过滤器和输出插件,以及它们的参数。

  • input :使用input插件来指定数据源, stdin 表示从标准输入读取数据(即通过命令行输入的方式来提供数据).

  • output 插件:这个配置文件使用了两个输出插件,它们分别是 elasticsearch 和 stdout 插件。

    • elasticsearch 插件将数据输出到 Elasticsearch 中。hosts 参数指定了 Elasticsearch 的主机和端口号,默认是 localhost:9200。也就是说,这个配置文件将数据输出到运行在本地的 Elasticsearch 实例中。
    • stdout 插件将数据输出到标准输出中,这里使用了 rubydebug 编码器,它可以将输出格式化为易于阅读的 Ruby 对象格式。

启动Logstash

./logstash -f logstash.conf

端口号通常是在Logstash的配置文件中指定的,默认情况下是9600。

ps -ef | grep logstash

可以使用该命令确认Logstash是否成功

安装Kibana

下载kibana

Download Kibana Free | Get Started Now

Spring Boot整合ELK:日志收集,分析与可视化

启动kibana

kibana有两种启动模式:交互式(浏览器)或分离模式。

我们以交互式启动kibana

./bin/kibana

Spring Boot整合ELK:日志收集,分析与可视化

访问上述地址,首次访问会被要求填入一个enrollment token.

我们在首次启动Elasticsearch的时候会生成一个enrollment token,不过该token的有效期只有30min.可以通过以下名了重新生成一个新token

./bin/elasticsearch-create-enrollment-token -s kibana --url "<https://localhost:9200>"

填入新生成的token,出现登陆页面

Spring Boot整合ELK:日志收集,分析与可视化

填入用户名密码后

Spring Boot整合ELK:日志收集,分析与可视化

测试

Spring Boot整合ELK:日志收集,分析与可视化 我们在logstash的标准输入里输入一些数据以进行测试

Spring Boot整合ELK:日志收集,分析与可视化 在Kibana中创建数据视图之前,需要先创建一个索引模式(Index Pattern),以便Kibana可以将数据可视化。

  • name:视图名称
  • Index Pattern:索引模式名称,并指定一个或多个Elasticsearch索引的名称。例如,如果要将日志数据可视化,可以指定一个名称为“log-*”的索引模式,并将其映射到所有名称以“log-”开头的Elasticsearch索引。

Spring Boot整合ELK:日志收集,分析与可视化

查看日志输出

SprignBoot整合ELK

引入依赖

在Spring Boot项目中添加Logback依赖,可以在build.gradle文件中添加以下依赖:

dependencies {
    implementation 'org.apache.logging.log4j:log4j-core:2.14.1'
    implementation 'org.apache.logging.log4j:log4j-api:2.14.1'
    implementation "org.apache.logging.log4j:log4j-slf4j-impl:2.14.1"
}

配置Logback日志文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Properties>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%X{traceId}] %-5level %logger{36} - %msg%n</Property>
    </Properties>

    <Appenders>
        <!--日志导出的到 Logstash-->
        <LogstashTcpSocketAppender name="LogstashTcpSocketAppender"
                  class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>localhost:9600</destination>
            <!-- encoder必须配置,有多种可选 -->
            <encoder charset="UTF-8"
                     class="net.logstash.logback.encoder.LogstashEncoder" >
            </encoder>
        </LogstashTcpSocketAppender>

    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="LogstashTcpSocketAppender"/>
        </Root>
    </Loggers>
</Configuration>

配置Logstash

input {
  tcp {
    port => 9600
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    user => "elastic"
    password => "yourpassword"
    ssl => true
    ssl_certificate_verification => true
    cacert => "/path/to/ca.crt"
    index => "your_index"
  }
}

拓展

Logstash 输入输出插件

常用的input插件:

  1. file插件:从本地文件系统读取数据,支持tail模式和定时轮询模式。
  2. beats插件:从Beats软件收集数据,Beats是一款轻量级数据收集器,可以收集各种类型的日志和指标数据。
  3. syslog插件:从syslog服务器收集数据,syslog是一种标准的日志协议,可以用于将日志数据发送到远程服务器。
  4. tcp和udp插件:从TCP或UDP协议的网络连接中读取数据,支持多种编码格式和多路复用模式。
  5. stdin插件:从标准输入流(stdin)中读取数据,适用于测试和调试。
  6. jdbc插件:从关系型数据库中读取数据,支持多种数据库类型和查询语言。
  7. http插件:从HTTP请求中读取数据,支持多种HTTP请求方法和编码格式。
  8. amazon_s3和google_cloud_storage插件:从云存储服务中读取数据,支持Amazon S3和Google Cloud Storage等云平台。
  9. kafka插件:从Kafka消息队列中读取数据,支持Kafka的多个版本和特性。
  10. rabbitmq插件:从RabbitMQ消息队列中读取数据,支持RabbitMQ的多个版本和特性。

常用的output插件:

  1. stdout插件:将数据输出到标准输出流(stdout),适用于测试和调试。
  2. file插件:将数据输出到本地文件系统,支持多种文件编码格式和日志滚动策略。
  3. elasticsearch插件:将数据输出到Elasticsearch集群,支持多种索引操作和数据分析。
  4. syslog插件:将数据输出到syslog服务器,支持多种syslog协议和格式。
  5. tcp和udp插件:将数据输出到TCP或UDP协议的网络连接中,支持多种编码格式和多路复用模式。
  6. http插件:将数据输出到HTTP请求中,支持多种HTTP请求方法和编码格式。
  7. kafka插件:将数据输出到Kafka消息队列中,支持Kafka的多个版本和特性。
  8. rabbitmq插件:将数据输出到RabbitMQ消息队列中,支持RabbitMQ的多个版本和特性。
  9. stdout和file插件也可以用于输出到日志文件或其他文件系统。

启动logstash报错

[2023-06-01T08:36:06,710][FATAL][org.logstash.Logstash    ] Logstash stopped processing because of an error: (SystemExit) exit
org.jruby.exceptions.SystemExit: (SystemExit) exit
	at org.jruby.RubyKernel.exit(org/jruby/RubyKernel.java:790) ~[jruby.jar:?]
	at org.jruby.RubyKernel.exit(org/jruby/RubyKernel.java:753) ~[jruby.jar:?]
	at Users.chenrunkai.Desktop.SoftwarePackage.logstash_minus_8_dot_8_dot_0.lib.bootstrap.environment.<main>(/Users/chenrunkai/Desktop/SoftwarePackage/logstash-8.8.0/lib/bootstrap/environment.rb:91) ~[?:?]

启动logstash的时候出现错误,以下是一些可能导致该错误的原因和解决方法:

  1. 配置文件错误:Logstash的配置文件可能存在语法错误或其他问题。可以使用Logstash的-config.test_and_exit选项来测试配置文件是否有效,例如:

    bin/logstash --path.settings=/path/to/settings --config.test_and_exit -f /path/to/config/file
    
  2. 插件错误:如果在Logstash中使用了插件,可能存在问题。可以尝试禁用插件来确定是否是插件导致的问题。例如注释掉所有输出插件,只保留输入插件,然后重新启动Logstash,如果成功启动,则表示输出插件存在问题。

  3. Java版本不兼容:Logstash需要特定版本的Java才能正常运行。请确保正在使用支持的Java版本,并使用正确的JAVA_HOME环境变量。在命令行中运行java -version查看Java版本。

  4. 磁盘空间不足:如果磁盘空间不足,Logstash可能无法启动。

  5. 权限问题:如果Logstash无法访问所需的文件或目录,它可能会因权限问题而无法启动。请确保Logstash用户具有足够的权限来访问所有必需的文件和目录。

如果尝试了上述方法仍无法解决问题,检查一下Logstash日志文件以获取更多信息,日志文件通常位于/var/log/logstash//usr/share/logstash/logs/目录中。

enrollment token

elasticsearch-create-enrollment-token | Elasticsearch Guide [8.6] | Elastic

  • enrollment token 在第一个 Elasticsearch 启动后的有效时间为30分钟。超过30分钟的时间上述 token 将会无效。
  • enrollment token分两个,一个是kibana连接es使用的,另一个是es加入集群使用的
  • 我们可以使用如下的方法来生成一个新的 token:
./bin/elasticsearch-create-enrollment-token -s kibana --url "<https://localhost:9200>"