為什麼要用ELK?
ELK實際上是三個工具,Elastricsearch + LogStash + Kibana。一般情況下我們可以把日志儲存在日志檔案當中,也可以把日志存入資料庫當中。但随着業務量的增加,日志資料量也會不斷增加。我們通過ELK可以更好的收集、管理、分析日志。
收集過程架構圖
1、ElasticSearch
Elasticsearch是一個基于Lucene的搜尋伺服器。它提供了一個分布式多使用者能力的全文搜尋引擎,基于RESTful web接口。它能很友善的使大量資料具有搜尋、分析和探索的能力。
本文使用ES版本為elasticsearch-7.6.2。官網下載下傳,安裝配置十分簡單,可自行百度。
2、Logstash
Logstash 是開源的伺服器端資料處理管道,能夠同時從多個來源采集資料,轉換資料,然後将資料發送到您最喜歡的 “存儲庫” 中。這邊我們的存儲庫是 Elasticsearch。
本文使用Logstash版本為logstash-7.6.2。
官網下載下傳位址:https://www.elastic.co/cn/downloads/logstash
建立一個配置檔案logstash-simple.conf,内容為:
input { stdin { } }
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
執行啟動腳本:
通路測試:http://localhost:9600
注意:在執行啟動腳本時可能會報錯,我把我遇到的問題列出來
1,找不到或無法加載主類Files
解決方法:去除logstash.bat中"%CLASSPATH%"的引号。是的是去除引号。
2,報編碼問題,參數發生錯誤。 (ArgumentError) invalid byte sequence in US-ASCII
解決方法:logstash安裝路徑不能有中文。
3,不到或無法加載主類 7.7.0\logstash-core\lib\jars\animal-sniffer-annotations-1.14.jar
解決方法:logstash安裝路徑不能有空格。
3、Kibana
Kibana 讓您能夠可視化 Elasticsearch 中的資料并操作 Elastic Stack,是以您可以在這裡解開任何疑問:例如,為何會在淩晨 2:00 被傳呼,雨水會對季度資料造成怎樣的影響。
本文使用kibana-7.6.2-windows-x86_64版本
官網下載下傳:https://www.elastic.co/downloads/kibana
修改Kebana配置檔案,讓其指向ElasticSearch
輕按兩下腳本啟動,通路測試:http://localhost:5601
4、整合SpringBoot + Logstash
首先修改logstash的配置并重新開機。作用是開啟logstash服務,接收logback日志。
input {
# stdin { }
tcp {
# host:port就是上面appender中的 destination,
# 這裡其實把logstash作為服務,開啟9250端口接收logback發出的消息
host => "127.0.0.1" port => 9250 mode => "server" tags => ["tags"] codec => json_lines
}
}
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
在maven配置檔案中添加依賴
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
添加日志架構logback的配置,配置日志輸出
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<!--日志導出的到 Logstash-->
<appender name="stash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:9250</destination>
<!-- encoder必須配置,有多種可選 -->
<encoder charset="UTF-8"
class="net.logstash.logback.encoder.LogstashEncoder" >
<!-- "appname":"ye_test" 的作用是指定建立索引的名字時用,并且在生成的文檔中會多了這個字段 -->
<customFields>{"appname":"ye_test"}</customFields>
</encoder>
</appender>
<!--日志輸出到控制台規則 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d[%level]%c{100}.%M:%L%m%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="stash"/>
</root>
</configuration>
啟動springboot項目,并在Kibana中檢視日志
參考文章 :https://mp.weixin.qq.com/s/QC7AtZ8xW1z9MrbCtiUEvw