不只是日志收集,項目監控工具Sentry的安裝、配置、使用

前言

上一篇文章介紹了ExceptionLess這個日志收集系統:ExceptionLess的安裝、配置、使用

由于ExceptionLess官方提供的客戶端只有.Net/.NetCore平臺和js的,本文繼續介紹另一個日志收集系統:Sentry

Sentry 是一個實時事件日志記錄和聚合平臺。(官方說的是錯誤監控 Error Monitor)它專門用于監視錯誤和提取執行適當的事后操作所需的所有信息,而無需使用標準用戶反饋循環的任何麻煩。

Sentry使用Python(Django)開發,功能非常豐富,相比起ExceptionLess來說也重得多(這也是我們在.NetCore平臺使用ExceptionLess的原因),其支持的平臺很全,基本主流編程語言/框架都有,看圖

a3bcea18da5156beaae95c568f0cc644.png
image

除了.NetCore項目,其他的我都使用Sentry來收集日志和報錯信息,整體使用下來還是非常不錯的,(就是有點耗內存),請準備好一臺內存足夠大的服務器,起碼8G吧~

安裝

和ExceptionLess一樣,Sentry也可以在線使用,只需要注冊一個賬號就行了

不過既然是開源免費的,還是自己部署一套比較自由,速度也比較快(Sentry服務器在國外)

老規矩,使用docker做本地部署,最開始用這玩意的時候安裝折騰得很,后來官方自己出了個方便的安裝腳本,現在安裝應該是很容易了。

首先拉取這個項目到本地:https://github.com/getsentry/self-hosted

然后進入項目目錄,執行./install.sh,經過漫長的pull和build,根據提示輸入管理員的用戶名和密碼,就完事了

官方提供的這個方案也是通過docker-compose管理容器的,以后我們也可以通過docker-compose相關的命令來手動啟停系統。

跑起來后訪問http://ip:9000就可以看到登錄界面(端口根據實際配置可能不一樣)

db14fd4fa4db5a94ce26561922e00ec5.png
image

用剛才創建的用戶名密碼登錄就行了

配置

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直觀一些

94f240e7dfce71bb74f37345c922ba0b.png
image

點擊某一個問題進去可以看到錯誤詳情

e7683316def6e21542af824bf426857e.png
image

如果是Python這類動態語言,甚至可以直接看到是哪段代碼報錯,太方便了

ae3fb1836ef4327eee447533385af69d.png
image

然后性能頁面可以細化到每個請求的相應時間、錯誤頻率、訪問的用戶數量等

4bea71ac314805a4047ef315645fc15d.png
image

然后再點進去某一個URL還能看到訪問這個URL的用戶的一些信息,包括IP地址,用戶名(如果已登錄),頁面停留時間,用戶都是哪些時間段訪問啥的,指標太多了,有些不太懂,反正功能是很強的就對了~

14cab02f9ba38504a0ce910c8596839b.png
image

大概就這些吧,其他功能我還沒有深入,等后續繼續學習后再來更新博客。

項目集成

首先可以看官網文檔,還是比較全的,而且大部分語言都提供了集成的Demo。

文檔地址:https://docs.sentry.io/

一些Demo:https://github.com/getsentry/sentry-dotnet/tree/main/samples

直接上幾個項目集成的例子吧

本身在Sentry中創建項目時,系統也會顯示一個簡單的集成指引,這里把我魔改的代碼放上來

Django項目

首先根據指引需要安裝一個pip包

pip?install?sentry-sdk

我習慣將項目配置settings.py放在config包下,然后把拆分出來的配置一個個都列在這個包中,方便管理

config下創建sentry.py,代碼如下

import?loggingimport?sentry_sdk
from?sentry_sdk.integrations.django?import?DjangoIntegration
from?sentry_sdk.integrations.logging?import?LoggingIntegration
from?sentry_sdk.integrations.redis?import?RedisIntegrationsentry_logging?=?LoggingIntegration(level=logging.INFO,??#?Capture?info?and?above?as?breadcrumbsevent_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

Flutter項目

根據指引首先要添加依賴

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項目

雖然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,先這些吧,其他例子直接看官網就行~

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

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

相關文章

64個數據分析常用術語

導讀&#xff1a;本篇文章&#xff0c;我們來講講數據分析常用語。 內容綜合整理自網絡 01 絕對數和相對數 絕對數&#xff1a;是反應客觀現象總體在一定時間、一定地點下的總規模、總水平的綜合性指標&#xff0c;也是數據分析中常用的指標。比如年GDP&#xff0c;總人口等等。…

redis 的bitmap 開源包 bitmapist的應用

2019獨角獸企業重金招聘Python工程師標準>>> 原理&#xff1a;http://my.oschina.net/u/1458120/blog/545224 bitmap包&#xff1a;https://github.com/Doist/bitmapist 要求redis> 2.6.0 bitmapist-master.zip 安裝自己下載解壓 python setup.py install &…

Django Views(視圖函數)

http請求中產生兩個核心對象&#xff1a; http請求&#xff1a;HttpRequest對象 http響應&#xff1a;HttpResponse對象 所在位置&#xff1a;django.http 之前我們用到的參數request就是HttpRequest 檢測方法&#xff1a;isinstance(request,HttpRequest) 1 HttpRequest對象…

Android 4 +https(如何啟動TLS1 1 and TLS1 2)

之前用的網絡請求框架是鴻洋的OkHttpUtils&#xff0c;網絡請求在5.0手機上使用https沒有問題&#xff0c;但是最近突然使用了一個4.4的系統&#xff0c;就報錯SSLException ....咋地咋地 然后 我們的副總給我們找一個博客&#xff0c;如何解決4.系統出現的這個問題&#xff0…

massCode 一款優秀的開源代碼片段管理器

本文將介紹一款適合程序員使用的個人代碼片段管理工具 massCode[1]。massCode小時候&#xff0c;也許我們每個人都會被老師要求有一個到處摘錄優美句子段落的作文素材本 —— 采蜜集。不可否認&#xff0c;這對我們的寫作水平的提高確實有很大的幫助。對開發人員來說當然也需要…

【ArcGIS Pro微課1000例】0021:Win10系統ArcGIS Pro3.0.1安裝教程(附ArcGIS Pro下載)

本文講解Win10系統上ArcGIS Pro3.0.1安裝教程,附軟件包下載。 文章目錄 一、 軟件安裝步驟1. 安裝.net Runtime 62. 安裝ArcGIS Pro3. 安裝中文語言4. 刪除代理二、軟件下載地址一、 軟件安裝步驟 [軟件名稱]: ArcGIS Pro 3.0.1 [軟件大小]:4.33GB [安裝環境]: Win 11/Win …

iOS逆向工程——非越獄調試

其實iOS的逆向分析業界已經十分成熟了&#xff0c;網上也有許多有趣的嘗試(一步一步實現iOS微信自動搶紅包(非越獄)。本文著重于如何在非越獄機器上進行調試&#xff0c;出于學習及總結的目的&#xff0c;記錄于此。 本文以破解游戲夢幻西游為例&#xff0c;逐步講解整個調試流…

[轉]2022 Flutter 宣布發布 Windows 正式版

原文鏈接&#xff1a; https://medium.com/flutter/announcing-flutter-for-windows-6979d0d01fed 自從推出 Flutter 以來&#xff0c;我們一直專注于為漂亮的定制應用提供跨平臺解決方案&#xff0c;這些應用被編譯為機器代碼并充分利用設備的底層圖形硬件功能。 今天這一愿景…

電腦經常彈出“不支持的硬件”解決辦法

電腦經常彈出“不支持的硬件”解決辦法。 通過微軟官方查證,這是由于以上處理器需要最新的Windows10系統才會這樣子的,而大多出現該提示的都安裝了Win7或是Win8.1系統。 來至微軟官方的說明 此錯誤出現的原因是各代新處理器要求最新Windows版本以獲得支持。 例如,Windows 1…

使用 Web API 上傳和下載多個文件

原文作者&#xff1a;Jay Krishna Reddy原文鏈接&#xff1a;https://www.c-sharpcorner.com/article/upload-and-download-multiple-files-using-web-api/翻譯&#xff1a;沙漠盡頭的狼&#xff08;谷歌翻譯加持&#xff0c;文中版本使用.NET 6升級&#xff09;---正文開始---…

詳解T-SQL的聯接機制

T-SQL的聯接分三種類型&#xff1a; 交叉聯接 ( cross join ) 內部聯接 (inner join) 外部聯接 (outer join) 每種聯接在邏輯上經歷不同的階段&#xff0c;分為笛卡爾乘積、篩選、添加外部行&#xff0c;如圖&#xff1a; 聯接類型 階段 交叉聯接 笛卡兒乘積 內部聯接…

Android FrameWork學習(一)Android 7 0系統源碼下載 編譯

最近計劃著研究下 Android 7.0 的系統源碼&#xff0c;之前也沒做過什么記錄&#xff0c;這次正好將學習的內容記錄下來&#xff0c;方便以后復習鞏固。 既然要學習我們的系統源碼&#xff0c;那我們第一步要做的就是下載源碼并進行編譯了。 #硬件環境要求 ###1. 編譯環境 按照…

【MapGIS精品教程】002:GDB本地數據庫的使用

本文主要內容為MapGISGDB本地數據庫的使用&#xff0c;包括&#xff1a;GDB企業管理器的認識、GDB本地數據庫的創建方法、GDB本地數據庫的備份和恢復。 1. GDB企業管理器的認識 GDB是地理數據的資源管理器&#xff0c;主要對空間數據進行有序組織與管理。 GDB數據管理包括&…

RabbitMQ學習3----運行和管理RabbitMQ

1.服務為管理 Erlang天生就是為了讓應用程序無需知道對方是否存在同一臺機器上即可互相通信。 Erlang節點&#xff1a;Erlang虛擬機的每個實例。多個Erlang應用程序可以運行在同一個節點之上。節點之間可以進行本地通信&#xff08;不管他們是運行在同一臺服務器之上&#xff0…

各代移動網絡性能

摘自《中國元宇宙白皮書》 下載整書完整版https://www.aliyundrive.com/s/gXQvRLM22kD

EFCore高級Saas系統下單DbContext如何支持不同數據庫的遷移

前言隨著系統的不斷開發和迭代默認的efcore功能十分強大&#xff0c;但是隨著Saas系統的引進efcore基于表字段的多租戶模式已經非常完美了&#xff0c;但是基于數據庫的多租戶也是可以用的&#xff0c;但是也存在缺點&#xff0c;缺點就是沒有辦法支持不同數據庫&#xff0c;mi…

poj 1679: The Unique MST【次小生成樹】

題目鏈接 參考博客 希望注釋足夠清楚。。歡迎指出不足~ #include<cstdio> #include<cstring> #include<algorithm> using namespace std;const int maxn110; const int INF0x3f3f3f3f;int n,m; int mp[maxn][maxn]; int maxlen[maxn][maxn]; //maxlen…

51. Python 數據處理(2)

1.Python 修改excel文件import xlrd import xlutils.copy excelr xlrd.open_workbook("hello.xlsx") excelw xlutils.copy.copy(excelr) sheet1 excelw.get_sheet(0) sheet1.write(3, 5, "xlutils.copy test test") excelw.save("hello.xlsx"…

人工智能十大流行算法

導讀&#xff1a;本文為有志于成為數據科學家或對此感興趣的讀者們介紹最流行的機器學習算法。 作者&#xff1a;Fahim ul Haq 譯者&#xff1a;劉志勇&#xff0c;策劃&#xff1a;趙鈺瑩 來源&#xff1a;InfoQ&#xff08;ID&#xff1a;infoqchina&#xff09; 機器學習是…

Win7+Win10雙系統安裝全攻略

安裝雙系統,不僅能給你非凡的體驗,還可以滿足工作中因系統版本,兼容性,處理器等原因帶來的不便。本文講解Win7+Win10雙系統安裝全攻略,親測可用。 1. 硬盤分區 本文講解利用固態硬盤+機械硬盤的分區方式。 固態硬盤:為了絕對提高系統運行的速度,將固態硬盤作為雙系統的…