一、使用背景
目前專案中,採用的是微服務框架,對於日誌,採用的是logback的配置,每個微服務的日誌,都是通過File的方式儲存在部署的機器上,但是由於日誌比較分散,想要檢查各個微服務是否有報錯資訊,需要挨個服務去排查,比較麻煩。所以希望通過對日誌進行聚合,然後通過監控,能夠快速的找到各個微服務的報錯資訊,快速的排查。
二、ELK分析
對於ELK,主要是分為Elastic Search、Logstash和Kibana三部分:其中Logstash作為日誌的匯聚,可以通過input、filter、output三部分,把日誌收集、過濾、輸出到Elastic Search中(也可以輸出到檔案或其他載體);Elastic Search作為開源的分散式引擎,提供了蒐集、分析、儲存資料的功能,採用的是restful介面的風格;Kibana則是作為Elastic Search分析資料的頁面展示,可以進行對日誌的分析、彙總、監控和搜尋日誌用。
本次使用ELK主要則是作為日誌分析場景。
三、ELK部署
1、Elastic Search安裝
本次部署的目錄為【/data/deploy/elk】下,首先需要下載,下載命令為:
# cd /data/deploy/elk # wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
解壓到當前目錄:
# tar -zxvf elasticsearch-6.4.3.tar.gz
相關配置:
# cd elasticsearch-6.4.2/config
# vim elasticsearch.yml
-- 增加如下內容:
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
Elastic Search啟動:由於ES的啟動不能用root賬號直接啟動,需要新建立使用者,然後切換新使用者去啟動,執行命令如下:
-- 建立新使用者及授權 # groupadd elsearch # useradd elsearch -g elsearch -p elasticsearch # cd /data/deploy/elk/ # chown -R elsearch:elsearch elasticsearch-6.4.2 -- 切換使用者,啟動 # su elsearch # cd elasticsearch-6.4.2/bin # sh elasticsearch &
啟動過程中,會出現一些報錯資訊,如:
1、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
2、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決問題(1):將當前使用者的軟硬限制調大。
# vim /etc/security/limits.conf
-- 在後面增加一下配置後,儲存退出
es soft nofile 65535
es hard nofile 65537
-- 不需要重啟,重新登入即生效
-- 檢視修改命名是否生效
# ulimit -n 65535
# ulimit -n
-- 結果65535
# ulimit -H -n 65537
# ulimit -H -n
-- 結果65537
解決問題(2):調大elasticsearch使用者擁有的記憶體許可權
-- 切換到root使用者 # sysctl -w vm.max_map_count=262144 -- 檢視修改結果 # sysctl -a|grep vm.max_map_count -- 結果顯示:vm.max_map_count = 262144 -- 永久生效設定 # vim /etc/sysctl.conf -- 在檔案最後增加以下內容,儲存後退出: vm.max_map_count=262144
解決以上問題後,再次啟動:
# su - elsearch # cd /data/deploy/elk/elasticsearch-6.4.3/bin/
# sh elasticsearch &
啟動成功後,訪問:http://ip:9200,可以有json格式的返回資訊,判斷安裝成功。
2、Kibana的安裝
下載安裝包:
-- 切換到root使用者 # su -- 下載 # cd /data/deploy/elk/ # wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.2-linux-x86_64.tar.gz
解壓配置:
# tar -zxvf kibana-6.4.2-linux-x86_64.tar.gz # cd kibana-6.4.2-linux-x86_64/config/ # vim kibana.yml -- 增加如下配置: server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "http://localhost:9200" kibana.index: ".kibana"
啟動Kibana:
# cd /data/deploy/elk/kibana-6.4.2-linux-x86_64/bin # sh kibana &
啟動成功後,訪問http://ip:5601,檢視是否啟動成功。
3、Logstash安裝
下載安裝包:
-- 切換到root賬號 # su # cd /data/deploy/elk # wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.tar.gz
解壓配置:
# tar -zxvf logstash-6.4.2.tar.gz # cd logstash-6.4.2/bin -- 新增編輯配置檔案 # vim logstash.conf -- 增加以下內容: input { tcp { port => 5044 codes => json_lines } } output { elasticsearch { hosts => ["localhost:9200"] } }
啟動Logstash:
# cd /data/deploy/elk/logstash-6.4.2/bin # nohup sh logstash -f logstash.conf &
檢視日誌,無報錯資訊,預設啟動成功。
四、微服務配置
在微服務中,需要兩步操作:
1、pom.xml檔案增加依賴
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.1</version> </dependency>
2、修改logback.xml配置檔案
-- 新增appender <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>192.168.11.199:5044</destination> <queueSize>1048576</queueSize> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern> <pattern> { "severity":"%level", "service": "%contextName", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}", "rest": "%message->%ex{full}" } </pattern> </pattern> </providers> </encoder> </appender> -- <root>節點中,增加: <appender-ref ref="LOGSTASH" />
五、Kibana的使用
通過以上的配置,基本上ELK和微服務之間,已經配置完成,接下來需要通過在Kibana中建立索引等進行日誌的搜尋和檢視。
1、建立索引
可以新建一個全域性的索引,【Index pattern】設定為【*】,點選下一步至完成為止。
2、日誌搜尋
如截圖所示,可以通過Discover和新建的索引,對日誌進行詳細的檢視,並且可以選擇具體的欄位進行檢視。在右上角,可以通過選擇不同的時間段,對日誌進行檢視和搜尋。
3、建立查詢
如2中截圖所示,可以通過新增filter,對日誌進行過濾查詢。然後點選Save後,可以建立新的查詢。
4、建立Visualize和Dashboard
建立完查詢後,可以在Visualize中,建立一個新的圖示,通過查詢進行建立。建立Dashboard,依賴Visualize圖示,進行展示。
即依賴關係:Dashboard -》 Visualize -》 Search
在本專案中,Search主要是通過增加了兩個Filter:①service:“ff-watersource” ②severity:“ERROR”,查詢的是微服務為ff-watersource的error級別的日誌。然後根據本Search,依次建立Visualize和Dashboard,最終在Dashboard中,可以監控日誌資訊的頁面為:
以上,日誌聚合分析的實現,就算完成了。