Log2Net的架构简介
在开始介绍源码之前,我们有必要了解下整个系统的大致需求,设计架构,观其大略,这样才能从总体上把握为何细节上要如此设计,不至于在代码的海洋中迷失,时不时吐槽为何要这么多代码。高屋建瓴地把控系统的全局,孜孜不倦地研读细节,是研读一个系统的好方法。
一、系统需求
本系统收集各信息化系统的日志,将其存储在数据库中,然后对日志进行查询和实时显示。
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等数据库中,可以方便扩展到其他数据库。
二、系统架构设计
日志管理系统是将各信息化系统的日志统一收集到本系统,在本系统进行统一管理、查询、监控。其架构方案为:开发一个日志收集组件,将运行日志、用户日志等存储到文件或数据库;各业务网站调用该组件,将日志记录到数据中;使用读写分离技术,将数据复制到读服务器,供日志查询监控服务查询调用数据,然后显示数据到用户端,并提供必要的告警显示。本架构以SQL为例说明:系统采用日志组件将日志记录到SQL数据库(先将日志发送到RabbitMQ消息队,日志消费存储任务再将其存储到数据库),便于以后采用SQL发布订阅方式实现读写分离和数据查询。其系统架构如下图所示:
本系统要支持不特定的业务系统,需要支持.net和.netCore。为适应数据并发的现实需要,建议采用消息队列缓存数据。为减轻数据库压力,采用读写分离的方案,并且可以将操作数据和监控数据存在在不同的数据库中,实现分库分表的理念。
要支持多框架,使用VS2017的 TargetFrameworks 属性,在项目代码中使用 #if #else #endif条件编译指明各个平台下适用的代码。
要支持多种数据库,定义一组接口方法,然后每种数据库都实现这个接口即可。
该系统的业务流程为:各信息化系统调用调用日志收集存储组件Log2Net,将日志信息储存到数据库中。日志查询人员根据条件从该数据库中查询到日志数据,系统监控人员根据监控条件从该数据中查询得到监控数据。业务流程如下图:
这一篇中,我们知道了要干什么,知道了要怎么做,下一篇,我们将抽丝剥茧,详细介绍代码的实现。
Log2Net的架构简介的更多相关文章
- LoadRunner系统架构简介
1.LoadRunner系统架构简介 LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP ...
- crtmpserver的架构简介
crtmpserver的架构简介 一.层 Layers . 机器层 Machine layer . 操作系统层 Operating System Layer This layer is compo ...
- Extjs6官方文档译文——应用架构简介(MVC,MVVM)
应用架构简介 Extjs 同时提供对于MVC和MVVM应用架构的支持.这两个架构方式共享某些概念,而且都旨在沿着逻辑层面划分应用程序代码.每种方法在选择如何划分应用组件上都有其各自的优势. 本指南的目 ...
- Kafka:架构简介【转】
转:http://www.cnblogs.com/f1194361820/p/6026313.html Kafka 架构简介 Kafka是一个开源的.分布式的.可分区的.可复制的基于日志提交的发布订阅 ...
- LoadRunner系统架构简介与运行原理
1.LoadRunner系统架构简介 LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP ...
- Cortex-M0(+)内核的处理器架构简介
Cortex-M0(+)内核的处理器架构简介 2015年03月02日 16:51:12 阅读数:3158 系统架构 Cortex-M0处理器具有32位系统总线接口,以及32位地址线,即有4GB的地址空 ...
- 【转帖】LoadRunner系统架构简介
LoadRunner系统架构简介: LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP协 ...
- TP 5.0 架构 简介
TP 5.0 架构 简介 thinkphp 5.0 为API开发而设计的的高性能框架,是与以往thinkphp5.0以下版本大不相同的新型框架,病对以颠覆和重构版本,采用全新的架构思想,引入了更多的P ...
- ceph架构简介
ceph架构简介 在测试OpenStack的后端存储时,看到了ceph作为后端存储时的各种优势 ,于是查询资料,总结了这篇ceph架构的博客,介绍了ceph的架构和ceph的核心组件.ceph整体十分 ...
随机推荐
- java开始到熟悉72-76
本次内容:异常机制 1.为什么需要异常 2.异常 3.error类 4.exception类 5.exception类中的unchecked exception 举例: 6.常用异常处理方法 a.tr ...
- Codeforces 486E LIS of Sequence(线段树+LIS)
题目链接:Codeforces 486E LIS of Sequence 题目大意:给定一个数组.如今要确定每一个位置上的数属于哪一种类型. 解题思路:先求出每一个位置选的情况下的最长LIS,由于開始 ...
- UVA 11246 - K-Multiple Free set(数论推理)
UVA 11246 - K-Multiple Free set 题目链接 题意:一个{1..n}的集合.求一个子集合.使得元素个数最多,而且不存在有两个元素x1 * k = x2,求出最多的元素个数是 ...
- Struts拦截器(转)
xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC &qu ...
- const成员函数总结
const 成员函数: 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作不论什么改变. 在设计类的时候.一个原则就是对于不改变数据成员的成员函数都要 ...
- Jupyter notebook 使用Turorial
The cell magics in IPython http://nbviewer.jupyter.org/github/ipython/ipython/blob/1.x/examples/note ...
- 转移iOS App常见问题和回答
打算转移公司的app,做下转移的记录 怎样转移app官方的一个视频:http://v.youku.com/v_show/id_XNjI0MjQxMzI0.html 以下是apple官方转移常见问题回答 ...
- SpringBoot项目 部署到服务器的tomcat下
把spring-boot项目按照平常的web项目一样发布到tomcat容器下 一.修改pom文件 修改打包方式 修改或增加maven插件 注意: 二.移除嵌入式tomcat插件 三.添加servlet ...
- CodeChef - COUNTARI FTT+分块
Arithmetic Progressions Given N integers A1, A2, …. AN, Dexter wants to know how many ways he can ch ...
- vue中导出Excel表格
项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地.当然我们也可以通过一些处理来修改要导出的数据格式,具体需求具体对待. 1.首先我们需要安装 ...