Log2Net的架構簡介

  在開始介紹源碼以前,咱們有必要了解下整個系統的大體需求,設計架構,觀其大略,這樣才能從整體上把握爲什麼細節上要如此設計,不至於在代碼的海洋中迷失,時不時吐槽爲什麼要這麼多代碼。高屋建瓴地把控系統的全局,孜孜不倦地研讀細節,是研讀一個系統的好方法。數據庫

1、系統需求

  本系統收集各信息化系統的日誌,將其存儲在數據庫中,而後對日誌進行查詢和實時顯示。緩存

1.1 日誌的類型
  信息化系統的日誌有如下幾種狀況:
  (1)、用戶行爲日誌:登陸、數據庫增刪改操做;
  (2)、業務變動日誌:特定業務數據的變動記錄;
  (3)、系統級運行日誌:啓停、流量監控、調試日誌、異常日誌等;
  (4)、頁面訪問日誌:頁面訪問量、中止時間,某按鈕的點擊次數等。
  根據這些日誌類型,將日誌分爲兩類進行監控和記錄:操做軌跡類和系統訪問運行類。
1.2 操做軌跡類
  操做軌跡類包括:數據庫增刪改查、用戶登陸、業務操做/變動、系統調試/異常日誌。
  這些操做具備相同的結構,具備相同的字段:用戶名(用戶id)、操做類型、時間、記錄內容、系統名稱、服務器ip、服務器機器名、客戶ip、客戶機器名、數據庫操做類有數據庫名/表名,其餘類(業務操做、系統相關)有模塊名稱。服務器

1.3 系統訪問運行類
  系統訪問運行主要以圖形的方式展現服務器的運行狀況:包括在線人數、歷史訪客、進程數、CPU使用率、內存使用率、頁面訪問人數等。
  這些數據有當前時刻值和歷史曲線圖,每分鐘主動刷新一次。架構

1.4 多平臺需求
  該日誌系統能夠應用在.NET4.5/.NET4.5.7/NET4.5.2/.NET4.6/.NET4.6.1/NET4.6.2/.NET4.7/.NET4.7.1/NET4.7.2框架的.NET平臺上,也能夠運行在.NetCore2.0/.NetCore2.1框架的.NetCore平臺上。其餘的框架因爲版本較舊,性能功能不是很完善,使用較少,暫不支持。
1.5 多儲存介質需求
  系統的日誌能夠存儲到文件中,可也以存儲在數據庫中。存儲在數據庫時,能夠支持直接儲存到數據庫,也能夠經過消息隊列轉存到數據庫(適用於高併發的狀況)。能夠存儲在Sql Server,Oracle,MySql等數據庫中,能夠方便擴展到其餘數據庫。併發

2、系統架構設計

  日誌管理系統是將各信息化系統的日誌統一收集到本系統,在本系統進行統一管理、查詢、監控。其架構方案爲:開發一個日誌收集組件,將運行日誌、用戶日誌等存儲到文件或數據庫;各業務網站調用該組件,將日誌記錄到數據中;使用讀寫分離技術,將數據複製到讀服務器,供日誌查詢監控服務查詢調用數據,而後顯示數據到用戶端,並提供必要的告警顯示。本架構以SQL爲例說明:系統採用日誌組件將日誌記錄到SQL數據庫(先將日誌發送到RabbitMQ消息隊,日誌消費存儲任務再將其存儲到數據庫),便於之後採用SQL發佈訂閱方式實現讀寫分離和數據查詢。其系統架構以下圖所示:框架

  本系統要支持不特定的業務系統,須要支持.net和.netCore。爲適應數據併發的現實須要,建議採用消息隊列緩存數據。爲減輕數據庫壓力,採用讀寫分離的方案,而且能夠將操做數據和監控數據存在在不一樣的數據庫中,實現分庫分表的理念。高併發

  要支持多框架,使用VS2017的 TargetFrameworks 屬性,在項目代碼中使用 #if #else #endif條件編譯指明各個平臺下適用的代碼。性能

  要支持多種數據庫,定義一組接口方法,而後每種數據庫都實現這個接口便可。  網站

  該系統的業務流程爲:各信息化系統調用調用日誌收集存儲組件Log2Net,將日誌信息儲存到數據庫中。日誌查詢人員根據條件從該數據庫中查詢到日誌數據,系統監控人員根據監控條件從該數據中查詢獲得監控數據。業務流程以下圖:.net

   這一篇中,咱們知道了要幹什麼,知道了要怎麼作,下一篇,咱們將抽絲剝繭,詳細介紹代碼的實現。

相關文章
相關標籤/搜索