昨天向各位講述了日記在日常生活的重要性,當發生重大事故的時候我們可以從過往的日記內容查詢鄉端的資料,同理,在 Linux 系統中 Log 日誌可以幫助釐清事情的脈絡與原因,維運人員可以透過 Log 日誌來檢查系統或是應用程式過去在主機 (Host) 發生過什麼事情以此作為依據來校正與優化相關的服務。
以及簡短地提到有一套 EFK 集中式的 Log 系統,能夠提供不同來源將 Log 訊息集中式的儲存在一起,並起提供快速地查詢方法。透過此一系統可以大幅度的提高維運人員除錯的效率也能降低服務發生故障事後無從查證的感覺。
我認為一個 Log 收集系統大致上需要擁有以下五個功能
今天要介紹三個開源專案分別是 Elasticsearch 、 Fluentd 和 Kibana ,來看看 EFK 所組合而成的 Log 收集系統可以做到什麼樣的事情
由上述三個開源專案我們可以清楚的看到他們強大的特性與功能,這邊做一個簡單的整理與分類。
EFK架構可以分為四個部分來看,第一個部分為產生資料,第二個部分是資料處理(包含分析、分類、統一格式等行為),第三部分是提供資料查詢,第四部分為將欲查詢的資料進行視覺化。
由 Application 撰寫 Log 訊息,並且透過 EFK 架構中的 "F" 也就是 Fluentd 來發送資料。
Application 所產生的 Log 訊息會透過 Fluentd 來發送資料,將資料轉發到彙整的 Fluentd 上,透過該彙整 Fluentd 對資料進行加工(如分析、分類、統一格式等動作),最後將資料存入對應的儲存平台。
ElasticSearch 透過索引 (indexing) 、搜索 (search) 以及聚合 (aggregations) 等動作查詢 Log 資訊,使用者能快速取得欲查詢的資料。
透過 Kibana 視覺化系統將 ElasticSearch 所查詢到的資料以視覺化方式如圖表、表格、地圖等視覺化方式呈現。
在了解了 EFK Log 資訊收集系統的架構以及每個元件的合作方式後,明天將把舞台轉向 Kubernetes 的身上,我們如何在 Container 的世界架設一個 EFK Log 資訊收集系統並且收集 Kubernetes 相關的 Log 資訊?