厲害了我的Log分析系統

By Mike

前言

在資訊爆炸的電腦世界中存在著許多訊息,例如伺服器的連線狀態、資料庫的存取內容、或是檔案的執行動作,這些資訊往往被記錄在稱為「日誌(log)」的檔案之中。而這些日誌檔的種類非常多樣,如apache、syslog、防火牆等。當今天發生資安事件時,如網頁遭受SQL Injection攻擊或伺服器被掃Port,往往我們都須透過這些日誌檔來進行分析與追溯。然而,每一種日誌檔的格式都不盡相同,若沒有經過多道程序與龐大時間的處理,無法輕易地彙整不同類型的日誌檔以進行分析,而Elastic Stack便是為了解決這一類問題而誕生的。

Elastic Stack

Elastic Stack的前身為E.L.K Stack,是一種蒐集、彙整、查詢及分析日誌檔的系統架構,它並不是一套軟體,而是由三個Elastic NV公司開發的軟體所組成,分別為「Elasticsearch」、「Logstash」以及「Kibana」,原始命名便是取三個軟體的第一個字母。

E.L.K Stack不需要繁複的人工處理,只要事先寫好規則便能自動化彙整不同來源及種類的日誌檔,並將結果儲存在共同空間內,以視覺化的方式統計、分析這些日誌檔。在E.L.K Stack中,Logstash擔任日誌檔蒐集、過濾及轉送的角色;Elasticsearch則用於儲存複雜的日誌檔,並提供新增、讀取、修改、刪除(CRUD)等功能;而Kibana則是將Elasticsearch中的日誌檔讀出並於網頁中以圖形化方式呈現,透過整合三個不同功能的軟體,建立一個高效率的日誌檔彙整系統。

之後,E.L.K Stack加入了「Beats」作為輕量型蒐集日誌檔的角色,便改名為Elastic Stack,其整體的流程:Beats在各處蒐集不同的日誌檔並轉送至Logstash,由Logstash將這些日誌檔進行過濾與格式轉換的動作再轉發至Elasticsearch儲存,而Kibana再從Elasticsearch中取得檔案並顯示於網頁中,底下將依序簡介它們的功能與細部的執行內容。

Beats

Beats在Elastic Stack中負責蒐集日誌檔,而Beats是一款專門蒐集各式類型日誌檔的軟體,例如蒐集文件檔的Filebeat、監控網路流量的Packetbeat、蒐集Windows事件的Winlogbeat,根據不同輸入的需求,皆有相對應的Beat負責。在Elastic Stack的架構中,Beat蒐集到的日誌檔會直接發送到Logstash進行後續的處理。

Logstash

Elastic Stack中負責處理日誌檔格式的便為Logstash,它是一套資料蒐集軟體,可以接收來自不同來源且格式不相同的日誌檔,與Beat雷同,但差異在能進一步對原始的Log資料做進階分析處理,並且能夠將這些日誌檔根據事前撰寫好的規則進行格式化,再轉送到不同的輸出位置。

控制Logstash如何處理日誌檔的便是三個主要需要撰寫的Plugin,分別是「Input」、「Filter」及「Output」。其中Input可以設定Logstash的日誌檔接收來源與方法,例如用TCP Socket接收,或是監控主機中的日誌檔,若有變動則記錄下來;而Filter則進行格式化與字串切割等動作,將原先接收到的日誌檔,從較不易解析的日誌檔轉換成易讀的Json格式;最後由Output設定要轉送的目的地,在Elastic Stack中便轉送至Elasticsearch。

雖然Logstash亦具備蒐集日誌檔的功能,但由於Logstash所耗的效能較大,而許多情況皆須要將負責蒐集檔案的軟體架設於伺服器中,Logstash可能會影響伺服器的運作,因此在Elastic Stack中,由Beats專職蒐集日誌檔,藉此將正規化的功能分開,以減少不必要的消耗。

Elasticsearch

Elasticsearch在Elastic Stack中擔任資料庫的角色,具有分散式儲存空間的特性,可以將多筆資料拆成不同組合,並儲存於不同地點。舉個例子,假設有「(1), (2), (3), (4), (5), (6)」六筆資料以及「A, B, C」三個點,每個點都是一台裝有Elasticsearch的主機,而Elasticsearch會將它拆成1和2、3和4、5和6三個組合,A、B、C三點分別儲存不同的資料組,例如A儲存(1)(2)及(3)(4);B點儲存(3)(4)及(5)(6);C點則儲存(1)(2)及(5)(6)。如此一來,若任何一個點故障時,還是能從其他點取得備份檔案,減少資料遺失的風險。

除此之外,Elasticsearch還擁有NoSQL的特性,使其能夠儲存欄位數不等與欄位不同的資料,並且支援全文搜索,能夠進行所有欄位的搜索,只要有任一欄符合搜尋內容的資料便會回傳,後續Kibana便能連結Elasticsearch進行搜尋。

Kibana

在Elastic Stack中,Kibana負責將儲存在Elasticsearch中的日誌檔圖形化,讓許多文字表示的日誌檔能轉換為圓餅圖、直條圖、折線圖等易懂的統計圖。除此之外,Kibana還擁有其他方便的功能,好比說提供簡易的搜尋語法,能夠輕鬆地篩選想查看的資料;提供利用機器學習將異常的日誌檔標示出來;或是利用地圖的方式呈現日誌檔來源的分佈圖,讓使用者能夠更快速便利的分析日誌檔。

總結

Elastic Stack(E.L.K Stack)提供了節省人力的日誌檔彙整功能,提高分析日誌檔人員的工作效率,對於追溯資安事件發生的源頭也能更加迅速與準確,現今如Stack Overflow、Netflix、LinkedIn及Medium等知名企業也開始使用Elastic Stack。若因日誌檔過於繁雜而感到困擾,不妨試試Elastic Stack來管理日誌。

Reference

[1] [料理佳餚] 介紹 Elasticsearch 分散式搜尋系統

[2] What is the ELK Stack? Why, it’s the Elastic Stack.

[3] Logstash介紹

[4] 安裝 ElasticSearch + Kibana 實現中文全文搜尋與數據分析

[5] These 15 Tech Companies Chose the ELK Stack Over Proprietary Logging Software

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。