http://www.cnblogs.com/Andon_liu/p/7508107.html

日志对大型应用系统或者平台尤其重要,系统日志采集、分析是系统运维、维护及用户分析的基础。

一、系统日志分类

  一般系统日志可分为三大类:

  1、用户行为日志:通过采集系统用户使用系统过程中,一系列的操作日志。

  2、业务变更日志:特定业务场景需要,采集某用户在某时使用某功能,对某业务(对象、数据)进行某操作,由A变成B。

  3、系统运行日志:系统运行服务器资源、网络及基础中间件的情况进行定时采集日志分析。

二、常见日志分析应用场景

  日志采集分析是由需求驱动,根据某种场景的需要日志采集,采集的日志进行针对性的分析。一般常见的日志分析结果应用场景有:

  1、分析系统或者平台哪些功能是最受欢迎:什么时候使用最多用户使用,某个区域、某类用户使用最多。有利于功能推广;有利于提升服务器资源从而提高用户体验。

  2、内容推荐:根据用户平常阅读内容,采集相关日志,并通过分析后,将用户感兴趣的内容系统自动推荐给用户,从而提升用户站粘性。

  3、系统审计:对于应用系统,采集操作日志、业务变更日志,有利于备查及提供相关安全审计功能。

  4、自动化运维:场景微服务架构的系统或者平台,对运维投入的要求高,自动化部署和运维,可以减少运维的工作量和压力。系统运行环境日志采集、分析,可实现预警、服务器资源动态调配,有利于快速定位排查故障。

  不同系统的运行环境、功能应用场景及需要采集分析日志的需求也各不相同。日志内容、采集方式存在多样性,日志数据量大,所以需要设计一套日志采集系统,满足日志采集需求,支持便捷将分析结果反捕于应用功能。

三、日志采集系统总体设计

  基于以上日志采集的初步分析,尤其微服务架构中,微服务治理能力、服务负载需要依赖服务日志的采集分析,所以日志采集子系统是微服务架构的基础支持功能。日志采集系统总体设计如下:

图1- 日志采集系统总体框架示意图

  如上图所示,根据日志整个过程,系统由三部分组成:日志采集、日志存储&分析及结果应用。日志采集主要负责提供多种方式进行采集日志;日志存储&分析主要实现分析统一存储和定制的场景分析日志;结果应用实现将日志分析结果提供服务接口或者默认的管理功能,供应用功能使用。

  日志采集整体过程:日志采集后,通过在线或者离线传输到消息队列,由日志消费应用拉取后进行存储。根据分析需要定制自动作业任务实现日志数据抽取、转换、统计后,将结果数据写入关系型数据库。提供服务接口或者日志查询默认管理功能进行使用。

1、日志采集

  日志采集实现三种方式进行采集日志:

  (1)WebAPI方式:实现基于http协议 restful方式采集日志数据,并发送至消息队列。主要用于提供移动端、微信公众号及小量日志采集使用,在NET分布式系统上可结合“API网关”使用。

  (2)Service Proxy方式:基于log4.net优秀的日志组件和消息队列客户端驱动,进行封装为日志记录服务代理,提供便捷、统一的接口供应用进行使用。支持将日志记录到应用本地和在线实时发送至消息队列,其中记录到应用本地,可结合第三种方式完成应用功能日志采集的功能。

  (3)LCClient方式:实现客户端批量抓取日志数据,发送至LCServer。LCClient客户端基于TCP协议与LCServer服务端进行通信,基于NIO框架构建,可支持高并发处理能力。LCServer再将日志数据写入消息队列。

  日志采集通过提供三种方式,满足不同的业务应用场景使用采集日志。

2、日志存储&分析

  日志存储及分析由五部分构成:消息队列(MQ)、日志接收服务端(LCServer)、日志存储(Elasticsearch)、任务作业(Quartz.net)及关系型数据库(MySQL)。

  (1)消息队列(MQ):日志通过消息队列实现消息统一接收,做一道缓冲,满足日志数据并发接收能力。

  (2)日志接收服务端(LCServer):接收LCClient客户端批量发送日志数据,并将其发送至消息队列。

  (3)日志存储(Elasticsearch):选用ES做日志存储,主要考虑ES是一种文档化分布式搜索服务,支持PB级的数据存储,支持上百个节点的分布式集群能力,并且提供丰富的API使用,数据查询方面有着优越的性能。

  (4)任务作业(Quartz.net):通过定制化开发作业任务实现对ES日志数据抽取、转换、分析后,将结果存储于关系型数据库。Quartz.net中间件是业界公认的作业任务组件。

  (5)关系型数据库(MySQL):实现日志结果数据存储,供日志应用查询使用。MySQL有着优越的主从复制机制,可解决单节点查询性能瓶颈,同时提供传统SQL脚本操作数据的能力,提供开发效率。

  日志数据存储和分析后,最终目的就是提供与应用功能使用。

3、分析结果应用

  分析结果应用主要提供服务接口和管理功能两种方式。

  (1)服务接口方式:基于http协议以restful方式提供接口,支持应用功能方便调用。

  (2)管理模块方式:默认提供一套日志查询管理功能,方便于应用直接集成使用。

四、总结

  日志采集本身也是一个分布式系统,服务端每个节点都支持分布式集群部署,可实现高并发、高可用性。本文只是一种抛砖引玉,系统每个组件还需要深化详细,同时也包括实施部署。

作者:刘蔡涛 出处:http://www.cnblogs.com/Andon_liu  关于作者:专注于微软平台项目架构、管理。熟悉设计模式、领域驱动、架构设计、敏捷开发和项目管理。现主要从事ASP.NET MVC、WCF/Web API、SOA、MSSQL、redis方面的项目开发、架构、管理工作。 如有问题或建议,请一起学习讨论!  本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。  如有问题,可以邮件:568773262@qq.com 联系我,谢谢。

Net分布式系统之七:日志采集系统(1)(转)的更多相关文章

  1. Net分布式系统之七:日志采集系统(1)

    日志对大型应用系统或者平台尤其重要,系统日志采集.分析是系统运维.维护及用户分析的基础. 一.系统日志分类 一般系统日志可分为三大类: 1.用户行为日志:通过采集系统用户使用系统过程中,一系列的操作日 ...

  2. Logstash实践: 分布式系统的日志监控

    文/赵杰 2015.11.04 1. 前言 服务端日志你有多重视? 我们没有日志 有日志,但基本不去控制需要输出的内容 经常微调日志,只输出我们想看和有用的 经常监控日志,一方面帮助日志微调,一方面及 ...

  3. 生产系统ELK日志采集系统

    总结下,生产在运转的日志采集系统!后续的扩展在于elasticsearch节点与logstash节点与kafka+zookeeper,目的提高吞吐量!

  4. Go项目实战:打造高并发日志采集系统(六)

    前情回顾 前文我们完成了日志采集系统的日志文件监控,配置文件热更新,协程异常检测和保活机制. 本节目标 本节加入kafka消息队列,kafka前文也介绍过了,可以对消息进行排队,解耦合和流量控制的作用 ...

  5. Go项目实战:打造高并发日志采集系统(三)

    前文中已经完成了文件的监控,kafka信息读写,今天主要完成配置文件的读写以及热更新.并且规划一下系统的整体结构,然后将之前的功能串起来形成一套完整的日志采集系统. 前情提要 上一节我们完成了如下目标 ...

  6. Go项目实战:打造高并发日志采集系统(一)

    项目结构 本系列文章意在记录如何搭建一个高可用的日志采集系统,实际项目中会有多个日志文件分布在服务器各个文件夹,这些日志记录了不同的功能.随着业务的增多,日志文件也再增多,企业中常常需要实现一个独立的 ...

  7. 基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪

    原文链接:基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪 一.日志系统 1.日志框架 在每个系统应用中,我们都会使用日志系统,主要是为了记录必要的信息和方便排 ...

  8. 利用log4j+mongodb实现分布式系统中日志统一管理

    背景     在分布式系统当中,我们有各种各样的WebService,这些服务可能分别部署在不同的服务器上,并且有各自的日志输出.为了方便对这些日志进行统一管理和分析.我们可以将日志统一输出到指定的数 ...

  9. 玩转mongodb(九):通过log4jmongo来实现分布式系统的日志统一管理

    背景 在分布式系统中,我们有多个web app,这些web app可能分别部署在不同的物理服务器上,并且有各自的日志输出.当生产问题来临时,很多时候都需要去各个日志文件中查找可能的异常,相当耗费人力. ...

随机推荐

  1. day_03比特币转账的运行原理

    在2008年全球经济危机中,中本聪想如果能构建一个没有中心机构的货币发行体系,货币就不会被无限发行,大家都很公平公正,于是中本聪构建了比特币这样一个体系: 一.非中心化下的比特币发行机制 比特币的发行 ...

  2. java.io.IOException: Broken pipe

    最近项目虽然已经在正常运行,但是偶尔会有一些不知名的错误冒出来,比如时不时报一个数据库主键重复或者某些时候会有null的异常报出来.看看代码写完能跑起来还只是开始而已,需要不断精进重构,才能让代码运行 ...

  3. bind9+dlz+mysql连接断开问题

    前言 关于bind-dlz介绍:http://bind-dlz.sourceforge.net/ DLZ(Dynamically Loadable Zones)与传统的BIND9不同,BIND的不足之 ...

  4. TypeHandler简介及配置(mybatis源码篇)

    作者:南柯梦 Mybatis中的TypeHandler是什么? 无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器 ...

  5. mongodb命令---花样查询语句

    闲言少叙 查出价格低于200的商品信息----包含商品名称,货物编号,价格,添加信息等 db.goods.find( {}}, {,,,} ) 商品分类不为3的商品 db.goods.find( {} ...

  6. 2018-2019 ACM-ICPC Brazil Subregional Programming Contest B. Marbles(博弈)

    题目链接:https://codeforc.es/gym/101908/problem/B 题意:两个人玩游戏,有 n 块石头,初始坐标为(x,y),一次操作可以将一块石头移动到(x - u,y),( ...

  7. 洛谷P1363 幻想迷宫【dfs】

    题目:https://www.luogu.org/problemnew/show/P1363 题意: 有一个地图,起点是S,障碍物用#表示.可以将这个地图不断的在四周重复,问从起点开始是否可以走到无限 ...

  8. Codeforces Round #589 (Div. 2) B. Filling the Grid

    链接: https://codeforces.com/contest/1228/problem/B 题意: Suppose there is a h×w grid consisting of empt ...

  9. [Luogu] trip

    https://www.luogu.org/problemnew/show/T28848#sub #include <iostream> #include <cstdio> u ...

  10. Python PageFactory-使用配置文件动态生成页面PageObject

    需求 在Python Selenium 的 PageObject模式中,一般每个页面需要写一个类, 一种PageObject的写法如下: class BaiduPageObject(object): ...