从上一篇博客高并发、低延迟之C#玩转CPU高速缓存(附示例)到如今又有几个月没写博客了,啥也不说,变得愈来愈懒了,懒惰产生了拖延后遗症。
html
最近一周升级了微服务项目使用的分布式日志组件Exceptionless到最新的版本,随着项目的不断迭代上线,咱们老是想要第一时间知晓线上程序是否正常运行,特别是采用微服务架构的项目,否则内心总感受有一块石头不知道啥时候落地。前期都是人工时不时地查看,其中有一次,异常都报了几个小时了,可是因为当时我正在专一地作另外的事情,直到线上出现服务不可用时才发现,因而决定暂时放下手头全部的事情,接入Exceptionless的事件通知机制,当抛出异常、或者发生错误的日志时,发送消息了钉钉办公群,作到实时感知运维报警提醒,因此须要接入Exceptionless的Webhook通知类型,前端
WebHook,是一种HTTP交互的加强模式,是用户定义的http回调,这些回调由第三方的用户、开发人员本身定义、维护、管理,就好像容许别人挂载一条带钩的线到你的Web网站或者应用程序的上,而后经过这条线实时地给你推送信息,这条带钩的线就叫web钩子。 也能够将webhook看做是一种简洁的Sub/pub模式,只不过此时事件的载体是一个Http Post请求。git
一言以蔽之,web钩子就是一种http回调,因为通常都采用post的方式来推送信息,更直接、简单地说web钩子就是一种http post回调。github
正是因为它的简洁性,不少主流的Saas系统都暴露有本身的Webhook,其中包括Dropbox, GitHub, GitLab, Instagram, MailChimp, PayPal, Slack, Trello等等,例如,咱们能够为github代码提交定义一个web钩子;为Paypal的支付状态定义一个Web钩子;这样就可以实时地收到来自应用的推送信息,而没必要要不断地轮训来请求信息。web
一图胜千言:redis
有了上面的铺垫,那么与Exceptionless的集成就以下图所示:docker
从上图能够看到,web钩子就是一个可以处理http post请求的web server后端,决定采用aspnet core来实现,首先调研了微软的项目WebHooks,它并无对接Exceptionless,并且仍是采用MVC开发,最终找到了另一个开源项目,采用中间件拦截,我在其基础上进行了以下扩展:数据库
并添加详细的部署、配置说明。有兴趣同窗欢迎查看个人项目exceptionless-webhooks 。后端
最终的钉钉群消息:缓存
完成了上面的准备工做,如今开始进入正题,扩展Exceptionless的通知类型。
Exceptionless逻辑上采用彻底异步化的设计,当收到日志事件时,首先写到缓存队列(redis),而后再启动各类job来消费消息,最终写到elasticsearch数据库,因此说Exceptionless是一个准实时的分布式日志组件,事件的处理管道如图所示:
首先对事件进行守卫检查、分配到Stack(分类聚合事件)、打标记(好比:关键错误)等,而后保存事件,更新统计信息,最后发送各类通知,大体流程就是这样子。那么天然而然与通知(包括Email、Slack即时通信、Web钩子等)相关的处理逻辑就在都在步骤070中。
扩展新的事件通知类型:
到目前为止,Exceptionless的后端修改工做圆满完成,接下来修改它的Argular前端,具体的修改代码就不贴了,最终的界面以下:
到这里全部的工做都已经完成了,经过选择配置项控制Webhook的事件通知类型,达到了预期目的。
本篇咱们先以白话文的方式讲解了什么是webhook,为后面与Exceptionless的集成作好铺垫,而后编写了web钩子程序,最后经过为Exceptionless扩展新的事件通知类型来知足咱们的需求,但愿把从分析到最后完工的整个过程分享给你们。
最新的代码
后端:https://github.com/justmine66/Exceptionless。
前端:https://github.com/justmine66/Exceptionless.UI。
若是有什么疑问和看法,欢迎评论区交流。 若是你以为本篇文章对您有帮助的话,感谢您的【推荐】。 若是你也对Exceptionless感兴趣的话能够关注我,我会按期的在博客分享个人学习心得。