前一篇得到某友人回饋表示看完後對於Sentry和ELK的選擇上有困惑,感謝友人讓我今天有題目可以寫XD
Sentry是基於事件(Event
)的監控平台。
Event
不見得是錯誤,也有可能是一個Debug
, Info
level的事件。這得看開發者怎麼去規劃,哪些功能出錯該噴Error
等級的Event,哪些噴Fatal
,哪些噴Warning
等等...
通常我們會將回報給Sentry的方法和系統上的Log放在一起,尤其是在Log.error()
,Log.fatal()
這種特別嚴重的狀況時。因此Client端在操作過程中觸發Log時,便會發送給Sentry。
並且通常來說,用戶在操作過程中遇到預料外的狀況,例如閃退、資料出不來等等,都會反射性地去重新嘗試。
因此一樣的Event
會重複發送到Sentry,這時我們會將它們歸類成一則Issue
。
ELK是由Elasticsearch
、Logstash
和Kibana
三個服務字母開頭所組成。
Logstash
主要職責是抓取專案的Log同時會對Log做Formatted。抓取
、篩選
、輸出
。Elasticsearch
,甚至可以直接寫進DB。Elasticsearch
扮演著搜尋引擎的角色,它就是專注於把查詢功能做到最棒好。Logstash
把資料餵給Elasticsearch
,因此能夠查詢的到Log。Kibana
可以想像成是Elasticsearch
的高級GUI介面。也可以理解成
Logstash
過濾,Elasticsearch
儲存,Kibana
展示
Logstash
也能做到的事,但他更輕量化,且不佔用系統資源。Beat
,將資料吐給Reids
,接著Logstash
到Redis
抓取到那些Client端Log。看到這漸漸明白這兩者是沒辦法比較的,
一個是著重於搜集異常的事件,
一個是著重於盡可能搜集所有Log,並且歸類整理它。
要我舉例來說兩者的差別的話:
後面不贅述
後面不贅述
據我所知ELK和Sentry都有Send Alert功能,不過玩不夠透徹,不清楚ELK支援到多廣。
Sentry 帶給我更專心於Exception的資訊,一則Issue需要的資訊都歸類放好了,我能很專心的去思考。且會出現在上面的Issue,通常都是有問題該解決的。
ELK 則是把所有你想知道跟你不想知道的東西都給你了,它保證了我能獲得足夠的資訊,我能更清楚來龍去脈,只是要花時間查。