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

一、系统需求

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

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的架构简介的更多相关文章

  1. LoadRunner系统架构简介

    1.LoadRunner系统架构简介 LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP ...

  2. crtmpserver的架构简介

    crtmpserver的架构简介 一.层 Layers . 机器层 Machine layer . 操作系统层 Operating System Layer   This layer is compo ...

  3. Extjs6官方文档译文——应用架构简介(MVC,MVVM)

    应用架构简介 Extjs 同时提供对于MVC和MVVM应用架构的支持.这两个架构方式共享某些概念,而且都旨在沿着逻辑层面划分应用程序代码.每种方法在选择如何划分应用组件上都有其各自的优势. 本指南的目 ...

  4. Kafka:架构简介【转】

    转:http://www.cnblogs.com/f1194361820/p/6026313.html Kafka 架构简介 Kafka是一个开源的.分布式的.可分区的.可复制的基于日志提交的发布订阅 ...

  5. LoadRunner系统架构简介与运行原理

    1.LoadRunner系统架构简介 LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP ...

  6. Cortex-M0(+)内核的处理器架构简介

    Cortex-M0(+)内核的处理器架构简介 2015年03月02日 16:51:12 阅读数:3158 系统架构 Cortex-M0处理器具有32位系统总线接口,以及32位地址线,即有4GB的地址空 ...

  7. 【转帖】LoadRunner系统架构简介

    LoadRunner系统架构简介: LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP协 ...

  8. TP 5.0 架构 简介

    TP 5.0 架构 简介 thinkphp 5.0 为API开发而设计的的高性能框架,是与以往thinkphp5.0以下版本大不相同的新型框架,病对以颠覆和重构版本,采用全新的架构思想,引入了更多的P ...

  9. ceph架构简介

    ceph架构简介 在测试OpenStack的后端存储时,看到了ceph作为后端存储时的各种优势 ,于是查询资料,总结了这篇ceph架构的博客,介绍了ceph的架构和ceph的核心组件.ceph整体十分 ...

随机推荐

  1. Liunx之Lamp搭建笔记

    1:LAMP源代码搭建用户关系 a.  apache服务以daemon用户的处理请求.以root身份作为主进程. b. php源代码安装,会在httpd.conf文件里自己主动增加调用模块.可是在该文 ...

  2. dp求顺序hdu1160

    题意是仅仅求一次的顺序.先依照速度从大到小排序,速度想等到按体重增序排列. 然后基本就变成了求已定顺序序列的最长递增序列递增,跟那个求一致最大序列和的基本一致. dp[i]里存储的是到当前i最大的递增 ...

  3. archlinux yaourt安装 以及出错细节 database file for "archlinuxfr" does not exist.

    archlinux yaourt安装 但一直报错如下: :: Synchronizing package databases...      core is up to date extra is u ...

  4. MM02函数

    ATA: ls_headdata LIKE bapimathead, ls_clientdata LIKE bapi_mara, ls_clientdatax LIKE bapi_marax, ls_ ...

  5. 提升自身的iOS编程水平 (转载)

    阅读博客 在现在这个碎片化阅读流行的年代,博客的风头早已被微博盖过.而我却坚持写作博客,并且大量地阅读同行的iOS开发博客.博客的文章长度通常在3000字左右,许多iOS开发知识都至少需要这样的篇幅才 ...

  6. linux 解决 Device eth0 does not seem to be present

    在虚拟机中安装cent os系统,然后配置网络 执行命令ifconfig 没有看到eth0的信息: 重启网卡报错: service network restart Shutting down loop ...

  7. 大整数分解质因数(Pollard rho算法)

    #include <iostream> #include <cstring> #include <cstdlib> #include <stdio.h> ...

  8. DedeCms最新文章显示红色日期或加上new字或new小图片

    DedeCMS发布的文章显示红色日期或加上new字或new小图片,给近三天(或当天)发布的文章显示红色日期或加上new字或new小图片等,都是围绕pubdate做文章,写扩展的. 1.红色的日期   ...

  9. 异常、Throwable、finally、File类(十九)

    1.异常的概述和分类 * A:异常的概述 * 异常就是Java程序在运行过程中出现的错误.* B:异常的分类 * 通过API查看Throwable * Error * 服务器宕机,数据库崩溃等 * E ...

  10. let 命令 与 var的区别

    ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. <script> { let a = 10; var b = 1; } ...