Spring Boot整合ELK:日志收集,分析与可视化
ELK简介
ELK是一个开源的数据分析平台,它由三个不同的开源项目组成:Elasticsearch、Logstash和Kibana。这三个项目共同合作,构成一个功能强大的日志分析解决方案。
- Elasticsearch是一个分布式搜索和分析引擎,它可以用来存储和搜索大量的数据。
- Logstash是一个数据收集引擎,它可以从不同的数据源收集数据,并将数据转换为统一的格式。
- Kibana是一个数据可视化平台,它可以帮助用户将数据呈现为易于理解和分析的图表、表格和仪表盘等形式。
ELK平台主要用于日志管理和分析,它可以帮助用户收集、存储、搜索和可视化各种类型的日志数据。这些日志数据可以来自不同的应用程序、操作系统和设备,ELK平台可以将这些数据集中起来,进行集中管理和分析,以便用户更好地了解他们的系统运行情况和性能瓶颈。
ELK安装
版本信息
Elasticsearch | 8.8.0 |
---|---|
Logstash | 8.8.0 |
Kibana | 8.8.0 |
安装Elasticsearch
下载
启动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>
关于安全选项
我用的这个版本的ES默认会开启安全选项,通讯的时候使用https协议,可以通过修改配置文件关闭该选项.
xpack.security.enabled: false
安装Logstash
下载
Download Logstash Free | Get Started Now
配置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
启动kibana
kibana有两种启动模式:交互式(浏览器)或分离模式。
我们以交互式启动kibana
./bin/kibana
访问上述地址,首次访问会被要求填入一个enrollment token.
我们在首次启动Elasticsearch的时候会生成一个enrollment token,不过该token的有效期只有30min.可以通过以下名了重新生成一个新token
./bin/elasticsearch-create-enrollment-token -s kibana --url "<https://localhost:9200>"
填入新生成的token,出现登陆页面
填入用户名密码后
测试
我们在logstash的标准输入里输入一些数据以进行测试
在Kibana中创建数据视图之前,需要先创建一个索引模式(Index Pattern),以便Kibana可以将数据可视化。
- name:视图名称
- Index Pattern:索引模式名称,并指定一个或多个Elasticsearch索引的名称。例如,如果要将日志数据可视化,可以指定一个名称为“log-*”的索引模式,并将其映射到所有名称以“log-”开头的Elasticsearch索引。
查看日志输出
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插件:
- file插件:从本地文件系统读取数据,支持tail模式和定时轮询模式。
- beats插件:从Beats软件收集数据,Beats是一款轻量级数据收集器,可以收集各种类型的日志和指标数据。
- syslog插件:从syslog服务器收集数据,syslog是一种标准的日志协议,可以用于将日志数据发送到远程服务器。
- tcp和udp插件:从TCP或UDP协议的网络连接中读取数据,支持多种编码格式和多路复用模式。
- stdin插件:从标准输入流(stdin)中读取数据,适用于测试和调试。
- jdbc插件:从关系型数据库中读取数据,支持多种数据库类型和查询语言。
- http插件:从HTTP请求中读取数据,支持多种HTTP请求方法和编码格式。
- amazon_s3和google_cloud_storage插件:从云存储服务中读取数据,支持Amazon S3和Google Cloud Storage等云平台。
- kafka插件:从Kafka消息队列中读取数据,支持Kafka的多个版本和特性。
- rabbitmq插件:从RabbitMQ消息队列中读取数据,支持RabbitMQ的多个版本和特性。
常用的output插件:
- stdout插件:将数据输出到标准输出流(stdout),适用于测试和调试。
- file插件:将数据输出到本地文件系统,支持多种文件编码格式和日志滚动策略。
- elasticsearch插件:将数据输出到Elasticsearch集群,支持多种索引操作和数据分析。
- syslog插件:将数据输出到syslog服务器,支持多种syslog协议和格式。
- tcp和udp插件:将数据输出到TCP或UDP协议的网络连接中,支持多种编码格式和多路复用模式。
- http插件:将数据输出到HTTP请求中,支持多种HTTP请求方法和编码格式。
- kafka插件:将数据输出到Kafka消息队列中,支持Kafka的多个版本和特性。
- rabbitmq插件:将数据输出到RabbitMQ消息队列中,支持RabbitMQ的多个版本和特性。
- 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的时候出现错误,以下是一些可能导致该错误的原因和解决方法:
-
配置文件错误:Logstash的配置文件可能存在语法错误或其他问题。可以使用Logstash的
-config.test_and_exit
选项来测试配置文件是否有效,例如:bin/logstash --path.settings=/path/to/settings --config.test_and_exit -f /path/to/config/file
-
插件错误:如果在Logstash中使用了插件,可能存在问题。可以尝试禁用插件来确定是否是插件导致的问题。例如注释掉所有输出插件,只保留输入插件,然后重新启动Logstash,如果成功启动,则表示输出插件存在问题。
-
Java版本不兼容:Logstash需要特定版本的Java才能正常运行。请确保正在使用支持的Java版本,并使用正确的JAVA_HOME环境变量。在命令行中运行
java -version
查看Java版本。 -
磁盘空间不足:如果磁盘空间不足,Logstash可能无法启动。
-
权限问题:如果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>"
转载自:https://juejin.cn/post/7240084575756943421