优化 Sentry Laravel 事件发送:客户端过滤实践

优化 Sentry Laravel 事件发送:客户端过滤实践

本文介绍如何在 laravel 项目中使用 sentry 时,通过客户端过滤的方式,减少重复事件的发送,从而有效控制 Sentry 的事件配额。我们将通过配置 before_send_transaction 选项,实现对特定 URL 的事务事件的过滤,避免不必要的事件上报。

在 Laravel 项目中使用 Sentry 能够帮助我们追踪和监控应用程序的错误和性能问题。然而,有时我们可能会遇到重复事件大量涌现的情况,导致 Sentry 的事件配额迅速耗尽。虽然 Sentry 提供了服务端限流功能,但并非所有订阅计划都支持。因此,在客户端进行事件过滤成为一种有效的解决方案。

Sentry 提供了 before_send 和 before_send_transaction 配置项,允许我们在事件发送到 Sentry 服务器之前对其进行修改或丢弃。before_send 用于过滤所有类型的事件,而 before_send_transaction 专门用于过滤事务事件。

以下是如何在 Laravel 项目中配置 before_send_transaction 来过滤特定 URL 的事务事件的步骤:

  1. 打开 config/sentry.php 文件。

    该文件包含了 Sentry 的配置信息。如果你的项目中没有该文件,请确保已经正确安装并配置了 Sentry Laravel SDK。

  2. 配置 before_send_transaction 选项。

    在 config/sentry.php 文件中,找到 before_send_transaction 选项。如果该选项不存在,则添加它。该选项接受一个闭包函数,该函数接收一个 SentryEvent 对象作为参数,并返回一个 SentryEvent 对象或 NULL。如果返回 null,则该事件将被丢弃,不会发送到 Sentry 服务器。

    'before_send_transaction' => function (     SentryEvent $transaction ): ?SentryEvent {     // 在这里添加你的过滤逻辑     return $transaction; },
  3. 添加过滤逻辑。

    在 before_send_transaction 闭包函数中,添加你的过滤逻辑。以下是一个示例,该示例过滤了包含 _debugbar、monitoring 或 pleaseignoreme 的 URL 的事务事件:

    'before_send_transaction' => function (     SentryEvent $transaction ): ?SentryEvent {     $ignore = ['_debugbar', 'monitoring', 'pleaseignoreme'];     $request = $transaction->getRequest();     if (isset($request['url'])) {         $check = array_filter($ignore, function ($url) use ($request) {             if (stripos($request['url'], $url) !== false) {                 return true;             }         });          if (count($check) > 0) {             return null;         }     }      return $transaction; },

    代码解释:

    • $ignore 数组包含了需要忽略的 URL 片段。
    • $transaction->getRequest() 获取事务事件的请求信息。
    • stripos($request[‘url’], $url) 检查请求 URL 是否包含 $ignore 数组中的任何一个字符串。stripos 函数是不区分大小写的。注意需要判断$request[‘url’]是否存在,否则会报错。
    • 如果 URL 包含需要忽略的字符串,则 array_filter 返回一个非空数组,count($check) > 0 为真,函数返回 null,丢弃该事件。
    • 否则,函数返回 $transaction,允许该事件发送到 Sentry 服务器。
  4. 测试你的配置。

    确保你的过滤逻辑正常工作。你可以通过访问包含被过滤 URL 片段的页面,并检查 Sentry 控制台来验证事件是否被成功过滤。

注意事项:

  • before_send 和 before_send_transaction 会影响所有事件的发送,因此请谨慎使用,确保不会意外地过滤掉重要的错误信息。
  • 在生产环境中部署之前,务必充分测试你的过滤逻辑。
  • 根据你的具体需求,调整 $ignore 数组中的 URL 片段。
  • 除了 URL 过滤,你还可以使用 before_send 和 before_send_transaction 来过滤其他类型的事件,例如特定类型的异常或特定用户触发的事件。

总结:

通过配置 before_send_transaction 选项,我们可以在客户端过滤 Sentry Laravel 事件,从而有效控制事件配额,避免不必要的事件上报。这种方法特别适用于无法使用 Sentry 服务端限流功能的场景。 请记住,仔细测试您的配置以避免意外过滤掉重要信息。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享