Log2Net的部署和運維

  • 2019 年 10 月 3 日
  • 筆記

 

前面幾節中,筆者介紹了Log2Net組件的方方面面。但是,有人說,我用不起來,各種頭疼的小問題。下面,我們就具體的看一看要怎麼把這個組件應用到實際的項目中吧。

一、Log2Net組件的發布

前文中,我們說這個組件已發布到了Nuget,應用時只需要從Nuget安裝Log2Net即可。但是,它是怎麼發布到Nuget的呢。修改這個組件後,想要發布到本區域網內,該怎麼辦呢?下文一一介紹。

1.1 發布組件到Nuget

(1)在VS開發環境中,設置組件的包屬性,將組件發布為nupkg包,如下圖:

在項目屬性–>打包中設置的屬性如上圖所示。然後發布方法如下:

注意這裡的目標框架只顯示了第一個net45,而實際上是支援在項目文件Log2Net.csproj的TargetFrameworks節點配置的所有框架的。 

(2)在https://www.nuget.org/ 上註冊帳號(可使用微軟帳號),設置你的API Key,並將該key保存到本地txt文檔中;

(3)從 https://github.com/NuGetPackageExplorer/NuGetPackageExplorer 下載Nuget包管理器,然後打開第一步生成的包:

(4)點擊NuGetPackageExplorer 的File–>Publish,並在隨後的窗口中填入你的API Key,然後發布即可(你可以在此步驟中修改nupkg包的屬性)。

這樣,就將組件發布到Nuget公網啦,就可以供所有人使用啦。

1.2 發布組件到本地伺服器

在有些時候,我們需要將組件進行修改後再使用,或者不想發布到公網。這時,我們也許可以直接引用生成後的DLL。但是,這樣可能造成組件的版本混亂和不一致,並且在.NetCore中不能直接引用DLL,必須通過Nuget的方式引用DLL。這時,我們可以將組件發布到本地伺服器(使用Nuget.Server)。方法介紹如下。

(1)新建一個空白的網站項目名為CompanyNuGetServer,NuGet中搜索NuGet.Server並安裝;安裝完成後,項目中會自動生成一些文件,如下圖;

 

(2)將該項目發布到你公司/組織的伺服器上,假設為192.168.0.88:16000;

(3)將nupkg包 Log2Net.1.0.6.nupkg放到 192.168.0.88:16000Packages文件夾下;

(4)各業務系統在使用時,在Nuget程式包設置Nuget包管理器—>程式包源中添加 http://192.168.0.88:16000/nuget 。

這樣,你就將包發布到了192.168.0.88:16000上,所有能訪問該網站的人都可使用該伺服器上的程式包。

二、其他組件的配置和使用

各業務網站可通過前文https://www.cnblogs.com/yuchen1030/p/10992259.html 中介紹的方法使用Log2Net組件,發布和配置參照常規網站項目。若有業務網站有特殊的組件配置,則需要對這些組件/服務進行配置和部署。若業務網站不需要這些服務,則不需要部署這些組件。

2.1 RabmitMQ服務

若業務網站需要RabmitMQ方式寫到資料庫,則需要安裝RabmitMQ組件。安裝方法可參考https://www.cnblogs.com/sam-uncle/p/9050242.html 。安裝後,將其作為服務啟動。

2.2 InfluxDB服務

若業務網站配置需要將數據寫到InfluxDB資料庫,則需要安裝InfluxDB資料庫。安裝方法可參考 https://www.cnblogs.com/shuzhenyu/p/9268506.html。安裝後,將其作為服務啟動(可使用NSSM工具將其封裝為服務自啟動)。

2.3 日誌查詢網站的部署

若查詢網站和業務網站的日誌資料庫使用了SQL Swever的讀寫分離,則需要查詢網站伺服器和資料庫伺服器啟用MSDTC分散式交易協調器,資料庫伺服器需要開啟SQL代理,寫伺服器先事務發布,然後讀伺服器訂閱該發布。

2.4 健康檢查服務

Log2Net組件提供了定時採集網站伺服器運行情況日誌的方法。然而,我們不能保證網站伺服器一直處於活躍狀態。一旦網站進入休眠狀態,定時服務可能會暫時停止。我們需要有一套機制來保證網站一直處於活動狀態。本組件是通過定時的健康檢查來實現的。

健康檢查組件是一個Winform開發的小程式,為exe文件,它自動定時檢查各網站,在某網站無響應時,給相關人員發送郵件(每小時內僅發送一次)。用戶可可以手動檢查各網站是否可訪問。該組件的下載路徑為  https://github.com/yuchen1030/Log2Net/tree/master/Resource/WebHealthCheck。效果如下圖所示:

我們可以使用NSSM工具,將該exe文件封裝為自啟動的服務。NSSM的下載地址為http://www.nssm.cc/ 或 https://github.com/yuchen1030/Log2Net/tree/master/Resource/NSSM/nssm-V2.24.rar,使用方法參考https://www.cnblogs.com/TianFang/p/7912648.html 。

 三、Oracle中日誌組件的使用

還記得在日誌組件的配置中,有兩項配置叫 initTraceDBWhenOracle 和 initMonitorDBWhenOracle,分別表示是否使用EF初始化資料庫Trace 表和資料庫Monitor表,它們的默認值是不使用。筆者為什麼要這麼配置呢?這要從Oracle本身的特性談起。

Oracle表和欄位是有大小寫的區別,oracle默認是大寫,並且沒有自增欄位的概念(要使用序列來實現)。在SQL語句中,如果我們把表名/欄位名用雙引號括起來的就區分大小寫,如果沒有,系統會自動轉成大寫。而EF、Navicat等第三方工具在創建表/欄位時,會自動加上雙引號,所以對日誌組件來說,EF創建的表名和欄位名是區分大小寫的,在SQL查詢時必須加上引號才能查出數據,這對程式設計師來說是不友好的。因此我們不使用EF自動創建資料庫,而是手動創建資料庫,並使用序列實現ID欄位的自增,SQL語句如下:

 1   CREATE TABLE Log_OperateTrace   2    (    Id NUMBER(19,0) NOT NULL ,   3     LogTime TIMESTAMP NOT NULL ,   4     UserID NVARCHAR2(100),   5     UserName NVARCHAR2(200),   6     LogType NUMBER(10,0) NOT NULL ,   7     SystemID NUMBER(10,0) NOT NULL ,   8     ServerHost NVARCHAR2(40) NOT NULL ,   9     ServerIP NVARCHAR2(20) NOT NULL ,  10     ClientHost NVARCHAR2(40) NOT NULL ,  11     ClientIP NVARCHAR2(20) NOT NULL ,  12     TabOrModu NVARCHAR2(100),  13     Detail NVARCHAR2(2000) NOT NULL ,  14     Remark NVARCHAR2(2000),  15      CONSTRAINT PK_Log_OperateTrace PRIMARY KEY (Id)  16  17    )  ;  18  19 create sequence Log_OperateTrace_tb_pk_seq minvalue 1 maxvalue 9999999999999999999  20          increment by 1  21          start with 1;   /*步長為1*/  22  23 create trigger Log_OperateTrace_tb_pk_tri  24 before insert on Log_OperateTrace  25  for each row  26 begin  27 select  Log_OperateTrace_tb_pk_seq.nextval into :new.Id from dual;  28 end;  29  30  31  32   CREATE TABLE Log_SystemMonitor  33    (    Id NUMBER(19,0) NOT NULL ,  34     LogTime TIMESTAMP NOT NULL ,  35     SystemID NUMBER(10,0) NOT NULL ,  36     ServerHost NVARCHAR2(40) NOT NULL ,  37     ServerIP NVARCHAR2(20) NOT NULL ,  38     OnlineCnt NUMBER(10,0) NOT NULL ,  39     AllVisitors NUMBER(10,0) NOT NULL ,  40     RunHours BINARY_DOUBLE NOT NULL ,  41     CpuUsage BINARY_DOUBLE NOT NULL ,  42     MemoryUsage BINARY_DOUBLE NOT NULL ,  43     ProcessNum NUMBER(10,0) NOT NULL ,  44     ThreadNum NUMBER(10,0) NOT NULL ,  45     CurProcThreadNum NUMBER(10,0) NOT NULL ,  46     CurProcMem BINARY_DOUBLE NOT NULL ,  47     CurProcMemUse BINARY_DOUBLE NOT NULL ,  48     CurProcCpuUse BINARY_DOUBLE NOT NULL ,  49     CurSubProcMem BINARY_DOUBLE NOT NULL ,  50     PageViewNum NVARCHAR2(2000),  51     DiskSpace NVARCHAR2(2000),  52     Remark NVARCHAR2(2000),  53      CONSTRAINT PK_Log_SystemMonitor PRIMARY KEY (Id)  54  55    )  ;  56  57  58 create sequence Log_SystemMonitor_tb_pk_seq minvalue 1 maxvalue 9999999999999999999  59          increment by 1  60          start with 1;   /*步長為1*/  61  62 create trigger Log_SystemMonitor_tb_pk_tri  63 before insert on Log_SystemMonitor  64  for each row  65 begin  66 select  Log_SystemMonitor_tb_pk_seq.nextval into :new.Id from dual;  67 end;  68  

View Code

 以上SQL創建的資料庫和欄位全部為大寫,在SQL語句查詢時可不加引號,隨意使用大小寫,方便程式設計師使用。

 

至此,Log2Net組件介紹完畢,從組件的使用方法開始,剝絲抽繭地分析了其程式碼,最後介紹了其部署和注意事項。歡迎使用,歡迎提出問題~~