如何擴展分佈式日誌組件(Exceptionless)的Webhook事件通知類型?

寫在前面

從上一篇博客高併發、低延遲之C#玩轉CPU高速緩存(附示例)到如今又有幾個月沒寫博客了,啥也不說,變得愈來愈懶了,懶惰產生了拖延後遺症。
imghtml

最近一週升級了微服務項目使用的分佈式日誌組件Exceptionless到最新的版本,隨着項目的不斷迭代上線,咱們老是想要第一時間知曉線上程序是否正常運行,特別是採用微服務架構的項目,否則內心總感受有一塊石頭不知道啥時候落地。前期都是人工時不時地查看,其中有一次,異常都報了幾個小時了,可是因爲當時我正在專一地作另外的事情,直到線上出現服務不可用時才發現,因而決定暫時放下手頭全部的事情,接入Exceptionless的事件通知機制,當拋出異常、或者發生錯誤的日誌時,發送消息了釘釘辦公羣,作到實時感知運維報警提醒,因此須要接入Exceptionless的Webhook通知類型,前端

什麼是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

img

有了上面的鋪墊,那麼與Exceptionless的集成就以下圖所示:docker

定義Exceptionless的web鉤子

從上圖能夠看到,web鉤子就是一個可以處理http post請求的web server後端,決定採用aspnet core來實現,首先調研了微軟的項目WebHooks,它並無對接Exceptionless,並且仍是採用MVC開發,最終找到了另一個開源項目,採用中間件攔截,我在其基礎上進行了以下擴展:數據庫

  1. 添加容器化部署腳本,支持docker、kubernetes,迎合雲原生。
  2. 擴展事件模型,添加環境、來源等信息,方便追溯。
  3. 升級項目爲netcoreapp2.1。
  4. 優化httpclient使用方式。
  5. 本地化事件時間、容器時間、序列化時間。

並添加詳細的部署、配置說明。有興趣同窗歡迎查看個人項目exceptionless-webhooks後端

最終的釘釘羣消息:緩存

Image text

今日正題

完成了上面的準備工做,如今開始進入正題,擴展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感興趣的話能夠關注我,我會按期的在博客分享個人學習心得。

相關文章
相關標籤/搜索