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语句如下:
CREATE TABLE Log_OperateTrace
( Id NUMBER(,) NOT NULL ,
LogTime TIMESTAMP NOT NULL ,
UserID NVARCHAR2(),
UserName NVARCHAR2(),
LogType NUMBER(,) NOT NULL ,
SystemID NUMBER(,) NOT NULL ,
ServerHost NVARCHAR2() NOT NULL ,
ServerIP NVARCHAR2() NOT NULL ,
ClientHost NVARCHAR2() NOT NULL ,
ClientIP NVARCHAR2() NOT NULL ,
TabOrModu NVARCHAR2(),
Detail NVARCHAR2() NOT NULL ,
Remark NVARCHAR2(),
CONSTRAINT PK_Log_OperateTrace PRIMARY KEY (Id) ) ; create sequence Log_OperateTrace_tb_pk_seq minvalue maxvalue
increment by
start with ; /*步长为1*/ create trigger Log_OperateTrace_tb_pk_tri
before insert on Log_OperateTrace
for each row
begin
select Log_OperateTrace_tb_pk_seq.nextval into :new.Id from dual;
end; CREATE TABLE Log_SystemMonitor
( Id NUMBER(,) NOT NULL ,
LogTime TIMESTAMP NOT NULL ,
SystemID NUMBER(,) NOT NULL ,
ServerHost NVARCHAR2() NOT NULL ,
ServerIP NVARCHAR2() NOT NULL ,
OnlineCnt NUMBER(,) NOT NULL ,
AllVisitors NUMBER(,) NOT NULL ,
RunHours BINARY_DOUBLE NOT NULL ,
CpuUsage BINARY_DOUBLE NOT NULL ,
MemoryUsage BINARY_DOUBLE NOT NULL ,
ProcessNum NUMBER(,) NOT NULL ,
ThreadNum NUMBER(,) NOT NULL ,
CurProcThreadNum NUMBER(,) NOT NULL ,
CurProcMem BINARY_DOUBLE NOT NULL ,
CurProcMemUse BINARY_DOUBLE NOT NULL ,
CurProcCpuUse BINARY_DOUBLE NOT NULL ,
CurSubProcMem BINARY_DOUBLE NOT NULL ,
PageViewNum NVARCHAR2(),
DiskSpace NVARCHAR2(),
Remark NVARCHAR2(),
CONSTRAINT PK_Log_SystemMonitor PRIMARY KEY (Id) ) ; create sequence Log_SystemMonitor_tb_pk_seq minvalue maxvalue
increment by
start with ; /*步长为1*/ create trigger Log_SystemMonitor_tb_pk_tri
before insert on Log_SystemMonitor
for each row
begin
select Log_SystemMonitor_tb_pk_seq.nextval into :new.Id from dual;
end;
以上SQL创建的数据库和字段全部为大写,在SQL语句查询时可不加引号,随意使用大小写,方便程序员使用。
至此,Log2Net组件介绍完毕,从组件的使用方法开始,剥丝抽茧地分析了其代码,最后介绍了其部署和注意事项。欢迎使用,欢迎提出问题~~
Log2Net的部署和运维的更多相关文章
- CEPH集群操作入门--部署和运维
部署 预检和安装Ceph 参考 虚拟机使用ceph-deploy安装ceph 创建群集 添加/删除监视器 密钥管理 添加/删除OSD 添加/删除MDS 清除主机 管理任务 运维 操作群集 健康检查 ...
- FastDFS 分布式文件系统(部署和运维)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/KamRoseLee/article/det ...
- 基于 Nebula Operator 的 K8s 自动化部署运维
摘要:Nebula Operator 是 Nebula Graph 在 Kubernetes 系统上的自动化部署运维插件.在本文,你将了解到 Nebula Operator 的特性及它的工作原理. 从 ...
- DevOps的故事(如何整合开发和运维?)
在一个与我们平行的世界中,有一个软件开发公司.这个公司所做的产品用户量近期增长的十分迅猛,但是令CTO头疼的是公司的两大部门:开发部和运维部近期也是“掐”得厉害.为解决这个问题,CTO决定倒入现在十分 ...
- 网易OpenStack部署运维实战
OpenStack自2010年项目成立以来,已经有超过200个公司加入了 OpenStack 项目,目前参与 OpenStack 项目的开发人员有 17,000+,而且这些数字还在增加,作为一个开源的 ...
- centos7系统管理和运维实战
centos7系统管理和运维实战 centos7安装配置 yum install -y net-tools >/etc/hostname echo "sqlserver01" ...
- dba和运维专家们说有丰富的大型分布式系统架构设计经验纯属扯淡
如果,一开始就从事dba和运维的专家们说他们有丰富的大型分布式系统架构设计经验,那纯属扯淡.除非,他们从是从开发专家或者架构师转型而来,那么他们才有资格说自己有丰富的大型分布式系统架构设计经验. 运维 ...
- Harbor实现容器镜像仓库的管理和运维
本次分享主要讲述了在开发运维中的管理容器镜像方法.为了便于说明原理,较多地使用Harbor作为例子. 内容主要包括: 开发和生产环境中镜像仓库的权限控制: 镜像远程同步(复制)的原理: 大规模应用镜像 ...
- 单表60亿记录等大数据场景的MySQL优化和运维之道
此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据 ...
随机推荐
- 「Sqlserver」数据分析师有理由爱Sqlserver之二-像使用Excel一般地使用Sqlserver
大家一谈数据库,就觉得非常高深莫测,深不见底,非凡人敢去触摸.但Excel的话,没人敢说自己不会使用吧(相反一大堆人的简历上写着精通OFFICE所有软件套件).换作其他非微软厂商的数据库,的确很容易产 ...
- 个人永久性免费-Excel催化剂功能第75波-标签式报表转标准数据源
数据处理永远是数据分析工作中重中之重的任务,大部分人深深地陷入在数据处理的泥潭中,今天Excel催化剂再接再厉,在过往已提供了主从结构报表数据源的数据转换后,再次给大家送上标签式报表数据源的数据转换操 ...
- Cesium 学习(三)各种资源链接
1.前言 前面已经介绍如何获得以及安装部署Cesium,接下来分享下学习资源链接,其中访问最多的是官网以及超图.火星的demo网站. 2.官网地址及介绍 官网:https://cesiumjs.org ...
- vs2013类模板的修改
很多人一起写程序,往往都有规定的代码模板,比如要求每个类都有注释,说明开发者是谁,类的功能以及其他信息.如果每次建一个类,手工去复制这些信息很麻烦,也很容易遗漏.我们可以直接修改VS2013创建类的时 ...
- #!/usr/bin/env bash和#!/usr/bin/bash的比较
#!/usr/bin/env bash和#!/usr/bin/bash的比较 stackoverflow: http://stackoverflow.com/questions/16365130/th ...
- @GetMapping、@PostMapping和@RequestMapping的区别
@GetMapping 用于将Http Get 请求映射到特定处理程序方法的注释.具体来说就是:@GetMapping是一个作为快捷方式的组合注释 @RequestMapping(method = R ...
- Python 之父撰文回忆:为什么要创造 pgen 解析器?
花下猫语: 近日,Python 之父在 Medium 上开通了博客,并发布了一篇关于 PEG 解析器的文章(参见我翻的 全文译文).据我所知,他有自己的博客,为什么还会跑去 Medium 上写文呢?好 ...
- TensorFlow神经网络机器学习使用详细教程,此贴会更新!!!
运行 TensorFlow打开一个 python 终端: $ python >>> import tensorflow as tf >>> hello = tf.c ...
- 如何确定FPGA电路中DDR4的Speed bin 是否兼容?
原创 by DeeZeng DDR4 是否兼容,拿更快速度的DDR4,是否可以不改FPGA工程,直接换料就能直接用? 实际工作中,经常会碰到因为DDR3/4 或其他料件换料了,需要判断FPGA工程中I ...
- java在src/test/resourse下读取properties文件
package com.jiepu; import java.io.File; import java.net.URISyntaxException; import java.util.Map; im ...