對我的文章有興趣,歡迎到我的網站上 https://chechiachang.github.io 閱讀其他技術文章,有任何謬誤也請各方大德直接聯繫我,感激不盡。
有板友問到,要如何選擇要不要用 ELK,其實也這是整篇 ELK 的初衷。這邊分享一下 ELK 與其他選擇,以及選擇解決方案應該考慮的事情。
Prometheus: 開源的 time series metrics 收集系統
Stackdriver: GCP 的 log 與 metrics 平台
Elastic Cloud: ELK 的 Sass
或是依照需求混搭,各個服務使用的各層套件是可以相容,例如
基本考量的面向
各個方法都各有利弊,完全取決於需求
Sass: 指的是直接用 Elasitc Cloud,或是直接使用公有雲的服務(ex. 在 GCP 上使用 stackdriver)
Cloud Self-hosted: 在公有雲上使用 ELK
On-Premised: 自己在機房搭設
看公司的安全政策,允許將日誌及監控數據,送到私有網路以外的地方嗎?如果在防火牆內,搞不好 port 根本就不開給你,根本不用考慮使用外部服務。
要知道服務的 log 其實可以看出很多東西.如果有特別做資料分析,敏感的資料,金流相關數據,通常不會想要倒到第三方服務平台。
可能有做金流的,光是安全性這點,就必須選擇自架。
金錢成本 + 維護成本
金錢成本就看各個服務的計費方式
維護成本: 工程師的月薪 * 每個月要花在維護服務的工時比例
一般 Sass 代管的服務,會降低維護成本,基本上就是做到網頁點一點就可以用。
如果公司有完整的維護團隊,有機房,服務的使用量也很大,當然 self-hosted 是比較省。
中小型企業以及新創,服務在公有雲上的,直接使用Sass 服務往往比較節省成本,服務直接由 Sass 維護,節省很多機器上管理跟日常維護。
避免迷思,買外部服務的帳單是顯性的,報帳時看得到,而工程師維護的時間成本是隱性的。self-host 可能省下 Sass 費用,但工程因為分了時間去維護,而影響進度。這部分就看團隊如何取捨。
如果應用都跑在公有雲上,可以考慮使用雲平台提供的監測服務,使用便利,而且整合度高。ex GCP 上,要啟用 Stackdriver 是非常輕鬆的事情,只是改一兩個選項,就可以開啟 / 關閉 logging 與 metrics
如果是 On-premised 自家機房,也許 self-hosted 會更為適合。
在大多數時候,沒有需要更改到服務的核心設定,都可以不可律客製化程度,直接使用 Sass 的設定,就能滿足大部分需求。可以等有有明確需求後再考慮這一點。短期內沒有特殊需求就可以從簡使用。
使用GKE 到 Stackdriver 的話,對主機本身的機器是沒有控制權的,執行的 pipeline 也不太能更改
Elastic Cloud 有提供上傳 elasticsearch config 檔案的介面,也就是可以更改 server 運行的參數設定
Self-Hosted 除了上述的設定,還可以依照需求更改 ELK / prometheus 服務,在實體機器上的 topology,cpu 記憶體的資源配置,儲存空間配置等,可以最大化機器的效能。
資料流量大,儲存空間消耗多,服務負擔大,可能就會需要擴展。
一個是資料量的擴展。一個是為了應付服務的負擔,對 ELK 服務元件做水平擴展。
除了 elasticsearch 以爲的元件,例如 kibana,apm-server, beats 都可以透過 kubernetes 輕易的擴展,唯有 elasticsearch ,由於又牽扯上述資料量的擴展,以及分佈,還有副本管理,index 本身的 lifecycle 管理。Elasticsearch 的 scaling 設定上是蠻複雜的,也有很多工要做。index 的 shards / replicas 設定都要注意到。否則一路 scale 上去,集群大的時候彼此 sharding sync 的效能消耗是否會太重。
Stackdriver 從使用者的角度,是不存在服務節點的擴展問題,節點的維護全都給 Sass 管理。資料量的擴展問題也不大,只要整理資料 pipeline,讓最後儲存的資料容易被查找。
Prometheus 是自帶 time series database,stackdriver 也是 time series 的儲存。ELK 的 elasticsearch 是全文搜索引擎,用了 timestamp 做分析所以可以做到 time series 的資料紀錄與分析。這點在本質上是完全不同的。
個人心得,如果驗證全新的 business model,或是還不確定的需求,可以使用 ELK 做各種複雜的查詢
如果需求明確,收進來的 log 處理流程都很明確,也許不用使用 ELK。
Elastic 有出許多不同的增值服務
而 ELK 以外也都有不同的解決方案,例如
相較之下 ELK 在這塊其實沒有特別優勢。
我這邊要特別說 Elastic Cloud vs ELK
Elatic Cloud 的運行方式,是代為向公與恩平台(aaws, gcp,...),帶客戶向平台租用機器,然後把 ELK 服務部署到租用的機器上。用戶這邊無法直接存取機器,只能透過 ELK 介面或是 Kibana , API 進入 ELK。Elastic Cloud 會監>控無誤節點的狀況,並做到一定程度的代管。
這邊指的一定程度的代管,是 Elastic Cloud 只是代為部署服務,監控。有故障時並不負責排除,如果 ELK 故障,簡單的問題(ex. 記憶體資源不足)會代為重開機器,但如果是複雜的問題,還是要用戶自己處理.但是用戶又沒有主>機節點的直接存取權限,所以可能會造成服務卡住無法啟動,只能透過 Elastic Cloud 的管理介面嘗試修復。
使用服務除了把服務都架設完以外,還是需要定期要花時間處理 performance tuning,設定定期清理跟維護。包括 kafka, redis, mongoDB, cassandra, SQLs...都是一樣,架構越複雜,效能要求越高,這部分的工都會更多。如果公司有 DBA,或是專職維護工程師,那恭喜就不用煩惱。
Elasticsearch server 目前用起來,算是是數服務中,維護上會花比較多時間的服務。
如果公司有人會管 ELK,個人建議是可以 self-host