【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】