Log2Net的部署和运维
前面几节中,笔者介绍了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:16000的 Packages文件夹下;
(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
以上SQL创建的数据库和字段全部为大写,在SQL语句查询时可不加引号,随意使用大小写,方便程序员使用。
至此,Log2Net组件介绍完毕,从组件的使用方法开始,剥丝抽茧地分析了其代码,最后介绍了其部署和注意事项。欢迎使用,欢迎提出问题~~