写在前面

从上一篇博客高并发、低延迟之C#玩转CPU高速缓存(附示例)到现在又有几个月没写博客了,啥也不说,变得越来越懒了,懒惰产生了拖延后遗症。

最近一周升级了微服务项目使用的分布式日志组件Exceptionless到最新的版本,随着项目的不断迭代上线,我们总是想要第一时间知晓线上程序是否正常运行,特别是采用微服务架构的项目,不然心里总感觉有一块石头不知道啥时候落地。前期都是人工时不时地查看,其中有一次,异常都报了几个小时了,但是由于当时我正在专注地做另外的事情,直到线上出现服务不可用时才发现,于是决定暂时放下手头所有的事情,接入Exceptionless的事件通知机制,当抛出异常、或者发生错误的日志时,发送消息了钉钉办公群,做到实时感知运维报警提醒,所以需要接入Exceptionless的Webhook通知类型,

什么是webhook?

WebHook,是一种HTTP交互的增强模式,是用户定义的http回调,这些回调由第三方的用户、开发人员自己定义、维护、管理,就好像允许别人挂载一条带钩的线到你的Web网站或者应用程序的上,然后通过这条线实时地给你推送信息,这条带钩的线就叫web钩子。 也可以将webhook看作是一种简洁的Sub/pub模式,只不过此时事件的载体是一个Http Post请求。

一言以蔽之,web钩子就是一种http回调,由于一般都采用post的方式来推送信息,更直接、简单地说web钩子就是一种http post回调

正是由于它的简洁性,很多主流的Saas系统都暴露有自己的Webhook,其中包括Dropbox, GitHub, GitLab, Instagram, MailChimp, PayPal, Slack, Trello等等,例如,我们可以为github代码提交定义一个web钩子;为Paypal的支付状态定义一个Web钩子;这样就能够实时地收到来自应用的推送信息,而不必要不断地轮训来请求信息。

一图胜千言:

有了上面的铺垫,那么与Exceptionless的集成就如下图所示:

定义Exceptionless的web钩子

从上图可以看到,web钩子就是一个能够处理http post请求的web server后端,决定采用aspnet core来实现,首先调研了微软的项目WebHooks,它并没有对接Exceptionless,而且还是采用MVC开发,最终找到了另外一个开源项目,采用中间件拦截,我在其基础上进行了如下扩展:

  1. 添加容器化部署脚本,支持docker、kubernetes,迎合云原生。
  2. 扩展事件模型,添加环境、来源等信息,方便追溯。
  3. 升级项目为netcoreapp2.1。
  4. 优化httpclient使用方式。
  5. 本地化事件时间、容器时间、序列化时间。

并添加详细的部署、配置说明。有兴趣同学欢迎查看我的项目exceptionless-webhooks

最终的钉钉群消息:

今日正题

完成了上面的准备工作,现在开始进入正题,扩展Exceptionless的通知类型。

浅析Exception工作机制

Exceptionless逻辑上采用完全异步化的设计,当收到日志事件时,首先写到缓存队列(redis),然后再启动各种job来消费消息,最终写到elasticsearch数据库,所以说Exceptionless是一个准实时的分布式日志组件,事件的处理管道如图所示:

首先对事件进行守卫检查、分配到Stack(分类聚合事件)、打标记(比如:关键错误)等,然后保存事件,更新统计信息,最后发送各种通知,大致流程就是这样子。那么自然而然与通知(包括Email、Slack即时通讯、Web钩子等)相关的处理逻辑就在都在步骤070中。
扩展新的事件通知类型

  • Error
    未知的异常
  • LogError
    错误的日志信息

1. 添加新的事件类型元数据。

2. 添加新的事件类型扩展方法。

3. 修改步骤070中的逻辑。

到目前为止,Exceptionless的后端修改工作圆满完成,接下来修改它的Argular前端,具体的修改代码就不贴了,最终的界面如下:

到这里所有的工作都已经完成了,通过选择配置项控制Webhook的事件通知类型,达到了预期目的。

总结

本篇我们先以白话文的方式讲解了什么是webhook,为后面与Exceptionless的集成做好铺垫,然后编写了web钩子程序,最后通过为Exceptionless扩展新的事件通知类型来满足我们的需求,希望把从分析到最后完工的整个过程分享给大家。

最新的代码
后端:https://github.com/justmine66/Exceptionless
前端:https://github.com/justmine66/Exceptionless.UI

写在最后

如果有什么疑问和见解,欢迎评论区交流。
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
如果你也对Exceptionless感兴趣的话可以关注我,我会定期的在博客分享我的学习心得。

如何扩展分布式日志组件(Exceptionless)的Webhook事件通知类型?的更多相关文章

  1. 容器化分布式日志组件ExceptionLess的Angular前端UI

    写在前面 随着微服务架构的流行,日志也需要由专门的分布式日志组件来完成这个工作,我们项目使用的是 ExceptionLess 这个组件,它是前后端分离的:这篇文章我们就来实践容器化 Exception ...

  2. 分布式日志框架Exceptionless之生产环境部署步骤

    Exceptionless 是一个开源的实时的日志收集框架,它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置.本篇基于我的上一篇<基于Exceptionless实现分布式日志> ...

  3. .NET开源分布式日志框架ExceptionLess实战演练(公开版)

    一.课程介绍 在以前,我们做日志收集大多使用 Log4net,Nlog 等框架,在应用程序变得复杂并且集群的时候,可能传统的方式已经不是很好的适用了,因为收集各个日志并且分析他们将变得麻烦而且浪费时间 ...

  4. .NetCore 分布式日志收集Exceptionless 在Windows下本地安装部署及应用实例

    自己安装时候遇到很多问题,接下来把这些问题写出来希望对大家有所帮助 搭建环境: 1.下载安装 java 8 SDK (不要安装最新的10.0) 并配置好环境变量(环境变量的配置就不做介绍了) 2.下载 ...

  5. 开源分布式日志系统ExceptionLess部署杂乱笔记 加密

    前两天看到了这篇文章,亲身体会了下,确实不错,按照官方的文档试了试本地部署,折腾一番后终于成功,记下心得在此,不敢独享. 本地部署官方wiki .NET 4.6.1 这个因为我装了VS2015,就没有 ...

  6. .NET Core微服务之基于Exceptionless实现分布式日志记录

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Exceptionless极简介绍 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,AS ...

  7. .Net Core 集成ExceptionLess分布式日志框架之本地化部署

    前言 公司目前使用的项目中关于日志记录这块,之前一直都是使用的Log4net 存放于后台文件中的,对于异常错误啊,或者需要查看一些详情错误的时候感觉很不方便,要到服务器上去打开日志文件检索错误,降低了 ...

  8. .NETCore微服务探寻(三) - 分布式日志

    前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目 ...

  9. PowerJob 在线日志饱受好评的秘诀:小但实用的分布式日志系统

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 项目地址: https://github.com/ ...

随机推荐

  1. Google揭开Mesa的神秘面纱——一个具备跨地域复制和近实时特性的可伸缩数据仓库

    http://www.infoq.com/cn/news/2014/08/google-data-warehouse-mesa Google发表了一篇新的论文,该论文描述了他们内部所使用的一个被称为M ...

  2. pymongo "ServerSelectionTimeoutError: No servers found yet" 错误的解决

    系统转移过程中,擅自把aptitude安装的mongoengine换成了pip安装,系统启动以后,报这个错误 报错提示: File "/usr/local/lib/python2.7/dis ...

  3. Java杂记9—NIO

    前言 非阻塞IO,也被称之为新IO,它重新定义了一些概念. 缓冲buffer 通道 channel 通道选择器 BIO 阻塞IO,几乎所有的java程序员都会的字节流,字符流,输入流,输出流等分类就是 ...

  4. centos 7查看防火墙报错(已解决,之前安装过python3)

    [root@localhost ~]# service firewalld restartRedirecting to /bin/systemctl restart firewalld.service ...

  5. 黄文俊:Serverless小程序后端技术分享

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 黄文俊,现任腾讯云SCF无服务器云函数高级产品经理,多年企业级系统开发和架构工作经验,对企业级存储.容器平台.微服务架构.无服务器计算等领域 ...

  6. 多层嵌套的json数据

    很多时候我们见到的json数据都是多层嵌套的,就像下面这般: {"name":"桔子桑", "sex":"男", , & ...

  7. 【数据可视化之Flask】快速设计和部署Flask网站

    Flask是Python应用于WEB开发的第三方开源框架,以设计简单高效著称.我也尝试过Django,相对于Flask显得更加全面同样也更加笨重,并且我也不需要它的后台管理功能,因此选择了Flask作 ...

  8. C# 数据库链接字符串加密工具

    有些项目尤其是WinForm或者是WPF项目,针对一些工具形式的小项目,不想软件流出去之后,懂程序的的拿到手之后一看配置文件就知道了我们数据库的用户名和密码,如果外网能访问的话,那就麻烦大了.所以这里 ...

  9. eclipse配置tomcat后启动报内存错误解决方法

    一.双击tomcat服务,打开配置界面 二.打开launch configuration窗口,在Argument最后面加入:-Xms256m -Xmx512m -XX:PermSize=256M -X ...

  10. python爬虫入门(七)Scrapy框架之Spider类

    Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...