優化 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 分享