.NET Core微服务之基于Exceptionless实现分布式日志记录
一、Exceptionless極簡介紹
Exceptionless 是一個開源的實時的日志收集框架,它可以應(yīng)用在基于 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技術(shù)開發(fā)的應(yīng)用程序中,并且提供了REST接口可以應(yīng)用在 Javascript,Node.js 中。它將日志收集變得簡單易用并且不需要了解太多的相關(guān)技術(shù)細節(jié)及配置,對于微服務(wù)架構(gòu)的應(yīng)用程序來說,統(tǒng)一的日志收集系統(tǒng)的建立更是有必要。
二、Quick Start
2.1 官方創(chuàng)建一個賬號
2.2 創(chuàng)建項目
2.3 得到ApiKey
2.4 安裝Exceptionless.AspNetCore并進行配置
NuGet>Install-Package Exceptionless.AspNetCore
*.目前最新版本是4.3.2004
在你要進行Logging的項目(MVC,WebAPI等)中注冊APIKey,這里以ASP.NET Core WebAPI項目為例:
這里我將ApiKey配置到了json配置文件中:
"Exceptionless": { ??"ApiKey": "Your Api Key from Exceptionless server"}
2.5 簡單地封裝一個ExceptionlessLogger
(1)自定義一個ILogger接口
public interface ILogger{ ? ? ? ?? ? ? ? ? ? void Trace(string message, params string[] args); ? ?
? ? ? ?? ?void Debug(string message, params string[] args); ? ?
? ? ? ? ? ?void Info(string message, params string[] args); ? ?
? ? ? ? ? ?void Warn(string message, params string[] args); ?
? ? ? ? ?void Error(string message, params string[] args);}
(2)實現(xiàn)ILogger接口:ExceptionlessLogger
? ? ??/// <summary>/// Trace ? ? ? ?
? ? ? ?/// </summary>public void Trace(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Trace).AddTags(tags).Submit();} ? ? ? ?/// <summary>/// Debug ? ? ? ?/// </summary>public void Debug(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Debug).AddTags(tags).Submit();} ? ? ? ?/// <summary>/// Info ? ? ? ?/// </summary>public void Info(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Info).AddTags(tags).Submit();} ? ? ? ?/// <summary>/// Warn ? ? ? ?/// </summary>public void Warn(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Warn).AddTags(tags).Submit();} ? ? ? ?/// <summary>/// Error ? ? ? ?/// </summary>public void Error(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Error).AddTags(tags).Submit();}}
2.6 注入ExceptionlessLogger
public IServiceProvider ConfigureServices(IServiceCollection services){ ? ? ? ?// IoC - Loggerservices.AddSingleton<ILogger, ExceptionLessLogger>();......}2.7 在你想要Logging的地方調(diào)用
比如我們要記錄一個User登錄的日志:
public class LoginController : Controller{ ? ??? ?public ILogger Logger { get; } ? ?
? ? ?? ?public LoginController(ILogger logger){Logger = logger;}[HttpGet("{id}")] ? ? ?
? ? ? ? ??public string Get(int id){Logger.Info($"User {id} Login Successfully. Time:{DateTime.Now.ToString()}", "Tag1", "Tag2"); ? ?
? ? ? ?return "Login Success.";}}
測試結(jié)果:
2.8 記錄你程序中的各種Exception
這里模擬一個空指針的異常,這里借助Exceptionless針對Exception類的擴展方法去進行寫異常信息。
? ?public string Get(){ ? ? ?
? ? ? ? ??try{ ? ? ? ?
string str = null;str.ToString();} ? ? ?
? ? ? ? ??catch (Exception ex){ex.ToExceptionless().Submit();} ? ? ? ?return "Unknown Error!";}
測試結(jié)果:
2.9 Check你的日志與異常記錄
(1)Check 日志
在Log Messages 或 AllEvents菜單中選擇Dashboard,即可看到當(dāng)前項目所有的Log Message了。(如果選擇的是AllEvents,可能還會包含其他類型的信息,比如Exception)
在最近的Log中可以看到我們剛剛的測試中記錄的一跳日志:
點擊超鏈接,即可進入詳細頁面:
Overview:可以看到一些項目和日志的基本信息,比如Event Type,Level以及標(biāo)簽Tags
Environment:可以看到記錄日志所在的項目所處的一些軟硬件環(huán)境信息
下面是一些額外的信息,比如Framework Version以及Runtime Framework
通過對這些日志的查看和分析,我們可以方便地在一個地方對所有服務(wù)中的日志進行查看和分析。But,在線版本對項目和日志數(shù)量有限制,建議在生產(chǎn)環(huán)境使用本地部署版本,它是開源的。
(2)Check 異常
在Exception菜單下選擇Dashboard:
在最近的異常信息中找到剛剛記錄的:
同樣,通過超鏈接查看詳細信息:
Overview:可以看到這個異常的基本信息,比如Error Type以及Stack Trace,這些都是可以幫準(zhǔn)我們快速定位錯誤的信息
Exception:如果基本信息不夠,那就查看詳情,你可能需要看看加載了哪些Modules
最后是Environment,跟Log的Environment差不多,這里就不再貼圖了。
三、本地部署
我們說到Exceptionless是一款強大的開源框架,那么我們可以下載下來根據(jù)需要進行獨立部署,可以不受一些用戶、項目、Event數(shù)量的限制。這里我暫時不會去做其獨立部署的實踐,但是園子里已經(jīng)有很多的獨立部署實踐的分享了,有興趣的朋友可以看看下面幾篇:
花兒笑彎了腰,《Self Host 使用Exceptionless實時監(jiān)控程序運行日志服務(wù)》
羅曼緹克,《.Net 開源異常日志ExceptionLess搭建》
平凡網(wǎng)客,《Exceptionless 本地部署》
當(dāng)然,官方的獨立部署Wiki也是一個絕佳的參考資料:https://github.com/exceptionless/Exceptionless/wiki/Self-Hosting
以下是測試環(huán)境的要求:
以下是Production環(huán)境的要求,我們可以看到在Production環(huán)境中,強烈推薦使用ELK的ElasticSearch,如果有不知道ELK的朋友也可以百度/Google一下,ELK也是我后續(xù)的學(xué)習(xí)計劃。
四、小結(jié)
本篇主要簡單的介紹了一下開源的分布式日志框架Exceptionless,并通過兩個小例子介紹了如何快速的在ASP.NET Core中進行使用,最后通過在Exceptionless平臺中Check我們在程序中記錄的日志/異常信息了解Exceptionless的強大。此外,通過引入園友和官方的Wiki文檔介紹了Exceptionless的另一種使用模式:本地部署,有興趣的朋友可以去看看,這里我就不再去實踐了(對我現(xiàn)階段而言,去做獨立部署的優(yōu)先級不高)。本篇沒有過多的語言介紹,更多的是貼code以及貼圖片,因此不能算是很好的介紹文章,不過結(jié)合列出的參考資料應(yīng)該可以對Exceptionless做個快速入門
一些朋友問我后續(xù)的分享計劃,這里小小透漏一下:Ocelot+IdentityServer的結(jié)合做統(tǒng)一驗證和授權(quán),Ocelot+Butterfly的結(jié)合(目前Ocelot已集成Butterfly)做分布式追蹤,基于AppMetrics+InfluxDB+Grafana的性能監(jiān)控,數(shù)據(jù)一致性(可能會使用幾個EventBus框架)初探,基于Apollo做配置中心,ASP.NET Core on Docker與K8S結(jié)合等等。等到POC初步研究后,可能還會去看看微軟的微服務(wù)架構(gòu)官方高級版大Demo-eShopOnContainers(微軟有一本pdf大家可以去下載,點我下載)。這些計劃可能需要花費我很多時間,不過我相信這樣的學(xué)習(xí)和實踐是值得的,也是值得分享的,如果你也有這樣的計劃,那就一起加油吧!
參考資料
Exceptionless Github:https://github.com/exceptionless/Exceptionless
savorboard(楊曉東),《免費開源分布式系統(tǒng)日志收集框架 Exceptionless》
編程夢,《ExceptionLess新玩法 — 記日志》
編程夢,《ExceptionLess新玩法 -- 審計日志》
花兒笑彎了腰,《Self Host 使用Exceptionless實時監(jiān)控程序運行日志服務(wù)》
羅曼緹克,《.Net 開源異常日志ExceptionLess搭建》
平凡網(wǎng)客,《Exceptionless 本地部署》
原文地址:
https://www.cnblogs.com/edisonchou/p/exceptionless_foundation_and_quick_start.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的.NET Core微服务之基于Exceptionless实现分布式日志记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core WebApi使
- 下一篇: .netcore 整合 log4net