.net core 集成 sentry 进行异常报警

.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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Qt入门]QTableWidget控件创建

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//TableWidget控件//设置列数ui->tableWidget->setColumnCount(3);//设置水平表头ui->tableWidget->…

Zookeeper--Watcher机制源码剖析一

Watcher-- 数据变更通知 我们知道Zookeeper提供来分布式数据的订阅/发布功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某个主题对象,当这个被监听对象自身状态发生变化时候,会通知所有订阅…

.NET Core 3.1 的REST 和gRPC 性能测试

看到越南小哥 的github 上的Evaluating Performance of REST vs. gRPC , 使用的是.NET Core 3.0 , 今天我把它升级到.NET Core 3.1 同样做了一个测试,文章的结果和他的博客文章是一样的:https://dev.to/thangchung/performance-benchmark-grp…

Zookeeper--Watcher机制源码剖析二

Watcher触发 我们从实际操作时候的表现来看Watcher的触发,比如Zookeeper中NodeDataChanged时间的触发是“Watcher监听的对应数据节点的数据内容发生变更”,需要修改节点数据那么必然和数据节点存储的位置DataTree有关系,我们从这里去寻找修改…

吴军《硅谷来信》工作篇学习总结

【学习总结】| 作者 / Edison Zhou这是恰童鞋骚年的第215篇原创文章2018年在得到App上订阅了吴军老师的《硅谷来信》,从此每天的碎片时间就开始听吴军老师在大洋彼岸寄来的信件了。整个来信涵盖了职业发展、工作效率、业余生活等多个主题,从吴军老师的视…

Zookeeper实践与应用-- Nginx负载均衡差异

Nginx/ZooKeeper 负载均衡的差异 Nginx 是我们常见的反向代理服务器,也被广泛的用作负载均衡服务器ZooKeeper是分布式协调服务框架,有时也被用来做负载均衡 Nginx Nginx负载均衡配置非常简单,吧多个Web Server配置到nginx中,用…

从对我的质疑说起,谈谈Linux下的文件删除

特特本来就是个刚毕业的小菜,很多知识都是靠着大家的指点才慢慢学会的。之前在一篇"纯属虚构"的文章 (鹅厂后台开发工程师的工作日常) 提到使用 rm 命令删除一个近 100 G 的 log 文件。很荣幸,这篇文章被一个大号转载了,获得了很不…

Zookeeper实践与应用--分布式锁实现

分布式锁 分布式锁是控制分布式系统之间同步访问资源的一种方式,如果不同系统是同一个系统的不同主机之间共享一个或一组资源,那么访问这些资源的时候,往往需要通过一些呼哧手段来防止彼此之间的干扰保证统一性,因此需要分布式锁…

关于 Blazor Server Side 的一些杂项, 感想

在2016年, 本人就开始了一个内部项目, 其特点就是用C#构建DOM树, 然后把DOM同步到浏览器中显示. 并且在一些小工程中使用.3年下来, 效果很不错, 但因为是使用C#来构建控件树, 在没有特定语法的情况下, 代码风格不是那么好.典型的风格大概是这样的:这个模式挺好的, 有点嫌弃C#代…

重现江湖!大数据高并发——架构师秘籍

大数据高并发的话题屡见不鲜,各种应对的方式方法也四处可见。然而笔试面试中一问就懵,简直是高薪拦路虎。为什么呢?究其原因,还是思路不清晰,缺乏实操,所以一问就倒。作为专注.Net领域十几年的老司机&#…

[剑指offer]面试题4:替换空格

面试题4:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。 ❖ 时间复杂度为O(n2)的解法,不足以拿到Offer…

Zookeepe实践与应用--分布队列

分布式队列 接触到不少分布式队列的产品,比如,ActiveMq,RocketMQ,kafka等消息中间价,现在我们看看Zookeeper实现的分布式队列。分布式队列简单讲就可以分两个部分,一种是先进先出,另外一种是等…

ASP.NET Core+Quartz.Net实现web定时任务

点击蓝色“Dotnet Plus”关注我哟加个“星标”,每天清晨 07:25,干货推送!作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主…

Redis基础数据结构内部实现简单介绍

5种基础数据结构 Redis有5种基础数据结构,分别是:String(字符串),list(列表),hash(字典),set(集合),zset&…

[剑指offer]面试题7:用两个栈实现队列

面试题7:用两个栈实现队列 题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 用两个栈模拟一个队列的操作: 代码如下: #include …

ASP.NET CORE WEBAPI文件下载

最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1。考虑如下场景:文件是程序生成的。文件应该能兼容各种格式。浏览器可以感知进行下载。准备经过简单的调研,得到以下结论。ASP.NET CORE 提供FileResult这种类型的ActionResul…

Redis高级数据结构原理解析-bitmap,hyperloglog

Redis 位图 开发过程中,我们可能遇到这种场景记录用户的打卡情况,签到情况,这些场景只有两种结果,有或者没有,加入记录的数据量比较大,比如用一年的数据,如果用Redis中普通key/value&#xff0…

[剑指offer]面试题8:旋转数组的最小数字

面试题8:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数…

.NET Core + Kubernetes:快速体验

Kubernetes[1] 是目前非常主流的容器编排工具,在应用创建、应用部署、应用扩容、应用更新等方面都非常的方便,而且在应用故障时,也可以快速自愈。所以基于微服务架构下的产品,了解 Kubernetes 的使用是非常必要的,我猜…

[剑指offer]面试题9:斐波那契数列

面试题9:斐波那契数列 题目一:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下: ❖ 效率很低的解法,挑剔的面试官不会喜欢 代码如下: long long fib(…