SpringBoot使用ELK日誌收集
在之前寫過一篇文章介紹ELK日誌收集方案,感興趣的可以去看一看,點選這裡----->《ELK日誌分析方案》。
這裡在對ELK做一下簡述,ELK是有Elastic公司的三個元件配合進行日誌收集,分別是:
- ElasticSearch:用於儲存日誌資訊。
- Logstash:用於收集、處理和轉發日誌資訊。
- Kibana:提供可搜尋的Web視覺化介面。
當然,現在很多都配合著Beats進行使用,這裡不做過多描述,感興趣的可以檢視官網, www.elastic.co/cn/products… ,這裡有很多對Beats的描述。
1.2 安裝
有關ELK安裝筆者之前都寫過關於Linux環境下的安裝,如下:
其他環境安裝方式類似,基本上都是下載壓縮包解壓這一套流程。
2.SpringBoot日誌輸出到Logstash
這裡以logback日誌為例,新建專案,在專案中加入logstash-logback-encoder依賴,完整pom如程式碼清單所示。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.dalaoyang</groupId> <artifactId>springboot_logstash</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot_logstash</name> <description>springboot_logstash</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.3</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 複製程式碼
接下來新建一個logback-spring.xml檔案,配置logback日誌資訊,注意這裡配置的destination屬性,輸出的要和logstash配置的對應上,不然收集不上,內容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>127.0.0.1:4560</destination> <!-- 日誌輸出編碼 --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern> <pattern> { "logLevel": "%level", "serviceName": "${springAppName:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}", "rest": "%message" } </pattern> </pattern> </providers> </encoder> </appender> <root level="INFO"> <appender-ref ref="LOGSTASH" /> <appender-ref ref="CONSOLE" /> </root> </configuration> 複製程式碼
修改啟動類,加入一個mvc方法,主要用於輸出日誌,如下所示。
package com.dalaoyang; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class SpringbootLogstashApplication { Logger logger = LoggerFactory.getLogger(SpringbootLogstashApplication.class); @GetMapping("test") public void test(){ logger.info("測試初始一些日誌吧!"); } public static void main(String[] args) { SpringApplication.run(SpringbootLogstashApplication.class, args); } } 複製程式碼
3.Logstash配置
logstash配置如下,再次提醒一下,輸入要與剛剛配置的對應上,輸出為本地es:
input { tcp { mode => "server" host => "0.0.0.0" port => 4560 codec => json_lines } } output { elasticsearch { hosts => "localhost:9200" index => "springboot-logstash-%{+YYYY.MM.dd}" } } 複製程式碼
4.測試
開啟kibana管理頁面,新增剛剛建立的索引,如圖所示。

然後進入發現頁,選擇剛剛的索引,如下所示。

接下來在瀏覽器多次訪問剛剛在專案中輸出日誌的方法,查詢控制檯,如下所示。

然後在進入kibana檢視,不光是日誌內容,還有自定義的屬性也顯示出來了。
