文档章节

Laravel5.3之Errors Tracking神器——Sentry

botkenni
 botkenni
发布于 2016/11/16 09:50
字数 1373
阅读 55
收藏 2

说明:Laravel之bootstrap源码解析中聊异常处理时提到过Sentry这个神器,并打算以后聊聊这款神器,本文主要就介绍这款Errors Tracking神器SentrySentry官网有一句话个人觉得帅呆了:

Stop hoping your users will report errors.

Sentry是一款可用于Production环境的错误跟踪工具,可实时通知Production环境中用户由于一些不可预料行为(或者程序写的有问题)导致程序Crash或Exception,Sentry可以通过Integration如HipChat来发送通知,并且可以通过JIRA Integration来快速创建Issue,然后开发者可以根据这个Issue快速修复程序,并把这个已修复的Hotfix快速部署到生产环境,这样就快速开发快速修补。天下武功,唯快不破。

本文主要推荐下这款神器,并介绍下它的安装和配置,有兴趣的可以关注下这款神器。并且这款神器已经在RightCapital得到长时间应用了,结合HipChat和JIRA用起来很顺手,值得推荐。

开发环境:Laravel5.3 + PHP7

Sentry安装与配置

使用Sentry有两种方式:Sentry Cloud和Sentry Server。Sentry Cloud就是直接使用Sentry提供的服务,注册个账号后然后进行设置就可以使用了,这样Production Code就会把Exception这些敏感数据发送到Sentry Cloud,不过公司使用不建议这么做,毕竟这些Exceptions是有很多敏感数据,而这些数据是放在别人家的云服务器上,谁知道会发生什么呢;Sentry Server是Python写的,可以部署在自己的云服务器上如AWS或Aliyun,如我司是部署在AWS云上,Sentry官方推荐使用Docker Image来部署。当然,不管哪一种方式,使用还是一样的。就有点像Github/Gitlab、Bitbucket/Bitbucket Server。

这里就介绍下Sentry Cloud如何使用,只有一个用户时,Sentry每天免费5000 events:

  1. 首先是注册个账号。这个去官网注册下就OK了。

  2. 安装Sentry包。Sentry提供针对几乎每种语言的平台Sentry Platform,这里介绍下如何在Laravel程序中集成Sentry。

Sentry for Laravel中介绍了如何集成进Laravel,主要就是安装下Sentry Laravel包:

// 生产环境也需要这个包,不需要加 --dev
composer require sentry/sentry-laravel

'providers' => array(
    Sentry\SentryLaravel\SentryLaravelServiceProvider::class,
)

'aliases' => array(
    'Sentry' => Sentry\SentryLaravel\SentryFacade::class,
)

php artisan vendor:publish --provider="Sentry\SentryLaravel\SentryLaravelServiceProvider"

在自己的程序中安装好包后,然后在.env配置下SENTRY_DSN。登录进刚刚注册的账号后,先创建个Project得到这个Project的SENTRY_DSN(点击 New Project):

然后点击左上角选择刚刚创建的Project如个人创建的Sentry/Development,然后点击左侧栏的Client Keys就行,把DSN值copy出来填入.env文件中(不是DSN Public值),Sentry_DSN结构是:https://{public_key}:{private_key}@sentry.io/{project_id}

// .env
SENTRY_DSN=Your_Sentry_DSN

同时在Add Integrations,点击左侧All Integrations选择HipChat后,然后选择左侧的HipChat按钮,选择Enable Integration,这样就跳入了HipChat中Integration页面,同意集成就行,如果没注册HipChat账号就注册下就行,HipChat是Atlassian旗下的一款免费的聊天协作工具,电脑端手机端都可以安装,值得推荐。当然,Atlassian全家桶SourceTree(免费)、JIRA(免费/收费)、Bitbucket(免费/收费)、Confluence(免费/收费)、Bamboo(免费/收费)也都值得推荐。

Laravel中异常处理类\App\Exceptions\Handler主要包含两个方法report()sender(),其中report()就是主要用来向第三方service发送异常报告,这里选择向Sentry这个神器发送异常报告,并使用HipChat通知开发人员。这里在report()写上代码:

    /** * A list of the exception types that should not be reported. * * @var array */
    protected $dontReport = [
// \Illuminate\Auth\AuthenticationException::class,
// \Illuminate\Auth\Access\AuthorizationException::class,
// \Symfony\Component\HttpKernel\Exception\HttpException::class,
// \Illuminate\Database\Eloquent\ModelNotFoundException::class,
// \Illuminate\Session\TokenMismatchException::class,
// \Illuminate\Validation\ValidationException::class,
    ];

    /** * Report or log an exception. * * This is a great spot to send exceptions to Sentry, Bugsnag, etc. * * @param \Exception $exception * @return void */
    public function report(Exception $exception)
    {
        // If the exception is instanceOf $dontReport, do not report it.
        if ($this->shouldntReport($exception)) {
            return;
        }

        // Send exception to Sentry if it is set.
        if (env('SENTRY_DSN')) {
            Sentry::captureException($exception);
        } else {
            // Log the exception if the Sentry is not set.
            parent::report($exception);
        }
    }

shouldntReport()会读取$dontReport[ ]值,查找有哪些Exceptions是不需要Report的,在生产环境可以都注销掉,表示用户产生的所有异常都需要发送到Sentry中,并通过手机端HipChat告知开发者,然后使用Sentry::captureException()捕获异常。当然有时由于业务需求,如根据不同模块报异常level不一样,需要定制下Sentry类,这里只是简单捕获异常,并默认为都是error level

OK,所有的工作就这么简单的完成了。

试一下,如在浏览器中输入一个不存在的路由如http://sentry.app:8888/sentry,然后报NotFoundHttpException,查看Sentry有没有捕获到:

然后查看HipChat有没有收到通知:

这里每一次report就是一个event,Sentry对于个人使用是每天免费5000 events。

Sentry的Exception Stack内容很详细,很快就能定位bug在哪,而且还捕获了很多tags,如用户的device,browser,environment等等有用信息,这些信息都可以用来快速定位bug。通过Exception Stack也能发现Laravel的执行流程。

总结:本文主要介绍一款异常捕获神器Sentry,值得推荐,具体使用可以深挖Sentry官网文档和博客,这种提高生产率的神器必须深挖。

© 著作权归作者所有

共有 人打赏支持
botkenni
粉丝 20
博文 409
码字总数 434882
作品 0
西城
程序员
私信 提问
Hadoop Sentry 学习

什么是Sentry? Sentry 是Cloudera 公司发布的一个Hadoop开源组件,它提供细粒度基于角色的安全控制 Sentry下的数据访问和授权 通过引进Sentry,Hadoop目前可在以下方面满足企业和政府用户的...

幽芒
2014/08/06
0
0
Apache Sentry 1.5.0 发布

Apache Sentry 是一个加强的细粒度的基于角色的授权系统,针对存储在 Hadoop 集群中的数据和元数据。 Apache Sentry 1.5.0 发布,此版本更新内容如下: 新特性 [SENTRY-74] - Add column-lev...

oschina
2015/04/16
1K
0
Apache Sentry 1.4.0-incubating 发布

Apache Sentry 是一个加强的细粒度的基于角色的授权系统,针对存储在 Hadoop 集群中的数据和元数据。 Apache Sentry 1.4.0-incubating 发布,此版本现已提供下载,更多内容请看发行说明。 **...

oschina
2014/08/20
1K
0
使用Apache Sentry的Presto

概观 Apache Sentry是一个基于角色的粒度授权模块,适用于Hadoop。Sentry提供了对经过身份验证的用户和应用程序(如Presto)的数据控制和强制执行精确级别权限的功能。 Presto Enterprise与A...

hblt-j
02/13
0
0
Sentry 8.0.4 发布,Python 实时日志平台

Sentry 8.0.4 发布,此版本修复了在一些系统通知摘要无法发送的问题 #2549。 下载: sentry-8.0.4-py27-none-any.whl sentry-8.0.4-py27-none-any.whl.asc sentry-8.0.4.tar.gz sentry-8.0.4......

oschina
2016/01/24
921
0

没有更多内容

加载失败,请刷新页面

加载更多

关于360插件化Replugin Activity动态修改父类的字节码操作

近期在接入360插件化方案Replugin时,发现出现崩溃情况。 大概崩溃内容如下: aused by: java.lang.ClassNotFoundException: Didn't find class "x.x.x.xActivity" on path: 我自己在插件代码......

Gemini-Lin
54分钟前
0
0
mybatis缓存的装饰器模式

一般在开发生产中,对于新需求的实现,我们一般会有两种方式来处理,一种是直接修改已有组件的代码,另一种是使用继承方式。第一种显然会破坏已有组件的稳定性。第二种,会导致大量子类的出现...

算法之名
昨天
17
0
单元测试

右键方法 Go To --> Test,简便快速生成测试方法。 相关注解 @RunWith(SpringRunner.class) 表示要在测试环境中跑,底层实现是 jUnit测试工具。 @SpringBootTest 表示启动整个 Spring工程 @A...

imbiao
昨天
4
0
欧拉公式

欧拉公式表达式 欧拉公式的几何意 cosθ + j sinθ 是个复数,实数部分也就是实部为 cosθ ,虚数部分也就是虚部为 j sinθ ,对应复平面单位圆上的一个点。 根据欧拉公式和这个点可以用 复指...

sharelocked
昨天
5
0
burpsuite无法抓取https数据包

1.将浏览器和burpsuite的代理都设置好 2.在浏览器地址栏输入: http://burp 3.下载下面的证书,并将证书导入浏览器 cacert.der

Frost729
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部