使用 Sentry 為 PHP 和 Web 移動小程序提供多平臺錯誤監控

今天我在?reddit?上看到?Sentry?的推廣,想到 19 年我第一次在公司自研產品b2b2c上使用?Sentry?的經歷,后面在其他項目上多次使用Sentry,今天就順手分享一下在 Laravel 項目中接入 Sentry 的實踐心得。

現代項目往往涉及 Web、移動端和小程序,錯誤追蹤和日志集中化顯得尤其重要,Sentry 在這方面真的挺香的。

安裝與基礎配置

Laravel 后端集成 Sentry 很直觀,官方提供了 SDK。最簡單的安裝方式是通過?Composer

composer require sentry/sentry-laravel

然后在?config/app.php?注冊服務提供者(Laravel 5.x):

Sentry\Laravel\ServiceProvider::class,

或者在 Laravel 6+ 可以直接使用自動發現。配置文件可以發布出來:

php artisan vendor:publish --provider="Sentry\Laravel\ServiceProvider"

會生成?config/sentry.php,里面可以設置 DSN、環境、采樣率等。比如:

return?['dsn'?=>?env('SENTRY_DSN'),'environment'?=>?env('APP_ENV',?'production'),'traces_sample_rate'?=>?0.2,
];

前端 Vue 使用官方 JS SDK:

npm install @sentry/vue @sentry/tracing

初始化示例:

import?*?asSentryfrom"@sentry/vue";
import?{?Integrations?}?from"@sentry/tracing";Sentry.init({app,
dsn: process.env.VUE_APP_SENTRY_DSN,
integrations: [newIntegrations.BrowserTracing()],
tracesSampleRate:?0.2,
});

移動端 iOS/Android 可用官方 SDK 或第三方橋接庫,注意需要在 info.plist 或 AndroidManifest 中聲明權限。

微信小程序比較特殊,需要在?微信公眾平臺配置域名白名單,否則 SDK 無法向 Sentry 發送數據。具體是把 Sentry 的上報域名加入 request 合法域名即可。

環境區分與配置優化

在 Laravel 中,可以通過?.env?文件區分環境:

SENTRY_DSN_DEV=https://xxx@sentry.io/123
SENTRY_DSN_PROD=https://yyy@sentry.io/456
APP_ENV=dev

然后在?config/sentry.php?中根據環境選擇 DSN:

'dsn'?=>?env('APP_ENV') ===?'prod'???env('SENTRY_DSN_PROD') :?env('SENTRY_DSN_DEV'),

這樣開發、預發和生產環境的事件不會互相干擾。同時可以調整?traces_sample_rate?或日志等級,避免開發環境刷屏。

捕獲異常與忽略策略

Laravel 默認會捕獲異常并發送到 Sentry,但有些非致命錯誤不需要打擾,例如第三方包的警告。可以在?before_send?鉤子中過濾:

Sentry\configureScope(function (Sentry\State\Scope?$scope):?void?{$scope->addEventProcessor(function (array?$event) {if?(isset($event['exception']) &&?str_contains($event['exception']['values'][0]['type'],?'SomeNonCriticalException')) {return?null;?// 忽略}return?$event;});
});

同時也可以手動捕獲異常:

try?{// 業務邏輯
}?catch?(\Exception?$e) {Sentry\captureException($e);
}

前端 Vue、移動端或小程序同理,可以根據 error.message 或 URL 過濾不必要的事件。

與隊列和日志結合

Laravel 隊列任務出錯時,如果沒有捕獲,異常可能被吞掉。推薦在?Handler?或隊列?Job?中統一處理:

public?function?failed(Exception?$exception)
{Sentry\captureException($exception);
}

結合日志系統也很方便,Sentry 可以作為自定義日志通道:

'channels'?=> ['sentry'?=> ['driver'?=>?'sentry',],
],

這樣?Log::channel('sentry')->error('Something happened')?就能發送到 Sentry,同時保留本地日志。

跨平臺注意事項

  1. 1.?Vue 前端:一定要配置 source map,這樣 Sentry 才能顯示真實的行號和文件。

  2. 2.?iOS/Android:建議在 release 版本開啟符號化上傳,這樣崩潰棧才可讀。

  3. 3.?微信小程序:除了域名白名單,還要考慮 network timeout,避免 SDK 堵塞前端邏輯。

小技巧是前端可以捕獲全局未處理異常,統一發送:

window.addEventListener('error',?event?=>?{Sentry.captureException(event.error);
});

Sentry 平臺部署

除了 SDK 集成,很多人關心 Sentry 本身的平臺選型。Sentry 提供兩種模式:SaaS?和?獨立部署

SaaS 版本就是官方托管的服務,你只需要注冊賬號、配置 DSN,就能馬上收集錯誤,省去運維煩惱,升級和安全都由官方負責。適合絕大多數中小型項目或者希望快速落地的團隊。

獨立部署則可以把 Sentry 安裝在自己的服務器上,完全控制數據、網絡訪問和存儲策略。部署難度稍高,需要配置 PostgreSQL、Redis、Kafka 等依賴,也需要處理版本升級和備份策略,但對數據隱私要求高或者企業內網項目,這幾乎是唯一選擇。不過,官方提供了Docker鏡像可以直接使用。

實際上,在企業里經常看到混合使用:研發環境或小型項目走 SaaS,核心業務走自建,既靈活又安全。Laravel 項目接入時,只要 DSN 對應正確,代碼層面無需額外改動,平臺切換非常順暢。

實用技巧與優化

  • ? 批量忽略低優先級錯誤,比如 404 或第三方腳本錯誤。

  • ? 調整采樣率降低重復告警,例如?traces_sample_rate: 0.1

  • ? 配合 release 標簽區分不同版本,便于追蹤回歸問題:

Sentry\configureScope(function (Sentry\State\Scope?$scope):?void?{$scope->setTag('release',?config('app.version'));
});
  • ? 隊列和日志結合,保證即便異步任務失敗,也能可靠上報。

寫在最后

從 SDK 集成到平臺部署,其實?Sentry?的魅力就在于統一、多端、可擴展。多環境、多平臺、隊列日志結合后,你會發現錯誤的可見性大大提高,排查問題也不再是盲人摸象的狀態。19 年 BBC 的經歷到現在依然印象深刻,Sentry 幫我節省了無數調試時間。今天分享出來,希望對大家 Laravel 項目的多平臺錯誤監控有所啟發。

寫作不易,希望您動動發財的小手,幫忙一鍵三連(點贊、推薦、關注),您的鼓勵,就是我寫作的動力!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95776.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python包管理工具全對比:pip、conda、Poetry、uv、Flit深度解析

在Python開發中,包的管理和使用是重要環節,現如今python包管理工具眾多,如何選擇合適的管理工具?常用的工具有pip、conda、Poetry、uv、Flit,下面這些工具進行詳細對比分析。一、工具概覽對比工具類型開發者主要特點適…

車載診斷架構 --- Service 14一丟丟小匯總

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做你把時間花在哪里,你的人生就在哪里。千萬別看見別人發光,就覺得自己暗淡。人生如逆旅,你我皆行人。唯有不斷閱己、越己、悅己才能活出生命的意…

Struts2 工作總結

一 in,在SQL中,IN 是一個條件操作符,用于指定多個可能的值,通常用在 WHERE 子句中。它的作用是檢查某個字段的值是否在給定的值列表中,相當于多個 OR 條件的簡寫形式。不使用 IN(冗長)SELECT * …

MQTT 認證與授權機制實踐(二)

四、實戰案例:主流 Broker 的認證授權配置指南(一)EMQ X:企業級物聯網 Broker 的安全方案1. 認證配置(用戶名密碼 證書)EMQ X 作為一款企業級物聯網 Broker,在安全認證方面提供了豐富且靈活的配…

多路轉接介紹及代碼實現

目錄 1.多路轉接技術的產生背景 2.select 3.poll 3.epoll 1.多路轉接技術的產生背景 一個技術的出現必然有它要解決的問題,那么多路轉接解決的問題是什么嗯? 我們知道,一個進程里面有一個文件描述符表管理這個進程所打開的文件,我們進行網絡通信的時候,本質就是創建一個…

《sklearn機器學習——回歸指標1》

skearn.metrics模塊實現一些損失函數,評分,并且應用函數去測度回歸標簽。其中一些已經改進,可以處理多指標案例:mean_squared_error,mean_absolute_error,explained_variance_score和r2_score。 這些函數使…

消息存儲機制-索引文件及頁緩存

對于生產者來說,將消息寫到commit log文件里面。這里會有消息的邏輯隊列,邏輯隊列里面保存了消息的偏移量。除了consumerquenue之外,它還會將數據分發到另外一個文件叫indexfile索引文件里面。這個索引文件可以保存消息的一些信息&#xff0c…

輾轉相除法(歐幾里得算法)的證明

歡迎訪問我的主頁: https://heeheeaii.github.io/ 輾轉相除法是一種用于計算兩個非負整數最大公約數的有效算法。它的證明主要分為兩個部分: 證明核心引理: gcd(a,b)gcd(b,amodb)證明算法的收斂性: 證明算法一定會在有限步內結束。 輾轉相除法…

RL【3】:Bellman Optimality Equation

系列文章目錄 文章目錄系列文章目錄前言Definition of optimal policyBellman optimality equationIntroductionMaximization on the right-hand sideContraction mapping theoremSolutionOptimalityAnalyzing optimal policies總結前言 本系列文章主要用于記錄 B站 趙世鈺老師…

有序數組,距離目標最近的k個數 二分查找

🤔 新手做題思路:第1步:理解題目- 找距離x最近的k個數- 數組已排序- 返回結果也要排序(升序)- 距離相同時,選擇較小的數第2步:關鍵insight- 數組已排序 → 考慮二分查找- 最近的k個數一定是連續…

學習心得分享

我認為知識是一定要系統化的學習,結構化梳理,這樣在運用或思考的時候,能夠回憶起自己在這一塊梳理的知識結構,如果有記錄那么能快速回憶并理解,如果沒有記錄,那么說明對自己來說超綱了,把知識進…

為什么說 Linode 和 DigitalOcean 的差距,不止于 VPS?

在今天這個全球化的商業戰場上,中國企業的出海已從“選擇題”變為“必答題”。當我們滿懷雄心,將產品和業務推向海外市場時,基礎設施的選擇,往往是決定成敗的第一步。它不僅關乎成本與性能,更直接影響著團隊的開發效率…

NSSCTF每日一題_Web_[SWPUCTF 2022 新生賽]奇妙的MD5

為了保持做題的感覺和持續學習,也就有了每日一題系列,選一些有意義的題目或者一些CTF新穎題目作為參考學習。[SWPUCTF 2022 新生賽]奇妙的MD51. 訪問首頁界面并進行分析估計題目MD5提示,查詢得知ffifdyop 這個字符串是一個奇妙的MD5字符串因為將“ffifdy…

服務器IP暴露被攻擊了怎么辦?

當服務器IP暴露后,可能會面臨各種網絡攻擊,如DDoS攻擊、端口掃描、惡意入侵等,這將嚴重影響服務器的正常運行和數據安全。本文將從檢測攻擊類型、采取緊急防護措施、優化服務器配置、尋求專業支持以及預防未來攻擊五個方面,詳細探…

TDengine 時間函數 TIMETRUNCATE 用戶手冊

TDengine TIMETRUNCATE 函數用戶使用手冊 函數概述 TIMETRUNCATE 是 TDengine 中的一個時間處理標量函數,用于將時間戳按照指定的時間單位進行截斷操作。該函數在時間數據聚合、分組和統計分析中非常有用,特別適用于智能電表等時序數據的分析場景。 語…

Linux電腦怎樣投屏到客廳的大電視?支持遠程投屏嗎?

一般的電腦投屏軟件都會推出Windows版本和macOS版本,雖然這兩個版本已經覆蓋大部分消費者的常用電腦,但是依然有一部分群體因為電腦系統版本問題不能使用投屏軟件。 如果你當前使用的是Linux系統的電腦,而且又要將電腦投屏投屏到客廳的大電視…

MP4視頻太大如何壓縮?分享6種簡單便捷的壓縮小技巧

隨著拍攝高清視頻的設備越來越多,我們經常會遇到MP4視頻文件體積過大的問題,無論是上傳到社交平臺、發送給朋友,還是存儲在設備中,過大的視頻文件都會帶來諸多不便。那么,MP4視頻太大怎么壓縮呢?本文將介紹…

k8s 部署 redis

創建部署文件 vim redis.yaml添加如下內容: apiVersion: v1 kind: Namespace metadata:name: redis --- apiVersion: v1 kind: Secret metadata:name: redis-passwordnamespace: redis type: Opaque data:password: d2d3cmhnZWE # 建議生產環境使用更復雜的密碼 ---…

FFMPEG H264

一、H264壓縮編碼1.1 H264 中的 I 幀、P幀和 B幀H264 使用幀內壓縮和幀間壓縮的方式提高編碼壓縮率;H264 采用了獨特的 I 幀、P 幀和 B 幀策略來實現,連續幀之間的壓縮;1.2 其他概念GOP(圖像組):一個IDR幀到…

Unity 解決天空盒中間出現一條線

問題解決找到天空盒對應貼圖,在Inspector 面板中找到Advanced →Generate Mip Maps 并取消勾選即可。效果動態修改天空盒RenderSettings.skybox targetSkyboxMaterial; DynamicGI.UpdateEnvironment();