雖然作為一個(gè)后端開發(fā)辕棚,可能對日志系統(tǒng)lek的直接應(yīng)用多過于學(xué)習(xí)維護(hù)焦人,但是我們運(yùn)維維護(hù)的elasticsearch總是崩竖独,每次都說我用得不對,出于這個(gè)原因砂客,決定對lek進(jìn)行一次粗略的學(xué)習(xí)泥张,對基本概念和使用方法記錄和總結(jié)。
我們的lek
lek是三個(gè)工具鞠值,負(fù)責(zé)數(shù)據(jù)采集的logstash媚创,負(fù)責(zé)存放和搜索的elasticsearch,負(fù)責(zé)數(shù)據(jù)展示的kibana齿诉,在我們公司還有用到一個(gè)負(fù)責(zé)數(shù)據(jù)上報(bào)的kafka筝野,kafka也是logstash的數(shù)據(jù)來源。
按照我們現(xiàn)在的使用場景主要是:記錄用戶行為事件粤剧,我也是主要以存儲用戶事件為例來學(xué)習(xí)這三個(gè)工具歇竟,畢竟學(xué)了沒有應(yīng)用場景很難徹底掌握。
主要操作按照數(shù)據(jù)流向來講抵恋。
用戶操作調(diào)用外部接口焕议,外部接口調(diào)用微服務(wù),其中有些微服務(wù)是底層上報(bào)服務(wù)弧关,而上報(bào)服務(wù)將kafka封裝盅安,約定一個(gè)kafka topic對應(yīng)一個(gè)用戶行為唤锉,比如登錄,注冊别瞭,產(chǎn)生消費(fèi)窿祥。用戶每個(gè)行為都會調(diào)用到這個(gè)上報(bào)服務(wù),所以負(fù)載非常高蝙寨,但是得益于kafka優(yōu)秀的性能晒衩,我們的一些監(jiān)聽事件的需求得以實(shí)現(xiàn),并且最重要的是可以解耦墙歪,比如當(dāng)用戶登錄超過3天送代金券或者說用戶登錄時(shí)等級超過某個(gè)級別時(shí)送什么東西听系。每個(gè)服務(wù)之間相互獨(dú)立,互不干擾虹菲,只需要監(jiān)聽相應(yīng)的topic就完事了靠胜。
然后logstash也是監(jiān)聽了kafka的所有的用戶事件廣播,將kafka的廣播內(nèi)容轉(zhuǎn)化成對應(yīng)es中預(yù)先設(shè)定好的的數(shù)據(jù)類型毕源,將數(shù)據(jù)過濾浪漠,拼接,批量之后脑豹,對es發(fā)起存儲請求郑藏,將用戶在什么時(shí)間段干了什么存進(jìn)es中。
logstash存進(jìn)elasticsearch的大量數(shù)據(jù)瘩欺,通過elasticsearch的優(yōu)秀搜索性能,在全文檢索拌牲,日志分析這個(gè)場景上俱饿,es比mysql搜索起來快很多(為了提高數(shù)據(jù)可用性,我們還將同樣的數(shù)據(jù)存儲進(jìn)一個(gè)分月分表的mysql中塌忽,但是很少用拍埠,搜索起來也比es慢很多),然后這些數(shù)據(jù)可以讓我們數(shù)據(jù)中心分析土居,或者是做一些年度榜單枣购,或者是用戶個(gè)人年度總結(jié)的一些數(shù)據(jù)來源,又或者是用戶統(tǒng)計(jì)擦耀。
kibana作為es數(shù)據(jù)可視話工具棉圈,在日常中用得比較多。比如經(jīng)常有運(yùn)營讓我?guī)兔茨硞€(gè)用戶是不是真的連續(xù)登陸能領(lǐng)取優(yōu)惠還是在欺騙我們的運(yùn)營眷蜓,或者是測試說我們莫名其妙改了他的密碼分瘾,我們會用他曾經(jīng)干了什么來打他的臉,或者是被盜號了ip多次變化吁系,或者是怎樣的一些用戶行為需要查詢的德召。打開kibana白魂,點(diǎn)一點(diǎn)就能把相關(guān)的數(shù)據(jù)輕松找到,而不用寫腳本上岗,或者復(fù)雜的es查詢語句福荸。
之后會每天學(xué)習(xí)一個(gè)工具,在此記錄發(fā)表肴掷。
ps:在網(wǎng)上看到很多公司通過lek來記錄服務(wù)日志逞姿,但是我們公司并沒有那么多資源可以搭建滿足所有服務(wù)日志采集的lek,所以只記錄最重要的用戶事件捆等。滞造。。要是有條件栋烤,可以通過logstash把所有日志都存進(jìn)es谒养,特別是針對微服務(wù)來說,這樣明郭,像是調(diào)用鏈的數(shù)據(jù)來源买窟,可視化日志,日志分析都有可能實(shí)現(xiàn)薯定。