帮你确定应用程序异常的四款在线跟踪服务

来源:互联网 时间:2018-01-19

【51CTO.com快译】 摘要: 作为软件开发者,应用程序的异常是再稀疏平常不过的事情了。那么,您怎么才能准确发现到用户为何会碰到了问题、具体错误在哪里、甚至是应用程序如何崩溃的呢?


正文:

众所周知,软件开发既具挑战性,又比较复杂。具体来说,无论我们是在开发登录页面的APP还是Linux的内核驱动程序,软件都需要记录各种信息,并做大量的分析。


在上述这些信息中,如果您想找出为什么用户会碰到某个问题、具体错误在哪里、甚至是应用程序如何崩溃的话,分析它们的异常是必不可少的。


让我们先来看看下面的例子,异常消息显示了由于数据库表--tblmovies未被找到,所以异常PDOException被抛出。在此,您还能看到它是从初始点开始,执行到一个类的具体某行时所抛出的异常(我们已经将其编辑为可阅读的形式)。


PDOExceptionthrownwithmessage"SQLSTATE[HY000]:Generalerror:1nosuchtable:tblmovies".
Stacktrace:
#28PDOExceptionin/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:186
#27PDO:preparein/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:186
#26Zend/Db/Adapter/Driver/Pdo/Statement:preparein/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:212
#25Zend/Db/Adapter/Driver/Pdo/Statement:executein/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/TableGateway/AbstractTableGateway.php:239
#24Zend/Db/TableGateway/AbstractTableGateway:executeSelectin/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/TableGateway/AbstractTableGateway.php:209
#23Zend/Db/TableGateway/AbstractTableGateway:selectWithin/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/src/Movies/src/Services/Database/MovieTable.php:48
...
#5Zend/Stratigility/Middleware/ErrorHandler:processin/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-expressive/src/Middleware/LazyLoadingMiddleware.php:60
#4Zend/Expressive/Middleware/LazyLoadingMiddleware:processin/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-stratigility/src/Next.php:128
#3Zend/Stratigility/Next:processin/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php:102
#2Zend/Stratigility/MiddlewarePipe:processin/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-expressive/src/Application.php:374
#1Zend/Expressive/Application:runin/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/book-code/iteration-five/public/index.php:29
#0{closure}in/Users/settermjd/Documents/Business/Projects/ZendExpressiveCourse/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语句中的任意表达式。


例如:


SELECTrequest.user_ip,count(*),count(server.host),avg(body.message.seconds),max(timestamp)
FROMitem_occurrence
WHEREitem.counter=840
ANDtimestamp>unix_timestamp()-60*60*24
GROUPBYrequest.user_ip
ORDERBYcount(*)DESC
LIMIT100

它的仪表板虽然简单,但是信息却很丰富。默认情况下,您可以看到:


最近24小时内的前10大问题
最近24小时内的前5大活动项
截至上周的前5大活动项

您可以根据环境对报告进行进一步筛选。通过查看所有项目的列表,您可以获知异常发生的次数、24小时内的趋势、上次发生时间、其所处的环境和使用到的语言。


进一步点开某个项目,您可以了解到异常的整个历史过程,包括查看到使用的浏览器、操作系统、请求方法、请求的URL,服务器繁忙程度、异常消息体等。


与此同时,Rollbar还能将异常与一个版本控制系统的问题库相关联,从而通过完整的历史分析和推送式的部署来予以解决。它所呈现出的信息不但全面而且界面友好。


定价机制

和其他服务一样,Rollbar也提供了一系列扁平化的价格体系。他们既有为个人项目提供的免费版本,也有从每月49美元到每月599美元的尊享版本。


除了这些,您还可以根据实际需求对默认选项进行取舍,以满足特殊的安全与合规的需要。


结论

这就是市场上最好的四款在线式异常跟踪服务。就我个人而言,Rollbar和Sentry是我的最爱,因为它们功能丰富且仪表盘显示专业,一句话:全面!当然,它们所提供信息量对于您所面对的真实情况可能会有所过剩。


如果您已经准备好了针对应用程序所碰到的异常进行跟踪,或者想从自行开发的跟踪方案迁移到一个专业外包服务之上的话,我强烈建议您考虑我们上述所提到的这四款服务。我相信总有一款能适合您的应用程序需求,让您能将更多的资源投入到应用程序本身的研发上面。


原文标题:The Top Four Exception Tracking Services,作者:Matthew Setter


【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】


相关阅读:
Top