項目中之前都是采用數(shù)據(jù)庫來記錄日志,雖然記錄還算挺方便,但是每次都要到數(shù)據(jù)庫來查詢,如果日志在單獨的數(shù)據(jù)庫還好,只是有點麻煩。如果記錄的日志數(shù)據(jù)庫和生產(chǎn)正式庫在一起,不僅會影響生產(chǎn)庫的正常使用,也會帶來安全隱患。
項目早期沒有統(tǒng)一規(guī)劃,也是時間倉促,沒有做好日志的規(guī)劃,所有日志都記錄到數(shù)據(jù)庫中。的確也遇到了性能問題,因此在了解ELK的基礎上,使用其作為日志采集、處理和檢索的幾本框架。
大體框架
日志數(shù)據(jù)流如下,應用將日志落地在本地文件,部署在每臺服務器上的FileBeat負責收集日志,然后將日志發(fā)送給LogStash;LogStash將日志進行處理之后,比如parse等;然后將處理后的Json對象傳遞給ElasticSearch,進行落地并進行索引處理;最后通過Kibana來提供web界面,來查看日志等。因為ES是基于Lucene的,所以Kibana支持Lucene查詢語法。
對于日志數(shù)據(jù)流特別大的情況,LogStash會造成擁堵,這個時候可以使用消息隊列來進行緩沖。同時,日志一旦進過LogStash之后,會不方面一些流處理程序來讀取。這個時候使用kafka就比較好了,因為kafka是將消息持久化在本地,流處理應用可以從消息的offset初始的地方來讀取。加入kafka的后的流程如下: