Sentry异常日志系统

  • Jesse
  • 2022-05-07 15:09:52
  • 3979

[[toc]]

日志监控系统

Sentry所做的是收集应用底层代码的崩溃信息,便于排查代码异常

常用方案

  • 1.后端捕获异常记录到日志文件
  • 2.日志文件定时同步并备份到指定盘
  • 3.对日志文件进行关键字匹配, 并将过滤结果通过邮件发送给运维开发人员。

存在问题

  • 1.非实时,无法第一时间感知错误
  • 2.错误信息的获取相对低效,只能从大量日志中上下翻看关联的信息,可能还要在测试环境复现打印一些变量数据
  • 3.日志的处理方式不够灵活,异常类型:api请求、非法请求、脏数据、假异常不能灵活处理
  • 4.监控覆盖面有限,前后端分离,不能有效获取前端、app、脚本等异常

Sentry

官网: https://sentry.io/

Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题。 其专注于错误监控以及提取一切事后处理所需的信息; 支持几乎所有主流开发语言( JS/Java/Python/php )和平台, 并提供了web界面来展示输出错误。 Sentry 分为服务端和客户端 SDK,前者可以直接使用它家提供的在线服务,也可以本地自行搭建; 后者提供了对多种主流语言和框架的支持,包括 React、Angular、Node、Django、PHP、Laravel、Android、.NET、JAVA 等。 同时它可提供了和其他流行服务集成的方案,例如 GitHub、GitLab、bitbuck 等。

与ELK不同,Sentry专注于应用程序产生的错误日志的聚合和监控

安装

git clone https://github.com/getsentry/onpremise.git

cd onpremise
./install.sh

docker-compose up -d

// 创建账号
docker-compose run --rm web createuser

访问

IP:端口

接入

ios

https://docs.sentry.io/platforms/apple/guides/ios/

android

https://docs.sentry.io/platforms/android/

vue

https://docs.sentry.io/platforms/javascript/guides/vue/

laravel

https://docs.sentry.io/platforms/php/guides/laravel/

php

https://docs.sentry.io/platforms/php/

thinkphp

config.php 中设置

// 异常处理handle类
'exception_handle' => function ($e) {
    \Sentry\init([
        'dsn' => 'https://xxx@sentry.io/123',
        'traces_sample_rate' => 1.0,
        'send_default_pii' => true,
        'server_name' => 'server_name1',
        'enviroment' => 'test',
        'release' => 'project_name@1.6.0',
    ]);

    \Sentry\captureException($e);
}

原生PHP

在入口文件处注册:

set_error_handler(
    function($level, $error, $file, $line){
        if(0 === error_reporting()){
            return false;
        }
        throw new ErrorException($error, -1, $level, $file, $line);
    },
    E_ALL
);

register_shutdown_function(function(){
    $error = error_get_last();
    if($error){
        throw new ErrorException($error['message'], -1, $error['type'], $error['file'], $error['line']);
    }
});

set_exception_handler(function($exception){
    \Sentry\init([
        'dsn' => 'https://xxx@sentry.io/123',
        'traces_sample_rate' => 1.0,
        'send_default_pii' => true,
        'server_name' => 'server_name1',
        'enviroment' => 'test',
        'release' => 'project_name@1.6.0',
    ]);

    \Sentry\captureException($e);
});

官方demo

https://try.sentry-demo.com/organizations/advanced-skunk/projects/

本文出自 ShowCj,转载时请注明出处及相应链接。