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

一、系统需求

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

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. docker (2)---存储、网络(利用docker容器上线静态网站)

    一.docker底层依赖的核心技术 1.命名空间 (Namespaces) 2.控制组 (Control Groups) 3.联合文件系统 (Union File System) 4.Linux 虚拟 ...

  2. Table tr 的隔行变色

    <style type="text/css">    table{border-collapse:collapse;border:1px solid #999;} td ...

  3. BIOS维修技术

    BIOS是电脑中最基础且最重要的程序,为电脑提供最低级且最直接的硬件控制,电脑的原始操作都是依照固化在BIOS里的程序来完成的.因此如果BIOS出现故障将会导致影响电脑的正常工作.BIOS故障有很多, ...

  4. POJ--2284--That Nice Euler Circuit【平面图欧拉公式】

    链接:id=2284">http://poj.org/problem?id=2284 题意:一个自己主动绘图的机器在纸上(无限大)绘图,笔尖从不离开纸,有n个指令,每一个指令是一个坐标 ...

  5. No Memory Alignment with GCC

    attribute method: #include <stdio.h> struct packed { char a; int b; } __attribute__((packed)); ...

  6. busybox 终端支持 ctrl-r

    Busybox Settings ---> Busybox Library Tuning ---> [*] History saving [ ] Save history on shell ...

  7. 翻译:A Tutorial on the Device Tree (Zynq) -- Part V

    A Tutorial on the Device Tree (Zynq) -- Part V Application-specific data 之前提过,设备树中是一些特殊信息,这样一个驱动可以管理 ...

  8. TestNG – Run multiple test classes (suite test)

    In this tutorial, we will show you how to run multiple TestNG test cases (classes) together, aka sui ...

  9. ES6常用语法简介import export

    ES6常用语法简介import export let与var用法区别 //var var a = []; for (var i = 0; i < 10; i++) { a[i] = functi ...

  10. 设计模式学习笔记——Template Method模板方法模式

    可能是最简单的设计模式. 而且你我都用过而不自知. 因为,模板方法模式也者,就是面向对象中的继承.公用部分放在父类,子类继承父类,然后扩展.呵呵.