作者|小熊博望運維經理 —— 王明鬆
簡單介紹一下
- ELK
包括 ElasticSearch、Kibana 和 Logstash,Filebeat 負責在終端進行採集,將數據上報給 Logstash,存儲在 ElasticSearch 或者其他存儲(如 S3),最終通過 Kibana 來呈現數據並進行分析,設置告警等。我們的原環境裏一共有 5 個 ELK 集羣,分別承擔收集審計日誌,收集業務日誌,分析業務日誌的職能。其中收集審計日誌是需要長期保存以供後期;收集業務日誌是主要是錯誤日誌的收集和告警生成;分析業務日誌只是對業務情況進行實時展示,可靠性要求不高。經過評估,我們準備替換掉前兩種收集審計日誌和業務日誌的共計 4 個 ELK 集羣,只保留 1 個需要實時分析業務日誌的集羣。 - 觀測雲
觀測雲是國內領先的可觀測平台,基本功能可以完全替代 ELK 來做日誌收集,並且也可以做進一步的指標生成和告警通知。 - DataKit
DataKit 是觀測雲提供的需安裝到主機上的採集器,也是數據上報給觀測雲的入口。(編者注:觀測雲還提供一種需要獨立部署的可編程數據處理平台 DataFlux Func,也可以作數據採集器使用。)
用觀測雲替換 ELK 的思路是什麼?
我們嘗試了以下幾種替換方案:
方案一:Logstash 接入,只替換 ElasticSearch 和 Kibana
在我們開始測試的時候,因當時 DataKit 1.2.19(2022 年 5 月 12 日之前的版本)不支持串聯 Filebeat 採集器,而之後的 DataKit 版本雖然開始支持串聯 Filebeat,但並不穩定,比如不支持 6.x 版本的 Filebeat。
所以當時的思路是 Logstash 對接 DataKit 的 Logstreaming 採集器,觀測雲替代掉 ElasticSearch 和 Kibana 功能,這不是一個完美的方案,我們還需要維護非常耗費資源而且容易 crash 的 Logstash。這本來就是一個權宜之計,而且在 DataKit 1.4.0 上面實驗用 Logstash 6.x 接入並不穩定,最終放棄。參考文檔:https://docs.guance.com/integ...
方案二:
Filebeat 接入,整體替換掉 ELK
我們向觀測雲提了不少 issue,並都得到了迴應,很快 DataKit 1.4.1 發佈後(2022 年 6 月 7 日)就解決了各些問題,對於 Filebeat 6.x(我們使用的是 6.2.2)和 Filebeat 7.x(我們使用的是 7.12.0)的支持均可以。所以可以啓用 DataKit 的 Beats 採集器支持,直接接收 Filebeat 的輸出。
DataKit 1.4.1 版更新日誌:
https://docs.guance.com/datak...
接入 Filebeat 文檔鏈接:https://docs.guance.com/datak...
這無疑是成本最低,改動最小的一個方案。將對應服務器或者容器鏡像裏的 Filebeat 輸出地址修改為 DataKit 網關地址即可,只不過依然要維護醜陋的 Sidecar。
方案三:程序通過 Socket 直接輸入日誌給 DataKit,整體替換掉 Filebeat 和 ELK
這是最早的一個思路,希望徹底扔掉任何外部程序,通過程序直接將相關日誌對接給 DataKit,啓用 DataKit 的日誌採集的 Socket 端口獲取(跟文件獲取方式是互斥的,只能開啓一個)。
文檔鏈接:https://docs.guance.com/datak...
支持的語言有 Java,Golang 和 Python,對於 json 格式的日誌支持效果非常好。但是這個只能採集應用的日誌,無法採集 Web Server 的 access_log,所以經過測試之後最終還是放棄了這個方案。(編者注:可以使用觀測雲 DataFlux Func 編程平台實現)
最終選擇方案二,DataKit 本身自己也是有日誌採集功能的,為何不用 DataKit 來替換 Filebeat 呢?主要出於以下考慮:
- 我們現階段只需要日誌採集,僅需 DataKit 的小部分能力,可觀測雲默認會按 DataKit 個數收費,如果每台主機都安裝 1 個,數量加起來是一筆不小的開支。雖然也可以改為按時間線收費大幅降低費用,但是相比 Filebeat 可以免費使用,我們優先選擇免費了。
- DataKit 終端安裝包比 Filebeat 要大,在寸土寸金的容器鏡像裏比較奢侈。
- DataKit 帶可配置的 Token ID 信息,用來對應觀測雲 SaaS 端的工作空間 ID,可能需要配置多套 Token ID 來區隔不同環境,這個會對生成容器鏡像的研發造成困擾,不如沿用 Filebeat,上手成本低。
- 因為觀測雲是外部服務,由內網的 Filebeat 先採集,再輸出到指定的有外網 IP 的 DataKit 網關,可以有效減輕 NAT 網關的壓力,也可以方便運維定期升級,做容災等。
參考鏈接:https://docs.guance.com/datak...
(編者注:DataKit 自身也支持代理模式,可以多個內網 DataKit,數據匯聚到 1 個在 DMZ 的代理 DataKit 後,匯聚上報數據,觀測雲只計 1 個接入數。)參考鏈接:https://docs.guance.com/getti...
替換方案是什麼呢?
前置條件
- 開通觀測雲賬號
- 在一台機器上裝好最新版本的 DataKitDataKit 版本:1.4.1 及之後
配置 DataKit
- DataKit 開啓 Beats 數據採集功能
- 確保 TCP 端口對 Filebeat 服務器開放
- source 和 service 可以視情況預置在配置文件裏,這兩個鍵值會傳遞到觀測雲裏
配置 Filebeat
- 修改 Filebeat 的配置文件
- 修改 output.logstash 的 hosts
- 地址改為 DataKit 的網關地址,注意此處填寫多個地址的話不是一份數據多寫,在沒有配置 Load Balance 的情況下,只會隨機選一個 host 寫,配置了 Load Balance 就是負載均衡到多個 host
參考鏈接:https://www.elastic.co/guide/...
替換完成後,使用效果怎麼樣?
- 登錄到觀測雲之後,打開日誌-查看器,即可看到日誌。
- Filebeat 配置 Fields 裏自定義設置的 LogType,product 和 DataKit 裏預置的 source(數據來源)和 service(服務)都能看到。
參考鏈接:https://www.elastic.co/guide/...
替換後的成本收益如何?
- 不再承擔人力成本,穩定性提高
- 節省了維護集羣的人力成本若干。
- SaaS 服務性能彈性,再也不需要再擔心 ELK 集羣空間滿,ELK 集羣性能不足等問題導致集羣停擺。
- 不再承擔授權費
- ELK 如果需要告警並且通知到外部,則需要購買白金級訂閲來實現“檢測告警外部操作”。
- 如果使用 Elastic Cloud,也需要訂閲白金級才能使用“檢測告警外部通知和操作”。
參考鏈接:https://www.elastic.co/cn/sub...
- 基礎設施成本減少 90% 以上
- 替換的外部集羣之前的成本約為:18000 元人民幣每月。轉到觀測雲之後成本僅為幾百元人民幣每月。
- 基礎設施成本縮減為不到之前的 5%,而且 SaaS 服務按量付費,成本會更加彈性。