SpringBoot配置ELK日誌分析系統搭建
SpringBoot配置ELK日誌分析系統
ELK介紹
引用網上別人的介紹:
Logstash:日誌收集工具,可以從本地磁碟,網路服務(自己監聽埠,接受使用者日誌),訊息佇列中收集各種各樣的日誌,然後進行過濾分析,並將日誌輸出到Elasticsearch中。
Elasticsearch:日誌分散式儲存/搜尋工具,原生支援叢集功能,可以將指定時間的日誌生成一個索引,加快日誌查詢和訪問。
Kibana:視覺化日誌Web展示工具,對Elasticsearch中儲存的日誌進行展示,還可以生成炫麗的儀表盤。
環境配置
準備工作
- 首先建議在linux上配置ELK會更為方便,Windows對元件相容較差,官網上各種版本都有可以自行下載。
附上傳送門:https://www.elastic.co/cn/downloads - 伺服器需要java執行環境,配置方式也不贅述了,不會的請移步傳送門:
http://www.runoob.com/w3cnote/win7-linux-java-setup.html - 在根目錄建立名為elk的資料夾
mkdir elk
將下載好的三個檔案解壓進資料夾中
部落格中資料夾的結構為:
elk:
elasticsearch
logstash
kibana
配置Elasticsearch
vi /elk/elasticsearch/config/elasticsearch.yml
//配置外網連線,如果不能用請檢查防火牆配置
network.host: 0.0.0.0
http.port: 9200
//後臺啟動elasticsearch服務
/elk/elasticsearch/bin/elasticsearch &
啟動沒有報錯成功後,在瀏覽器輸入ip:9200埠,顯示下圖所示為啟動成功
配置Kibana
vi /elk/kibana/config/kibana.yml
//常用配置:
elasticsearch.url: "http:localhost:9200" //配置elasticsearch所在的IP和埠
server.port: 8888 //設定服務埠即視覺化頁面對映埠
server.host: "IP" //設定服務IP
啟動測試
/elk/kibana/bin/kibana &
啟動完成沒有報錯後,在瀏覽器輸入IP:Ports,在配置檔案中配置的地址,
出現如下頁面為成功
配置Logstash
我們在專案中使用的是springboot自帶的logback,我們使用自定義的配置檔案
首先在logstash目錄中建立一個資料夾
mkdir /elk/logstash/webconfig
建立並編輯一個新配置檔案
vi /elk/logstash/webconfig/log_elk.conf
在配置檔案中新增
配置檔案詳細入門參考傳送門:https://www.cnblogs.com/moonlightL/p/7760512.html
input {
# 我們建立了兩個微服務demo 所以建立兩個不同的輸入,將兩個服務的日誌分別輸入到不同的索引中
tcp {
mode => "server"
host => "0.0.0.0" # 允許任意主機發送日誌
type => "elk1" # 設定type以區分每個輸入源
port => 4567
codec => json_lines # 資料格式
}
tcp {
mode => "server"
host => "0.0.0.0"
type => "elk2"
port => 4667
codec => json_lines
}
}
filter {
#Only matched data are send to output.
}
output {
# For detail config for elasticsearch as output,
# See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
if [type] == "elk1" {
elasticsearch {
action => "index" # 輸出時建立對映
hosts => "192.168.87.136:9200" # ElasticSearch 的地址和埠
index => "elk1" # 指定索引名
codec => "json"
}
}
if [type] == "elk2" {
elasticsearch {
action => "index" #The operation on ES
hosts => "192.168.87.136:9200" #ElasticSearch host, can be array.
index => "elk2" #The index to write data to.
codec => "json"
}
}
}
啟動Logstash
//-f後可以接指定的配置檔案,也可以是一個目錄,它會自動將目錄中的所有配置檔案一起匯入合成一個配置檔案,實現多配置檔案啟動
//單檔案:
/elk/logstash/bin/logstash -f /elk/logstash/wegconfig/log_elk.conf &
//目錄:
/elk/logstash/bin/logstash -f /elk/logstash/wegconfig &
Logstash啟動比較慢,最後啟動成功後顯示:
準備微服務
使用idea建立springboot專案,勾選web元件。
在resource資料夾下建立配置檔案logback-spring.xml
<?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">
<!--配置logstash的ip和埠,在logstash配置檔案中-->
<destination>localhost:4567</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>
新建一個IndexController類
@RestController
public class IndexController {
private final Logger logger = LoggerFactory.getLogger(getClass());
@GetMapping("/index")
public Object index() {
logger.debug("======ELK2測試=======");
logger.info("======ELK2測試=======");
logger.warn("======ELK2測試=======");
logger.error("======ELK2測試=======");
return "success";
}
}
在另一個微服務中也同理建立,只需要修改logback-spring.xml中的Logstash埠號,在Controller中日誌輸出的內容也可以做簡單區分。
最後啟動兩個微服務。
執行測試
- 依次啟動Elasticsearch,Kibana,Logstash和兩個微服務
- 開啟Kibana頁面
頁面中已經有了我們配置的兩個索引,其中有11條日誌是在我們啟動微服務時springboot輸出的日誌,在有第一條日誌通過tcp傳送到Logstash,Logstash將它轉發到Elasticsearch時Elasticsearch自動為我們建立了索引。
接著我們在Kibana中新增該索引
兩個索引新增完成後
我們在瀏覽器中訪問兩個微服務的index地址後重新整理kibana頁面。
簡單的搭建到此就結束了