日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何扩展分布式日志组件(Exceptionless)的日志通知?

發布時間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何扩展分布式日志组件(Exceptionless)的日志通知? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:justmine
頭條號:大數據與云原生
微信公眾號:大數據與云原生
創作不易,在滿足創作共用版權協議的基礎上可以轉載,但請以超鏈接形式注明出處。
為了方便閱讀,微信公眾號已按分類排版,后續的文章將在移動端首發,想學習云原生相關知識,請關注我

寫在前面

從上一篇博客高并發、低延遲之C#玩轉CPU高速緩存(附示例)到現在又有幾個月沒寫博客了,啥也不說,變得越來越懶了,懶惰產生了拖延后遺癥。

最近一周升級了微服務項目使用的分布式日志組件Exceptionless到最新的版本,隨著項目的不斷迭代上線,我們總是想要第一時間知曉線上程序是否正常運行,特別是采用微服務架構的項目,不然心里總感覺有一塊石頭不知道啥時候落地。前期都是人工時不時地查看,其中有一次,異常都報了幾個小時了,但是由于當時我正在專注地做另外的事情,直到線上出現服務不可用時才發現,于是決定暫時放下手頭所有的事情,接入Exceptionless的事件通知機制,當拋出異常、或者發生錯誤的日志時,發送消息了釘釘辦公群,做到實時感知運維報警提醒,所以需要接入Exceptionless的Webhook通知類型。

話外音:Exceptionless的webhook通知類型不支持實時Error、Log級別的Error,故需要擴展來滿足自身需求。

什么是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開發,最終找到了另外一個開源項目,采用中間件攔截,我在其基礎上進行了如下擴展:

  • 添加容器化部署腳本,支持docker、kubernetes,迎合云原生。

  • 擴展事件模型,添加環境、來源等信息,方便追溯。

  • 升級項目為netcoreapp2.1。

  • 優化httpclient使用方式。

  • 本地化事件時間、容器時間、序列化時間。

  • 并添加詳細的部署、配置說明。有興趣同學歡迎查看我的項目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)的日志通知?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。