Log2Net的部署和运维

Posted yuchen1030

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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: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组件介绍完毕,从组件的使用方法开始,剥丝抽茧地分析了其代码,最后介绍了其部署和注意事项。欢迎使用,欢迎提出问题~~

以上是关于Log2Net的部署和运维的主要内容,如果未能解决你的问题,请参考以下文章

CMDB和运维自动化

持续集成:Jenkins部署

云上Prometheus监控运维最佳实践

信息自动化

DevOps

研发运维双管齐下!Seal AppManager的正确打开方式