.net core 集成 sentry 进行异常报警
Intro
Sentry 是一个实时事件日志记录和汇集的平台。其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈。它分为客户端和服务端,客户端(目前客户端有 C#, Python, PHP, JavaScript, Ruby等多种语言)就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web页方便查看。
Sentry 是 Python 写的一个开源的项目 https://github.com/getsentry/sentry 而且可以满足私有部署的需求
官方介绍:
Sentry is cross-platform application monitoring, with a focus on error reporting.
Sentry fundamentally is a service that helps you monitor and fix crashes in realtime. The server is in Python, but it contains a full API for sending events from any language, in any application
使用效果
sentry 里每一个错误/异常被视为一个 issue,在 sentry 的后台可以看到对应项目的错误信息,并且会受到 sentry 的邮件推送
dotnetcore 集成
针对 asp.net core 的集成,分为两种方式,sentry 提供了一个底层一点的基于 Microsoft.Extensions.Logging
的集成方式( Sentry.Extensions.Logging
)和基于 asp.net core 框架的集成方式( Sentry.AspNetCore
),我目前在用基于 logging 方式的集成方式(基于 asp.net core 的集成是后来才有的,后面也没有再修改),如果要集成 asp.net core 项目可以直接使用 Sentry.AspNetCore
我目前用的是 Sentry.Extensions.Logging
基本配置如下:
loggerFactory.AddSentry(options =>{options.Dsn = Configuration.GetAppSetting("SentryClientKey");});
Dsn 是创建项目之后在项目的配置里可以看得到
More Config
loggerFactory.AddSerilog().AddSentry(options =>{options.Dsn = Configuration.GetAppSetting("SentryClientKey");options.Environment = env.EnvironmentName; // 设置环境options.MinimumEventLevel = LogLevel.Error; // 设置 sentry event 级别});
修改 sentry event 信息,对于发生的错误异常可以在发送到 sentry 服务器端之前做修改,对于要忽略的异常也可以在这个事件中做,比如系统中的 TaskCanceledException
,我在使用异步查询方法的时候会传递一个 CancellationToken
,客户端中断了请求就会导致这个 Token 的 Cancel 事件被触发,EF 就会报一个 TaskCanceledException
前段时间,sentry 经常会给我发一些异常邮件,全都是 TaskCanceledException
,我们可以在这个事件里判断如果异常时 TaskCanceledException
就返回一个 null
, 这样这个异常就不会被提交到 sentry 服务器端了
options.BeforeSend = (sentryEvent) =>
{// ignore TaskCanceledException/OperationCanceledExceptionif (sentryEvent.Exception is TaskCanceledException ||sentryEvent.Exception is OperationCanceledException){return null;}return sentryEvent;
};
More
除了基本的异常信息的展示和推送,sentry 还会做异常信息的聚合,相同的异常信息只会展示为一个,还可以做 issue 的分发指派,还可以和 Github、Gitlab 等第三方服务集成,在 Github 中创建 issue 等,更多用法等待着你去发现
Reference
https://github.com/getsentry/sentry
https://docs.sentry.io/platforms/dotnet/microsoft-extensions-logging/
https://docs.sentry.io/platforms/dotnet/aspnetcore/