當我們還是單體部署我們的Spring Boot項目的時候,日志通常都是放在我們的Linux服務(wù)器目錄,使用簡單的Spring Boot已經(jīng)包含的Logback框架即可實現(xiàn)。當我們基于Docker部署我們的分布式或者集群項目之后,這種方式已經(jīng)是走不通了,我們有必要搭建一套日志系統(tǒng),方便各個節(jié)點輸出日志到統(tǒng)一的日志系統(tǒng),統(tǒng)一處理日志。
ELK (Elasticsearch, Logstash, Kibana)是一個比較成熟的方案。基于Docker部署ELK變得更加簡單。
安裝Docker
這里就不介紹如何安裝Docker,請自行Google。
創(chuàng)建elk實例
我們基于github的docker-elk 項目來實現(xiàn)elk,拉取代碼:
$ git clone https://github.com/deviantony/docker-elk.git
啟動docker容器
$ cd docker-elk
$ docker-compose up -d
上面的命令會等待比較久,因為需要下載鏡像,會創(chuàng)建三個實例。
說明
docker-elk是基于官Docker官方的鏡像構(gòu)建:
Kibana的web入口:
http://localhost:5601
該elk棧的默認端口為:
- 5000: Logstash TCP input.
- 9200: Elasticsearch HTTP
- 9300: Elasticsearch TCP transport
- 5601: Kibana
配置SpringBoot應(yīng)用
- 在我們的Spring Boot項目
build.gradle中增加依賴:
compile 'net.logstash.logback:logstash-logback-encoder:5.1'
- 添加配置文件為
resources/logback-spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<property name="LOGSTASH_HOST" value="${LOGSTASH_HOST:-${DOCKER_HOST:-localhost}}"/>
<property name="LOGSTASH_PORT" value="${LOGSTASH_PORT:-5000}"/>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${LOGSTASH_HOST}:${LOGSTASH_PORT}</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
配置文件中通過LOGSTASH_HOST和LOGSTASH_PORT兩個環(huán)境變量來指定logstash的地址和端口。如果環(huán)境變量中沒有這兩項配置,會默認使用localhost和5000。
- 修改
resources/application.properties
logging.config=classpath:logback-spring.xml
測試
@RunWith(SpringRunner::class)
@SpringBootTest
class LoggerTest {
var logger = LoggerFactory.getLogger(LoggerTest::class.java)
@Test
fun test() {
logger.info("ImWiki")
logger.warn("ImWiki")
logger.error("ImWiki")
logger.debug("ImWiki")
}
}
運行單元測試代碼,應(yīng)用就會產(chǎn)生日志,并通過Logstash輸出到Elastic search。
Kibana查看日志
在瀏覽器中打開http://localhost:5601可以看到Kibana dashboard的頁面,通過Kibana查看Elastic search的日志。
創(chuàng)建索引
當我們通過上面的測試產(chǎn)生了日志之后,我們必須先創(chuàng)建索引才能查看日志

在輸入框輸入
logstash-*,然后下一步
檢索內(nèi)容

總結(jié)
通過Docker,只用非常簡單的幾步即可完成ELK集中日志處理平臺,非常方便管理部署在Docker或者其它地方的Spring Boot應(yīng)用的日志。