目前項目中,採用的是微服務框架,對於日誌,採用的是logback的配置,每一個微服務的日誌,都是經過File的方式存儲在部署的機器上,可是因爲日誌比較分散,想要檢查各個微服務是否有報錯信息,須要挨個服務去排查,比較麻煩。因此但願經過對日誌進行聚合,而後經過監控,可以快速的找到各個微服務的報錯信息,快速的排查。java
對於ELK,主要是分爲Elastic Search、Logstash和Kibana三部分:其中Logstash做爲日誌的匯聚,能夠經過input、filter、output三部分,把日誌收集、過濾、輸出到Elastic Search中(也能夠輸出到文件或其餘載體);Elastic Search做爲開源的分佈式引擎,提供了蒐集、分析、存儲數據的功能,採用的是restful接口的風格;Kibana則是做爲Elastic Search分析數據的頁面展現,能夠進行對日誌的分析、彙總、監控和搜索日誌用。linux
本次使用ELK主要則是做爲日誌分析場景。json
本次部署的目錄爲【/data/deploy/elk】下,首先須要下載,下載命令爲: vim
# cd /data/deploy/elk # wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
解壓到當前目錄:restful
# tar -zxvf elasticsearch-6.4.3.tar.gz
相關配置:app
# cd elasticsearch-6.4.3/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帳號直接啓動,須要新建立用戶,而後切換新用戶去啓動,執行命令以下:cors
-- 建立新用戶及受權 # groupadd elsearch # useradd elsearch -g elsearch -p elasticsearch # cd /data/deploy/elk/ # chown -R elsearch:elsearch elasticsearch-6.4.3 -- 切換用戶,啓動 # su elsearch # cd elasticsearch-6.4.3/bin # sh elasticsearch &
啓動過程當中,會出現一些報錯信息,如:框架
一、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]elasticsearch
二、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]tcp
解決問題(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格式的返回信息,判斷安裝成功。
下載安裝包:
-- 切換到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,查看是否啓動成功。
下載安裝包:
-- 切換到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 codec => json_lines } } output { elasticsearch { hosts => ["localhost:9200"] } }
啓動Logstash:
# cd /data/deploy/elk/logstash-6.4.2/bin # nohup sh logstash -f logstash.conf &
查看日誌,無報錯信息,默認啓動成功。
在微服務中,須要兩步操做:
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.1</version> </dependency>
-- 新增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" />
經過以上的配置,基本上ELK和微服務之間,已經配置完成,接下來須要經過在Kibana中建立索引等進行日誌的搜索和查看。
能夠新建一個全局的索引,【Index pattern】設置爲【*】,點擊下一步至完成爲止。
如截圖所示,能夠經過Discover和新建的索引,對日誌進行詳細的查看,而且能夠選擇具體的字段進行查看。在右上角,能夠經過選擇不一樣的時間段,對日誌進行查看和搜索。
如2中截圖所示,能夠經過添加filter,對日誌進行過濾查詢。而後點擊Save後,能夠建立新的查詢。
建立完查詢後,能夠在Visualize中,建立一個新的圖示,經過查詢進行建立。建立Dashboard,依賴Visualize圖示,進行展現。
即依賴關係:Dashboard -》 Visualize -》 Search
在本項目中,Search主要是經過增長了兩個Filter:①service:「ff-watersource」 ②severity:「ERROR」,查詢的是微服務爲ff-watersource的error級別的日誌。而後根據本Search,依次建立Visualize和Dashboard,最終在Dashboard中,能夠監控日誌信息的頁面爲:
以上,日誌聚合分析的實現,就算完成了。