本文介紹了 Spring Boot 2 配合 ELK 實現(xiàn)日志記錄的方法和步驟。
目錄
- ELK 簡介
- 開發(fā)環(huán)境
- 基礎(chǔ)示例
- 總結(jié)
ELK 簡介
ELK 是 Elastic 公司提供的三個產(chǎn)品組件,配合使用可以完成日志記錄功能。
- E(ElasticSearch):存儲日志
- L(Logstash):收集、處理和轉(zhuǎn)發(fā)日志
- K(Kibana):提供日志檢索功能的 Web 應(yīng)用
有關(guān) ELK 的其它信息請參看:ELK教程
開發(fā)環(huán)境
- Oracle JDK 1.8.0_201
- Apache Maven 3.6.0
- IntelliJ IDEA (Version 2018.3.3)
基礎(chǔ)示例
安裝 ElasticSearch,Logstash 和 Kibana。
在 Logstash
bin目錄下新增配置文件logstash_tcp.conf,重啟 Logstash(參考:CentOS 7.x 安裝 Logstash 6.x)。
input {
tcp {
host => "0.0.0.0"
mode => "server"
port => 9600
codec => "json"
}
}
output {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "tcp-%{+YYYY.MM.dd}"
}
}
說明:
-
input配置參考:Input plugins -
output配置參考:Output plugins
修改 Kibana 配置文件
config/kibana.yml,添加elasticsearch.url: "http://127.0.0.1:9200",重啟 Kibana(參考:CentOS 7.x 安裝 Kibana 6.x)修改需要配合 ELK 記錄日志的工程,在
pom.xml中添加logstash-logback-encoder依賴。
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.2</version>
</dependency>
- 修改 Logback 配置文件,添加
net.logstash.logback.appender.LogstashTcpSocketAppender。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36}: %msg%n"/>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 配置 Logstash 服務(wù)地址 -->
<destination>[Logstash IP]:9600</destination>
<!-- 日志輸出編碼 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"></encoder>
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
- 登錄 Kibana Web 管理頁面
IP:5601,執(zhí)行Create Index Pattern,配置完成后點擊Discover,選中Available fields中的message,點擊add,頁面刷新后可以看到上報的日志。
注意:Create Index Pattern前確保 Elasticsearch 中有數(shù)據(jù),這樣會自動刷新出 Elasticsearch 中已有的 Index,可以按照提示創(chuàng)建。
注意:本示例 Logback 配置實現(xiàn)日志同步發(fā)送到 Logstash,生產(chǎn)環(huán)境中最好配置異步日志記錄,異步日志配置請參考:Logback 異步日志配置
異步日志配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36}: %msg%n"/>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- 配置 Logstash 服務(wù)地址 -->
<destination>[Logstash IP]:9600</destination>
<!-- 日志輸出編碼 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"></encoder>
</appender>
<!-- 異步日志記錄 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<appender-ref ref="LOGSTASH"/>
</appender>
<root level="INFO">
<appender-ref ref="ASYNC"/>
</root>
</configuration>