1. 程式人生 > >ELK學習記錄

ELK學習記錄

介紹

開源實時日誌分析平臺ELK能夠解決1.日誌分散;2.日誌量大,查詢麻煩。ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。ElasticSearch主要優化日誌搜尋,Logstash主要解決日誌收集,Kiabana主要是視覺化。

這三個主要關係如圖:

環境搭建:

ElasticSearch

啟動elasticsearch

遇見的一些問題以及解決辦法:

安裝外掛

(外網訪問不需要考慮。公司內網沒辦法使用npm安裝,只能搞一個bignet或者是用公司內搞的npm,參考文章

elasticsearch版本過高的話,只能用server的形式和head通訊,需要更新下ea-head和es的配置,

參考文章。需要配置下es-head的服務埠以及es的埠,需要注意的是,因為我是在虛機部署的ELK,然後在瀏覽器訪問的,所以配置es-head的es的地址,不能寫localhost,需要寫ip。

可以通過紅框判斷es和es-head是否互動成功。

部署多臺機器

我是部署了3臺機器,每個機器都拷貝同一個版本的elasticsearch,然後更改配置檔案,都啟動起來就行,主要配置檔案比較麻煩。

# cluster同一個叢集是相同的
cluster.name: es_cluster
#每個機器的node.name設定不同的來區分
node.name: node0 
path.data: ./data0
path.logs: ./logs

# 當前hostname或IP,這個不能寫0.0.0.0,單機的時候可以寫,多個機器的時候其他節點會找不到
network.host: 10.64.13.24
http.port: 8200

# 增加跨域的配置
http.cors.enabled: true
http.cors.allow-origin: "*"

# 是否是master,是否儲存資料,3臺機器一般要有2個master(n/2+1個)
# data我是都存了,可以只有兩臺機器來存
node.master: true
node.data: true

# 這是其實沒搞的太明白,但是不配置會錯
discovery.zen.ping.unicast.hosts: ["10.64.13.24", "10.99.204.219", "10.100.47.192"]
#一般要有(n/2+1個)個master
#discovery.zen.minimum_master_nodes: 2

bootstrap.memory_lock: false
bootstrap.system_call_filter: false

Logstash

下載的話上面的連結有,需要注意的幾點:

  1. logstash是需要安裝在日誌所在機器。
  2. 需要添加個配置,要搞清楚input,filter,output的概念,input是怎樣輸入的,filter是日誌過濾的一些方式,output我這裡配置的就是傳輸到elasticsearch上面。配置詳解參考文章,很多類似文章,隨便搜。
  3. 傳輸的時候是一行行傳輸的,檔案稍微一丟丟大就卡死了,解決ing ------> 這是機器不穩定的問題,nohup後臺啟動就沒問題了。
  4. 日誌合併的問題:使用logstash的Multiline外掛,參考文章。需要注意的是,我是使用的正則表示式,logstash的正則是ruby的正則,所以語法搜ruby就好了。

Kibana

自己賊傻逼的開了個9000多的埠號和5000多的埠號,用Chrome連不上,糾結了好多天,後來我浩哥告訴說,外面連基本上是8000-9000的端口才行,我就xxx...

其他的安裝之類的參考文章最開始的連結就全部都可以搞定

許可權

其他

下面記錄下其他需要考慮的優化方面的問題。

  1. 日誌的合併。因為是幾條一起過來的,但是合併的好像有點問題,最好是能同一條請求合併一條。  ---->參見logstash
  2. 日誌過濾。需要看看拿debug還是什麼日誌,然後日誌取那一部分。
  3. 正則
  4. 模糊匹配改成精準匹配

一些優化方案:

問題:

這個message太長了,然後比如按照request id搜尋,結果根本沒搜尋出來的欄位(實際是有的,就是沒展示出來),而且有一些欄位是無效的,所以打算在logstash(因為是在logstash進行欄位合併以及過濾匹配的)上面做些處理,過濾一些欄位,然後欄位細化下

其他的還未通,繼續搞,不斷更新

filebeat

目前遇到的問題是,logstash能夠讀取出來日誌,但是可能會佔用機器太多資源,還有log4j2這個東西我用不明白,導致日誌格式很亂。所以考慮直接用filebeat好了。

下載之後解壓,修改filebeat.yml檔案進行配置。

同時更改下logstash的配置,這個參考文章