<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
上一篇文章介紹了ExceptionLess這個紀錄檔收集系統:ExceptionLess的安裝、設定、使用
由於ExceptionLess官方提供的使用者端只有.Net/.NetCore平臺和js的,本文繼續介紹另一個紀錄檔收集系統:Sentry
Sentry 是一個實時事件紀錄檔記錄和聚合平臺。(官方說的是錯誤監控 Error Monitor)它專門用於監視錯誤和提取執行適當的事後操作所需的所有資訊,而無需使用標準使用者反饋迴圈的任何麻煩。
Sentry使用Python(Django)開發,功能非常豐富,相比起ExceptionLess來說也重得多(這也是我們在.NetCore平臺使用ExceptionLess的原因),其支援的平臺很全,基本主流程式語言/框架都有,看圖
除了.NetCore專案,其他的我都使用Sentry來收集紀錄檔和報錯資訊,整體使用下來還是非常不錯的,(就是有點耗記憶體),請準備好一臺記憶體足夠大的伺服器,起碼8G吧~
和ExceptionLess一樣,Sentry也可以線上使用,只需要註冊一個賬號就行了
不過既然是開源免費的,還是自己部署一套比較自由,速度也比較快(Sentry伺服器在國外)
老規矩,使用docker做本地部署,最開始用這玩意的時候安裝摺騰得很,後來官方自己出了個方便的安裝指令碼,現在安裝應該是很容易了。
首先拉取這個專案到本地:https://github.com/getsentry/self-hosted
然後進入專案目錄,執行./install.sh
,經過漫長的pull和build,根據提示輸入管理員的使用者名稱和密碼,就完事了
官方提供的這個方案也是通過docker-compose管理容器的,以後我們也可以通過docker-compose相關的命令來手動啟停系統。
跑起來後存取http://ip:9000
就可以看到登入介面(埠根據實際設定可能不一樣)
用剛才建立的使用者名稱密碼登入就行了
Sentry的設定項是真的多,到現在大部分我都還沒搞清楚,我只是簡單的設定了郵件、埠這些,就可以用得飛起了
接上面的,把官方提供的那個self-host
專案clone下來之後,可以看到裡面有個sentry
資料夾,組態檔就在這目錄裡。
郵件設定在config.yml
檔案中,(比ExceptionLess好的一點是郵箱地址終於不需要跳脫了)
這裡以騰訊企業郵箱設定為例,在設定中找到# Mail Server #
這個“節點”
mail.backend: 'smtp' # Use dummy if you want to disable email entirely mail.host: 'smtp.exmail.qq.com' mail.port: 465 mail.username: 'demo@demo.com' mail.password: 'password' mail.use-tls: false # mail.use-ssl: false mail.from: 'demo@demo.com'
這樣就可以正常發郵件了~
那麼埠要怎麼改呢,舊版的onpremise(也就是這個self-host專案)是直接在docker-compose.yml裡改的,不過現在不推薦修改這個檔案了(官方的這個compose組態檔我甚至看不懂)
現在通過環境變數設定,使用ll -a
列出專案目錄下所有檔案,可以發現有個.env
檔案,環境變數就在這檔案裡設定,裡面有一行設定埠的
SENTRY_BIND=9000
直接修改就完事了~
Sentry的介面比ExceptionLess的複雜很多,裡面的資訊也更多,讓人看得眼花繚亂
作為紀錄檔收集工具的話,主要就是看“問題”頁面,可以篩選某個專案,也可以看全部,這點比ExceptionLess直觀一些
點選某一個問題進去可以看到錯誤詳情
如果是Python這類動態語言,甚至可以直接看到是哪段程式碼報錯,太方便了
然後效能頁面可以細化到每個請求的相應時間、錯誤頻率、存取的使用者數量等
然後再點進去某一個URL還能看到存取這個URL的使用者的一些資訊,包括IP地址,使用者名稱(如果已登入),頁面停留時間,使用者都是哪些時間段存取啥的,指標太多了,有些不太懂,反正功能是很強的就對了~
大概就這些吧,其他功能我還沒有深入,等後續繼續學習後再來更新部落格。
首先可以看官網檔案,還是比較全的,而且大部分語言都提供了整合的Demo。
一些Demo:https://github.com/getsentry/sentry-dotnet/tree/main/samples
直接上幾個專案整合的例子吧
本身在Sentry中建立專案時,系統也會顯示一個簡單的整合指引,這裡把我魔改的程式碼放上來
首先根據指引需要安裝一個pip包
pip install sentry-sdk
我習慣將專案設定settings.py
放在config
包下,然後把拆分出來的設定一個個都列在這個包中,方便管理
在config
下建立sentry.py
,程式碼如下
import logging import sentry_sdk from sentry_sdk.integrations.django import DjangoIntegration from sentry_sdk.integrations.logging import LoggingIntegration from sentry_sdk.integrations.redis import RedisIntegration sentry_logging = LoggingIntegration( level=logging.INFO, # Capture info and above as breadcrumbs event_level=logging.ERROR # Send errors as events ) sentry_sdk.init( # 反正dsn這行無腦複製sentry上顯示的就行 dsn="http://key@sentry地址/id", integrations=[DjangoIntegration(), RedisIntegration(), sentry_logging], # 這裡設定為1代表捕捉100%的transaction 用於效能監控 traces_sample_rate=1, send_default_pii=True, )
然後在settings.py
裡引入就完事了
from config import sentry
根據指引首先要新增依賴
dependencies: sentry_flutter: ^5.1.0
PS:現在這個依賴出了6.x版本了,初始化的時候是用非同步操作的,我還沒更新,就先用5.x版本了
這是原本main.dart
中的App初始化程式碼
void main() { WidgetsFlutterBinding.ensureInitialized(); if (Platform.isAndroid) { // 以下兩行 設定android狀態列為透明的沉浸。 SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.transparent); SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); } Global.init().then((value) => runApp(MyApp())); }
引入Sentry之後,需要包裝一層
import 'package:sentry_flutter/sentry_flutter.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); SentryFlutter.init( (options) { options.dsn = 'http://1335793bf7684f21918248b11cebbf9c@sentry.sblt.deali.cn:9800/9'; }, appRunner: () { if (Platform.isAndroid) { SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.transparent); SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); } Global.init().then((value) => runApp(MyApp())); } ); }
也就是把原本啟動App的程式碼放在SentryFlutter的appRunner
裡執行。
雖然AspNetCore專案我們使用ExceptionLess來採集紀錄檔,不過在切換到ExceptionLess之前,也用了一段時間的Sentry,Sentry支援的平臺那麼豐富,在AspNetCore中使用自然也是沒問題的。
根據官方指引首先安裝依賴
dotnet add package Sentry.AspNetCore -v 3.19.0
然後將sentry的設定寫在appsettings.json
中
"Sentry": { "Dsn": "https://examplePublicKey@o0.ingest.sentry.io/0", "MaxRequestBodySize": "Always", "SendDefaultPii": true, "MinimumBreadcrumbLevel": "Debug", "MinimumEventLevel": "Warning", "AttachStackTrace": true, "Debug": true, "DiagnosticsLevel": "Error" }
跟ExceptionLess不同,sentry不用註冊服務和新增中介軟體的方式,而是實現了IWebHostBuilder
的擴充套件方法,在ConfigureWebHostDefaults
時就hook到系統中,理論上功能會更強,ExceptionLess通過中介軟體只能捕捉到類似URL不存在這類HTTP異常,如果是程式中報錯是需要手動catch後submit的;而sentry是採用hook的形式(官網說的),可以捕捉到未處理的異常並且上報。(根據微軟檔案中AspNetCore的啟動過程推測出的,理解得不深如果有錯誤請大佬們指正~)
所以對於AspNetCore3.1專案,修改Program.cs
檔案,新增一行程式碼 webBuilder.UseSentry();
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSentry(); webBuilder.UseStartup<Startup>(); });
對於AspNetCore6專案,也是Program.cs
檔案(.Net6也只有這檔案)
var builder = WebApplication.CreateBuilder(args); builder.WebHost.UseSentry();
搞定,然後sentry就會捕捉異常並提交
也可以手動提交,比如
void Demo([FromServices] IHub sentry) { // 提交普通訊息 sentry.CaptureMessage("hello", SentryLevel.Debug); try { // 會出錯的程式碼 } catch (Exception err) { sentry.CaptureException(err); } }
當然根據檔案也可以不用依賴注入
using Sentry; try { // 會出錯的程式碼 } catch (Exception err) { SentrySdk.CaptureException(err); }
OK,先這些吧,其他例子直接看官網就行~
到此這篇關於Sentry的安裝、設定、使用的文章就介紹到這了,更多相關Sentry 安裝使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45