Sentry基本原理

2021-09-29 11:19:33 字數 1852 閱讀 5464

官方文件:sentry官網

sentry 是乙個實時事件日誌記錄匯集的平台。其專注於錯誤監控以及提取一切事後處理所需資訊而不依賴於麻煩的使用者反饋。它分為客戶端和服務端,客戶端(目前客戶端有python, php,c#, ruby等多種語言)就嵌入在你的應用程式中間,程式出現異常就向服務端傳送訊息,服務端將訊息記錄到資料庫中並提供乙個web頁方便檢視。

sentry由python編寫,原始碼開放,效能卓越,易於擴充套件,目前著名的使用者有disqus, path, mozilla, pinterest等。

簡而言之就是對我們的應用錯誤資訊記性整理和彙總,並且可以郵件通知。讓我們可以及時監控系統的出錯情況。

那麼sentry是如何實現實時日誌監控報警的呢?首先,sentry是乙個c/s架構,我們需要在自己應用中整合sentry的sdk才能在應用發生錯誤是將錯誤資訊傳送給sentry服務端。根據語言和框架的不同,我們可以選擇自動或自定義設定特殊的錯誤型別報告給sentry服務端。

系統架構

sentry的服務端分為web、cron、worker這幾塊,我們的應用只是把錯誤資訊上報給sentry的web端。web處理後放入訊息佇列或redis記憶體佇列,worker從佇列中消費資料進行處理。

主要處理這些資料的邏輯和佇列的壓力都在sentry服務端那邊。所以實質上對我們系統效能的影響不大。

聚合策略

sentry 按照策略將日誌事件進行聚合,從而提供乙個issueevents。這麼做就是為了智慧型地幫助我們組合關聯的日誌資訊,減少人工的日誌資訊的提取工作量,關注乙個issue首先關注這些聚合的事件。但是這個策略分組並不會那麼智慧型,sentry 主要按照以下幾個方面,優先順序從高到低進行日誌事件的聚合:

stacktrace

exception

template

messages

要注意的是,如果日誌記錄比較隨意,聚合的效果可能不盡如人意。例如:兩個無關的事件但是 stacktrace 相同,那麼 sentry 會將它們分到同乙個issue下。

錯誤資料上送原理

sentry會借助logback將我們定義需要上送的日誌進行【sentry訊息上報】,其上報的過程通過原始碼:

可以看出,他會將要上報的資訊通過執行緒池進行非同步上報,最小程度影響接入客戶端的效能。弊端就是該事件未必能按發生的順序被sentry服務接收。

如果上送的日誌資訊過多,sentry乙個緩衝,如果有配置緩衝目錄,會進行一定的緩衝,預設的緩衝大小10。

但是緩衝目錄是本地目錄,先寫入本地磁碟,然後再慢慢推。所以對io的消耗也是不可忽略的,所以一般也不建議開啟。

sentry是個輔助工具,無法替代日誌、監控

sentry 是帶有一定策略的問題分析工具,以樣本的形式展示部分原始日誌的資訊。資訊不全面的同時,使用過程中也可能出現 sentry 聚合所帶來的負面影響,特別是日誌記錄質量不夠的情況下。

與傳統的監控系統相比,sentry 更依賴於發出的日誌報告,而另外一些隱藏的邏輯問題或者業務問題很可能是不會得到反饋的。

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...

8 2 1 基本原理

乙個舞台動畫物件在包含許多舞台資訊 出現在何處,佔多大面積,處在什麼角度,是否可見 這些資訊分別儲存在動畫物件的屬性中。在 中讀取這些屬性可以了解物件的位置 大小 角度等狀態資訊 修改這些屬性可以改變物件的位置 大小 角度等狀態。如果從資料的角度去理解,動畫就是在固定時間間隔點不斷修改動畫物件某項屬...

Csocket基本原理

我通過幾個採用 csocket 類編寫並基於 client server 客戶端 服務端 的網路聊天和傳輸檔案的程式 在除錯這些程式的過程中,追蹤深入至 csocket 類核心原始碼 sockcore.cpp 對於csocket 類的執行機制可謂是一覽無遺,並且對於阻塞和非阻塞方式下的 socket...