一 准备
【附】博文:《Elasticsearch下载/安装/启动》
【附】博文:《Kibana下载/安装/启动》
【附】博文:《Logstash下载/安装/启动》
【注】Elasticsearch/Logstash/Kibana的版本必须完全相同!
二 编辑Logstash配置文件
Logstash配置文件是指下载安装Logstash时自主创建的【conf】后缀文件,命名因人而异(官方文档中命名为:logstash-simple.conf)。
1.统一配置
# 配置输入端。
input {
tcp {
# 配置输入host。
host => "localhost"
# 配置输入端口。
port => 5002
# 设置服务器模式(具体作用未知)。
mode => "server"
# 设置输入内容为JSON(因此从此uri写入的内容必须是JSON格式)。
codec => json_lines
}
}
# 配置输出端。
output {
# 配置输出至Elasticsearch。
elasticsearch {
# 配置Elasticsearch路由(可设置多个)。
hosts => ["localhost:9200"]
# 配置Elasticsearch索引,用于查询。
index => "log-%{+yyyy.MM.dd}"
}
}
2.分类配置
input {
tcp {
host => "localhost"
port => 8001
# 设置类型,如果想为不同服务的配置建立不同的索引,可设置此变量用于判断。
type => "service-discovery-eureka"
mode => "server"
codec => json_lines
}
tcp {
host => "localhost"
port => 5002
type => "service-basis-common"
mode => "server"
codec => json_lines
}
}
output {
# 判断类型,配置不同的Elasticsearch索引,以便区分不同服务的日志。
if [type] == "service-discovery-eureka" {
elasticsearch {
hosts => ["localhost:9200"]
index => "service-discovery-eureka-%{+yyyy.MM.dd}"
}
}
if [type] == "service-basis-common" {
elasticsearch {
hosts => ["localhost:9200"]
index => "service-basis-common-%{+yyyy.MM.dd}"
}
}
}
配置完成后启动Logstash,启动命令:
nohup sh logstash -f logstash-simple.conf &
三 依赖
<!-- Logstash依赖 -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.3</version>
</dependency>
四 配置【logback-spring.xml】
Spring Boot整合ELK的关键在于配置【logback-spring.xml】。
1.静态配置
<!-- Logstash全输出 -->
<appender name="logstash_all" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- destination标签中配置Logstash配置文件中设置的输入uri。 -->
<destination>localhost:5002</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
上述案例通过硬编码完成配置。但实际开发中会因为环境的不同使用不同的Logstash服务,因此需实现动态切换不同环境的Logstash服务。
2.动态配置:通过【springProfile】标签设置不同环境
<!-- Logstash全输出 -->
<appender name="logstash_all" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 设置本地环境Logstash输入uri -->
<springProfile name="loc">
<destination>localhost:5002</destination>
</springProfile>
<!-- 设置开发环境Logstash输入uri -->
<springProfile name="dev">
<destination>12.34.56.78:5002</destination>
</springProfile>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
3.动态配置:通过【springProperty】标签设置不同环境(推荐)
个人认为,对于需要根据环境产生变化的量(例如数据库连接,Redis连接等)最好是使用【application-env.yml】配置文件进行统一配置及管理,以达到简化配置的效果,无论是后期需要修改还是查阅都是最高效的方式。
【注】以下配置是个人行为,Logstash未提供官方配置模版!
# Logstash configuration
logstash:
host: localhost
port: 8001
<!-- Spring Boot参数(通过springProperty标签读取配置文件中的配置) -->
<springProperty scope="context" name="logstash.host" source="logstash.host"/>
<springProperty scope="context" name="logstash.port" source="logstash.port"/>
<!-- Logstash全输出 -->
<appender name="logstash_all" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 需要注意的是,LogstashTcpSocketAppender对于参数读取的支持有所不佳,直接使用 -->
<!-- ${logstash.host}的方式读取数据会出现异常,因此需要使用${logstash.host:- }的方式进行读取, -->
<!-- 【:-】的意思是如果变量存在则返回变量,否则返回默认值。 -->
<!-- (很奇怪它怎么做到读取不到配置文件的值却又能将之作为默认值,反正就是成功了。) -->
<destination>${logstash.host:- }:${logstash.port:- }</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
完成上述所有的配置后,启动服务,Logstash会通过输入uri接受来自各个服务的日志,并输出至Elasticsearch。
五 查询日志
1.启动服务
2.创建索引
3.查询日志