【力薦】幫你確定應用程序異常的四款在線跟蹤服務
譯文【51CTO.com快譯】眾所周知,軟件開發既具挑戰性,又比較復雜。具體來說,無論我們是在開發登錄頁面的APP還是Linux的內核驅動程序,軟件都需要記錄各種信息,并做大量的分析。
在上述這些信息中,如果您想找出為什么用戶會碰到某個問題、具體錯誤在哪里、甚至是應用程序如何崩潰的話,分析它們的異常是必不可少的。
讓我們先來看看下面的例子,異常消息顯示了由于數據庫表--tblmovies未被找到,所以異常PDOException被拋出。在此,您還能看到它是從初始點開始,執行到一個類的具體某行時所拋出的異常(我們已經將其編輯為可閱讀的形式)。
- PDOException thrown with message "SQLSTATE[HY000]: General error: 1 no such table: tblmovies".
- Stacktrace:
- #28 PDOException in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:186
- #27 PDO:prepare in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:186
- #26 Zend\Db\Adapter\Driver\Pdo\Statement:prepare in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:212
- #25 Zend\Db\Adapter\Driver\Pdo\Statement:execute in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/vendor/zendframework/zend-db/src/TableGateway/AbstractTableGateway.php:239
- #24 Zend\Db\TableGateway\AbstractTableGateway:executeSelect in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/vendor/zendframework/zend-db/src/TableGateway/AbstractTableGateway.php:209
- #23 Zend\Db\TableGateway\AbstractTableGateway:selectWith in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/src/Movies/src/Services/Database/MovieTable.php:48
- ...
- #5 Zend\Stratigility\Middleware\ErrorHandler:process in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/vendor/zendframework/zend-expressive/src/Middleware/LazyLoadingMiddleware.php:60
- #4 Zend\Expressive\Middleware\LazyLoadingMiddleware:process in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/vendor/zendframework/zend-stratigility/src/Next.php:128
- #3 Zend\Stratigility\Next:process in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php:102
- #2 Zend\Stratigility\MiddlewarePipe:process in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/vendor/zendframework/zend-expressive/src/Application.php:374
- #1 Zend\Expressive\Application:run in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/public/index.php:29
- #0 {closure} in /Users/settermjd/Documents/Business/Projects/Zend Expressive Course/book-code/iteration-five/public/index.php:30
那么您的應用程序也會記錄這些信息,而且能夠記錄到一個集中存儲的日志區域嗎?如果是這樣的話,它們:
- 所記錄的信息容易被獲取到嗎?
- 是否能夠被有效地進行解析?
- 您是否能回溯到問題的提交源頭(和提交者)呢?
- 它是否提供了額外的元數據和有助于理解的提示呢?
- 是否會包含個人身份信息(PII)、憑證、或其他任何形式的且需要進行安全加固的信息呢?
如果不能夠滿足上述所有、或者至少是大部分問題的話,這就會存在問題的隱患。在此,您可以通過閱讀本文,了解到四款在線的異常跟蹤服務。請注意,我們的羅列并無特別的優先順序。
1.Raygun
承蒙可口可樂、微軟、Slack和3M的賞識,Raygun能為各種應用異常的跟蹤提供時髦且專業的用戶界面(UI)。由于已有現成且詳盡的指導性文檔,Raygun很容易被上手。
除了基本的安裝設置文檔之外,Raygun還能為其各個方面的服務提供大量的擴展文檔(https://raygun.com/docs)。其中包括:
- 設置審計日志。
- 管理用戶和組。
- 配置集成(其中包括Bitbucket、PivotalTracker、Visual Studio Team Services、Zendesk、Slack、YouTrack和Trello)。
- 各種API和網絡鉤子。
Raygun能夠支持各種語言、平臺和框架。這些包括PHP、.Net、安卓、iOS、MacOS、WordPress、Java、Python、Cold Fusion和C++。
Raygun所提供的服務主要集中在兩個方面:崩潰報告(crash reporting)和真實用戶監控(real user monitoring)。崩潰報告旨在通過查找,來了解和修復那些造成應用崩潰的各種異常。對于每一個被發送到Raygun的異常,它們會被分解和重新組織,并且根據如下條目進行分類顯示:
- 何時發生的
- 發生在哪個頁面上
- 異常的消息體本身
- 發生的區域
例外可以通過各種類型的標準來進行過濾,其中包括瀏覽器類型、操作系統類型、宿主機以及機器名等。而真實用戶監控,則是從另一個方面,提供了有關應用是如何被執行的細節,包括如下的度量維度(如果適用的話):
- 平均加載的時間
- 頁面加載的時間
- 客戶數與瀏覽量
這種功能可幫助用戶跟蹤每一個部署對應用程序的影響,是正面還是負面的。同時,用戶的儀表板界面也能夠被完全定制,以滿足您的項目和團隊的需要。具體包含的細節包括:
- 加載時間
- 全局會話的分布
- 活動使用用戶
- 會話數量
- 總用戶數
- 新用戶數
- 返回的用戶數
- 平均加載的時間
它的另一個便利的特點是Pulse。Pulse能夠表明通過各種接近實時的事件,來顯示當前網站的各種用戶狀態。通過它所提供的視圖,您可以詳細地查看到如下的信息:
- 加載的時間
- 各種會話的數量
- 各類用戶的數量
- 24小時內的會話趨勢
- 那些最近的請求
- 平均加載的時間
- 那些請求最多的網頁
- 那些最近的崩潰
如果您深入到頁面的級別,您還可以得到諸如為何頁面表現不佳之類的綜合信息,其中也包括DNS的查詢、延遲、SSL的開銷、頁面生成以及傳輸的時間。
定價機制
Raygun的定價是根據用戶所訂閱的服務來的。您可以選用整個平臺,或是崩潰報告,當然也可以只選擇真實用戶監控。所以說,這算是一種非常靈活的定價結構。
具體費用從每月19美元到高達每月1499美元不等。價格會隨著功能的增加而上漲。另外,如果您去注冊的話,會有14天的免費試用期。
2.Airbrake
Airbrake正在被諸如SendGrid、Groupon、SoundCloud、Salesforce、以及TED所使用著。它符合的標準包括:HIPAA、PCI和SOX。
Airbrake能支持大量的語言和平臺,包括:Java、JavaScript、PHP、Go、Node、Swift、Magento、Django、.Net和Ruby on Rails等。它能夠與一系列的標準服務進行集成,其中包括:Bitbucket、GitHub、PivotalTracker、FlowDock、Campfire、Jira、HipChat和assembla。
與Raygun不同,Airblake的UI界面并不那么充實,當然也不會顯示出各種豐富的功能。例如:Raygun支持通過Facebook、Google+、Twigger和GitHub的登錄,而Airblake只支持GitHub一種方式。
另外,Airblake的文檔并不充沛。不過,盡管如此,它的服務本身還是非常優秀的。無論您使用的是什么語言或平臺,它都能為您的上手提供詳細的搭建說明。
通過深入了解,您會發現Airblake使用了開源的錯誤與異常的通知組件,并取代了一般應用程序的默認錯誤處理程序。它能夠捕獲各種標準類型的錯誤,包括:404、500、一般登錄問題和其他一些特定應用的錯誤。
該通知組件將有關應用程序異常的各種詳細信息提供給Airblake,而Airblake籍此進行相應的分析和數據重組,以提供更多的可視化,并且顯示出所發生了異常的各種細節信息。這里所提到的儀表板上能夠顯示的數據包括有如下信息:
- 某一個異常發生的次數
- 錯誤發生的當時環境
- 一條完整路徑的回溯
- 當時的各個參數
- 從上一次部署以來某個異常發生的次數
- 一個部署能夠修復哪些異常
鑒于所處的環境、錯誤數的優先級和用戶類型都會對異常產生過濾,Airblake將這些異常輕松地轉換成了工單號,以方便它們對應上相應的解決方案,并在不同環境中被部署時能夠得以全程跟蹤。
定價機制
Airblake的定價結構相對Raygun來說簡單且扁平化。它支持四種選項,分別從每月49美元到每月249美元遞增。我個人覺得這個扁平式定價結構反而是一個好事,因為您不會犯“選擇恐懼癥”。同樣它也有30天的免費體驗計劃。
3.Sentry.io
Sentry是所有四個選項中令人印象最深刻的一款,它被諸如Dropbox、Airbnb、 Paypal和Microsoft之類的大公司所使用。Sentry由Python所編寫,它能夠支持和處理來自各種語言和應用程序的事件類API。
Sentry所支持的語言和平臺十分廣泛,包括JavaScript、Ember、Python、Ruby on Rails、PHP、iOS、安卓、Go、.Net、Java、Objective-C/Swift和Perl。它所集成的常用開發者服務包括:Slack、GitHub、Trello、Heroku、GitLab、Twilio、PagerDuty、Datadog和YouTrack。
就像這個列表中的大多數服務一樣,它提供廣泛的且可搜索的文件,并且文件的組織方式非常合理。除此之外,Sentry還能夠支持社區論壇。您可以在它們的GitHub庫中查閱和創建問題。
我發現Sentry的儀表板不但布局合理、簡潔,而且組織得非常美觀。您既可以通過它迅速地獲得所有項目的概況,也可以深入到某個特定的項目中,以了解更多。同時你還可以在一個項目中對某些尚未解決,但需要重新分類的問題進行移動。
它的安全和隱私設置對我極具吸引力。在那里,您可以啟用增強的隱私和數據清理,從而確保個人身份信息和其他類型的敏感信息能夠從日志中被擦除,以便他們永遠不會因為不小心而泄露出來。
我們再來看看它的核心功能。所有發給Sentry的異常都會被捕獲到如下的特征信息,其中包括:
- 環境
- 瀏覽器
- 操作系統
- 觸發異常的路徑
- 異常發生的條件
- 軟件的發布信息
- 異常嚴重性
- 服務器名稱
- 最后一次出現的時間點
- 受異常活躍用戶數
- 錯誤類型(HTTP錯誤、500和404)
- 已經發生異常的次數
- 是否已經解決
Sentry還支持一個叫做面包屑(breadcrumbs)的概念。顧名思義,它是一些在問題發生之前的事件線索。
面包屑包含以下功能:
- 消息:描述事件的字符串。最常見的來源是一條傳統日志的混合信息。
- 數據:是圍繞著相關事件的各種元數據的映射(例如str => str)。雖然如今已被消息所代替,但某些傳統系統仍在使用。
- 類別:類別可以用來標簽一個事件。它通常有點類似于日志的名稱,以便您在某個事件發生后更容易地理解它所屬的類別,比如屬于身份驗證類。
- 等級:任何錯誤、警告、信息或調試所涉及到的嚴重等級。
您應該可以看出,上述所列四個領域已經能夠涉及到當前常用列表的諸多方面了。它的另外一個亮點是能夠支持開源模式和全托管服務模式。也就是說,您既可以免費使用,又可以將它外包給Sentry打理,選擇權完全在您手中。
定價機制
說實話在各種服務中,我最喜歡Sentry的定價結構,因為他們支持一種所謂的“愛好者帳戶”,即永久免費的帳戶。它的方便之處在于,如果您只想試驗該服務,而不確定是否真的會將它運用到項目某處時,您就可以參照此模式。
他們所支持價格從每月26美元一直到每月449美元。如果您的需求超過此范圍的話,就像其他的服務那樣,他們也提供企業級的方案。
Sentry還有著基于事件數的每月訂閱套餐和年套餐。欲了解更多的定價和功能信息,請查看https://sentry.io/pricing/。如果您熱衷于試用服務的話,別忘了申請“愛好者帳戶”。
4.Rollbar
使用Rollbar的公司,包括Kayak、Heroku、Salesforce和Instacart。它所支持的語言有:Ruby、PHP、Node、Python和Java,而平臺則包括:iOS和安卓。除了這些,它能與大多數標準的服務相集成,其中包括:Slack、HipChat、Logstash、Mailgun、Jira、Trello、Sprintly、Help Scout和PagerDuty。
Rollbar能符合一系列的行業標準,包括HIPAA、ISO 27001和Privacy Shield(https://www.privacyshield.gov/welcome)。它可以由2048位SSL加密,單點登錄(Single Sign-On)和雙因素認證(2FA)來保護。
和其他所有的服務一樣,它的設置向導能夠幫助您從零開始,其文檔也比較深入透徹。另外除了文檔支持,它還提供電子郵件、IRC(Internet Relay Chat)、電話以及在線聊天方式的支持。
Rollbar通過多種方式來保護信息的私密性。這些功能方式包括:靜態數據加密、PII、PCI數據過濾和去除、用戶活動的審核日志和內部與獨立的滲透(PEN)測試。
由于Rollbar能與GitHub、Bitbucket和GitLab完全集成,因此您在使用的時候,可以方便地跟蹤那些因為提交所導致的問題。這些信息可以通過儀表板、各種API、或者使用RQL(Rollbar的查詢語言,請見https://rollbar.com/docs/rql/)來獲取到。
關于Rollbar的查詢語言(RQL),它在Rollbar中為數據提供了豐富的、類似于SQL的接口。RQL在兩種邏輯表、item_occurrence和部署中都支持SELECT。那些基于GROUP BY、ORDER BY、LIMIT和聚合函數都是可用的,當然也包括WHERE語句中的任意表達式。
例如:
- SELECT request.user_ip, count(*), count(server.host), avg(body.message.seconds), max(timestamp)
- FROM item_occurrence
- WHERE item.counter = 840
- AND timestamp > unix_timestamp() - 60 * 60 * 24
- GROUP BY request.user_ip
- ORDER BY count(*) DESC
- LIMIT 100
它的儀表板雖然簡單,但是信息卻很豐富。默認情況下,您可以看到:
- 最近24小時內的前10大問題
- 最近24小時內的前5大活動項
- 截至上周的前5大活動項
您可以根據環境對報告進行進一步篩選。通過查看所有項目的列表,您可以獲知異常發生的次數、24小時內的趨勢、上次發生時間、其所處的環境和使用到的語言。
進一步點開某個項目,您可以了解到異常的整個歷史過程,包括查看到使用的瀏覽器、操作系統、請求方法、請求的URL,服務器繁忙程度、異常消息體等。
與此同時,Rollbar還能將異常與一個版本控制系統的問題庫相關聯,從而通過完整的歷史分析和推送式的部署來予以解決。它所呈現出的信息不但全面而且界面友好。
定價機制
和其他服務一樣,Rollbar也提供了一系列扁平化的價格體系。他們既有為個人項目提供的免費版本,也有從每月49美元到每月599美元的尊享版本。
除了這些,您還可以根據實際需求對默認選項進行取舍,以滿足特殊的安全與合規的需要。
結論
這就是市場上最好的四款在線式異常跟蹤服務。就我個人而言,Rollbar和Sentry是我的最愛,因為它們功能豐富且儀表盤顯示專業,一句話:全面!當然,它們所提供信息量對于您所面對的真實情況可能會有所過剩。
如果您已經準備好了針對應用程序所碰到的異常進行跟蹤,或者想從自行開發的跟蹤方案遷移到一個專業外包服務之上的話,我強烈建議您考慮我們上述所提到的這四款服務。我相信總有一款能適合您的應用程序需求,讓您能將更多的資源投入到應用程序本身的研發上面。
原文標題:The Top Four Exception Tracking Services,作者:Matthew Setter
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】