實時日誌統一收集的好處:php
一、快速定位集羣中問題機器git
二、無需下載整個日誌文件(每每比較大,下載耗時多)github
三、能夠對日誌進行統計負載均衡
a、發現出現次數最多的異常,進行調優處理elasticsearch
b、統計爬蟲ip性能
c、統計用戶行爲,作聚類分析等 spa
基於上面的需求,我採用了 ELK(elasticsearch + logstash + kibana)的方案,安裝方法能夠參考個人項目 ELK_Tutorial,這裏我主要講講我遇到的問題。日誌
一、LVS 分發UDP請求不成功的問題
code
爲了避免影響線上集羣的性能,咱們採起了UDP的方式傳輸日誌消息,以下圖:orm
而負載均衡我採用了LVS,在配置LVS時,我發現須要在keepalived.conf裏面使用MISC_CHECK方法才能在 protocol=UDP的狀況下成功檢測到real_server,而且分發成功,在keepalived.conf中關鍵配置的地方是:
real_server 機器A 12201 { weight 1 MISC_CHECK { misc_path "/etc/keepalived/udp_check.sh 機器A 12201" misc_timeout 10 } }
而udp_check.sh 這個文件是我本身寫的,裏面的內容很簡單:
/usr/bin/nc -uz -w1 $1 $2 | grep succeeded >/dev/null exit $?
這裏須要注意的是udp_check.sh 這個文件的權限,我這裏設置的是 755
二、logstash集羣發送的日誌亂序
這個問題解決方法很簡單,統一每臺logstash機器的系統時間便可。
三、elasticsearch 集羣腦裂
出現腦裂,即沒法選舉出master的狀況,解決方式是加大心跳檢測時間,高負載的狀況下,可能出現master響應較慢,這時不能極端的認爲master down掉了。
附下面是應用後場景(點擊查看大圖)
另外咱們還基於ES API作了分析