Log2Net的架构简介

  在开始介绍源码以前,咱们有必要了解下整个系统的大体需求,设计架构,观其大略,这样才能从整体上把握为什么细节上要如此设计,不至于在代码的海洋中迷失,时不时吐槽为什么要这么多代码。高屋建瓴地把控系统的全局,孜孜不倦地研读细节,是研读一个系统的好方法。数据库

1、系统需求

  本系统收集各信息化系统的日志,将其存储在数据库中,而后对日志进行查询和实时显示。缓存

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等数据库中,能够方便扩展到其余数据库。并发

2、系统架构设计

  日志管理系统是将各信息化系统的日志统一收集到本系统,在本系统进行统一管理、查询、监控。其架构方案为:开发一个日志收集组件,将运行日志、用户日志等存储到文件或数据库;各业务网站调用该组件,将日志记录到数据中;使用读写分离技术,将数据复制到读服务器,供日志查询监控服务查询调用数据,而后显示数据到用户端,并提供必要的告警显示。本架构以SQL为例说明:系统采用日志组件将日志记录到SQL数据库(先将日志发送到RabbitMQ消息队,日志消费存储任务再将其存储到数据库),便于之后采用SQL发布订阅方式实现读写分离和数据查询。其系统架构以下图所示:框架

  本系统要支持不特定的业务系统,须要支持.net和.netCore。为适应数据并发的现实须要,建议采用消息队列缓存数据。为减轻数据库压力,采用读写分离的方案,而且能够将操做数据和监控数据存在在不一样的数据库中,实现分库分表的理念。高并发

  要支持多框架,使用VS2017的 TargetFrameworks 属性,在项目代码中使用 #if #else #endif条件编译指明各个平台下适用的代码。性能

  要支持多种数据库,定义一组接口方法,而后每种数据库都实现这个接口便可。  网站

  该系统的业务流程为:各信息化系统调用调用日志收集存储组件Log2Net,将日志信息储存到数据库中。日志查询人员根据条件从该数据库中查询到日志数据,系统监控人员根据监控条件从该数据中查询获得监控数据。业务流程以下图:.net

   这一篇中,咱们知道了要干什么,知道了要怎么作,下一篇,咱们将抽丝剥茧,详细介绍代码的实现。

相关文章
相关标签/搜索