实践搭建Sentry异常中心结合Laravel使用

实践搭建Sentry异常中心

Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题。它主要专注于持续集成、提高效率并且提升用户体验。Sentry 分为服务端和客户端 SDK,前者可以直接使用它家提供的在线服务,也可以本地自行搭建;后者提供了对多种主流语言和框架的支持,包括 ReactAngularNodeDjangoRoRPHPLaravelAndroid.NETJAVA 等。同时它可提供了和其他流行服务集成的方案,例如 GitHubGitLabbitbuckherokuslackTrello 等。目前公司的项目也都在逐步应用上 Sentry 进行错误日志管理。

当项目到生产环境了出现异常怎么办,怎么迅速定位? Sentry 为我们提供了一个集中式异常处理的服务, 但是用 Sentry 官方服务要收费,为了节省开支就选择自己搭建一个 Sentry 服务,在搭建 Sentry 服务的时候遇到一些小问题,在这里分享一下。

搭建

为了闭坑,查看文档,并找好搭建方式。看到官网说是支持 docker 搭建,心里美滋滋。

sentry 官网: https://docs.sentry.io
git 仓库地址:https://github.com/getsentry/onpremise/

git clone https://github.com/getsentry/onpremise.git
cd onpremise/
cp sentry/config.example.yml sentry/config.yml 
cp sentry/sentry.conf.example.py sentry/sentry.conf.py
# install 安装
./install.sh

# 一键启动
docker-compose up -d

# 默认nginx服务暴露的端口是9000 我这里已经被占用了, so 我改了一下docker-compose.yml的nginx端口

然后 服务器ip+端口 查看就可以登录了(登录账户是在 install 的时候会提示设置哦)

sentry

配置Laravel异常上报

sentry 官网: https://docs.sentry.io/platforms/php/laravel/
安装包: composer require sentry/sentry-laravel=1.2.0
发布资源: php artisan vendor:publish --provider="Sentry\Laravel\ServiceProvider"

  • laravel .env配置 dsn

dsn

  • 测试一下

test

test-ques

  • vi App\Exceptions\Handle.php
public function report(Exception $exception)
{
    if (app()->bound('sentry') && $this->shouldReport($exception)) {
        app('sentry')->captureException($exception);
    }

    parent::report($exception);
}

配置完 Laravel 的异常监听的话,之后出现的异常都会传送到 Sentry 测试一下

laravel-error

错误

test-sentry

配置邮箱

虽然异常已经集中式放到平台上了,但是我们平时不可能一直去看平台,也就是还需要配置其他的消息推送, 可以配置钉钉机器人, 邮箱。博主这里就使用邮箱了,但是邮箱有个坑.

issuehttps://github.com/getsentry/sentry/issues/4252

问题在于配置好了邮箱发送邮件一直有问题,后来找了github才发现, Sentry 暂时不支持 ssl 连接, 而且 Tls != Ssl,这个就尴尬了 所以博主这里使用 腾讯邮箱的 25端口 进行发送了, 大家如果有企业邮箱的话是可以支持 Tls的异常监听的话

以下是我的配置

  • vi sentry/config.yml
mail.backend: 'smtp'  # Use dummy if you want to disable email entirely
mail.host: 'smtp.qq.com'
mail.port: 25
mail.username: 'xxx@foxmail.com'
mail.password: 'xx'
mail.use-tls: false
#The email address to send on behalf of
mail.from: 'xxx@foxmail.com'
  • 重新构建加载一下配置
docker-compose down
docker-compose up -d
  • 测试一下邮箱 然后看一下效果

test-email

  • 然后在重新抛出一个异常看看邮箱能不能收到

email

sentry

您的支持是对我最大的鼓励!

发表于: 作者:憧憬。
关注互联网以及分享全栈工作经验的原创个人博客和技术博客,热爱编程,极客精神
Github 新浪微博 SegmentFault 掘金专栏