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中String类为什么要设计成final?
大神链接:在java中String类为什么要设计成final? - 程序员 - 知乎 我进行了重新排版,并且更换了其中的一个例子,让我们更好理解. String很多实用的特性,比如说“不可变性”,是工 ...
- Android命令行下蓝牙使用
注意:此部分仅仅适用于broadcom 系列蓝牙芯片,比如RK903, AP6xxx 系列 通过su 命令切换到root 用户 1.先确认RFKILL 驱动已经载入 ls /sys/class/rfk ...
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
腾讯云图片鉴黄集成到C# 官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: public c ...
- The most widely used name server software: BIND
https://www.isc.org/downloads/bind/ The most widely used name server software: BIND BIND is open sou ...
- vue 安装与起步
vue安装: 1.官网下载vue,在script标签里引用(去下载) 2.使用CDN(建议下载到本地,不推荐这种方法): BootCDN:https://cdn.bootcss.com/vue/2.2 ...
- Jmeter使用Http代理服务器报DNSName components must begin with a letter的错
最近了解到JMeter可以实现app的性能测试,需要借助JMeter的Http代理服务器来录制脚本. 于是,就按着网上的教程来进行操作,然而出师不利啊,刚启动就报错
- (转)CSS3全局实现所有元素的内边距和边框不增加
全局设置 border-box 很好,首先它符合直觉,其次它可以省去一次又一次的加加减减 它还有一个关键作用——让有边框的盒子正常使用百分比宽度.但是使用了 border-box 可能会与一些依赖默认 ...
- Django之cookie 和 session
一. 1.cookie的由来!!! 由于HTTP协议是无状态的,既每一次的请求都是独立的,他不会因为你之前来过,就记住你,所以每次浏览器去访问服务器的时候,都是一个全新的过程,之前的数据也不会保留,所 ...
- SimpleHTTPServer
SimpleHTTPServer python -m SimpleHTTPServer 8989
- (30)java web的hibernate使用-c3p0连接池配置
hibernate支持c3p0连接池 需要导入c3p0的jar包 <!-- 配置连接驱动管理类 --> <property name="hibernate.connecti ...