.Net微服务架构之运行日志分析系统

一、引言

  .Net技术栈目前还没有像spring cloud相对完整一整微服务架构栈,随着业务发展系统架构演进,自行构建.Net技术体系的微服务架构,配套相关核心组件。因平台基于微服务架构方式研发,每个领域服务遵循平台统一标准,各自研发,独立部署运行,服务运行日志均通过记录本地文件方式进行记录。程序日志无法及时查阅,需登录服务器查看,同时不利于日志统一管理,因研发运行日志分析系统,进行日志统一分析管理,便于快速定位程序运行问题及时处理,保障平台运行稳定。虽然行业上也有一些日志架构,如较为有名的LEK(logstash, elasticsearch, kibana),因考虑到后续一些个性化的需求,还是自行研发运行日志分析系统。

二、设计原则

  系统在总体微服务架构设计思想下,遵守平台标准,并结合实际解决问题的需要,进行设计和研发,系统严格按照如下设计原则设计:

  1、模块化:根据职责和归属明确,进行拆分模块,模块功能高度内聚。

  2、服务化:各模块通信,通过服务方式进行调用,服务之间通信,遵守平台的标准。

  3、松耦合:系统模块之间通信,基于行业通用标准,按照“约定优于配置”思想,充分体现系统模块之间松耦合的关系。

  4、高性能:采用异步的方式进行记录日志和分析,不影响平台总体性能。

  5、易扩展:日志采用统一的接入方式,支持灵活扩展。

  6、跨平台:支持不同技术语言、平台进行采集日志。

三、总体架构

图- 运行日志分析系统总体架构示意图

  如图所示,系统基于上述设计原则,主要由五部分组成:日志记录、日志采集、日志接入、日志分析及存储、日志管理服务。每部分职责定位明确,相互支持、相互协作,共同构成运行日志分析系统。日志记录到本地文件,通过日志采集器将本地日志文件抽取后,发送至Kafka,同时由日志分析服务进行消费、分析及存储于elasticsearch,日志管理服务提供于用户查阅&分析日志信息。在平台统一通信协议下,扩展运行日志的内容,沿用Json报文格式,记录内容包括:IP、端口、服务ID、记录时间、日志内容。

1、日志报文

2、日志记录

  日子记录,支持多种日志记录组件:Log4.net(本系统选用)、.Net core 自带的Nlog、微软企业库等,针对JAVA技术语言开发的服务,则选用log4j组件,只要按照约定规范进行打印日志即可。将日志信息记录到本地文件。

3、日志采集

  日志采集,选用filebeat组件,filebeat是一个轻量级的日志传输组件,其可以通过提供一种轻量级的方式来转发和集中日志和文件,帮助你把简单采集和发送的事情简单化。本质上filebeat是一个日志信息搬运工,不进行日志过滤和分析工作。同时支持跨平台。

4、日志接入

  日志接入,考虑日志量在某一故障情况,可能存在较大并发接入,所以选用Kafka组件作为日志信息接入分析的统一入口,kafka组件是一个高性能的MQ组件,具有高并发、高可用的特性。统一接入方案,为系统提供更为灵活的采集日志,不受限于某一平台、技术或者日志采集组件,均可将运行日志进行接入分析和存储。

5、日志分析及储存

  日志分析,采用.Net Core研发,以后台服务的方式进行运行,订阅kafka的日志消息进行批量消费,分析程序支持横向扩展部署于多个程序,提升日志的消费能力,保障日志接收能力和分析能力相当。对日志分析后存储于Elasticsearch(以下简称:ES),ES是一个高可扩展的开源全文搜索和分析引擎,它允许存储、搜索和分析大量的数据。非常适合存储半结构化的日志数据,便于全文搜索日志信息。

6、日志管理服务

  日志管理服务,实现查询ES中的运行日志数据,通过WebAPI方式提供界面功能调用。本系统采用“前后分离”应用开发技术,前端界面功能采用H5+JS,后端服务以restful方式提供API接口。

四、总结

  根据不同应用场景和需求,选用不同的日志分析架构或者自行研发,最终目的就是为了快速、方便捕捉系统日志,有助于分析系统运行情况。尤其对于微服务架构大型平台,运行日志更为重要。本文主要是将系统设计原则、思想进行记录,同时对有需要的同学提供参考,可能再实际应用中,还有很多地方需要完善或者优化。

微信公众号: 

原文地址:https://www.cnblogs.com/Andon_liu/p/9617219.html

时间: 2024-08-28 18:55:07

.Net微服务架构之运行日志分析系统的相关文章

微服务架构:如何用十步解耦你的系统?

导言: 耦合性,是对模块间关联程度的度量.耦合的强弱取决于模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少.模块间的耦合度是指模块之间的依赖关系,包括控制关系.调用关系.数据传递关系.模块间联系越多,其耦合性越强,同时表明其独立性越差.软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低. SpringCloud和Dubbo都是现在比较成熟的微服务框架,如何使用两

微服务架构(Microservices)

说在前面 好久没写博文了,心里痒痒(也许是换工作后,有点时间了吧).最近好像谈论微服务的人比较多,也开始学习一下,但是都有E文,看起来半懂不懂的. Martinfowler的<微服务>,也算是入门必读了.有人翻译过,但是只有一半.还是自己练练手吧. 微服务 "微服务架构"一词在过去几年里广泛的传播,它用于描述一种独立部署的软件应用设计方式.这种架构方式并没有非常准确的定义,但是在业务能力.自动部署.端对端的整合.对语言及数据的分散控制上,却有着显著特征. "微服务

SOA和微服务架构的区别?

知乎用户 289 人赞同了该回答 谢多人邀请,其实前面几位的回答已经差不多了,在这里仅谈下自己的简单总结. 微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui,到控制层,逻辑层,数据库访问,数据库都完全是独立的一套.在这里我们不用组件而用小应用这个词更加合适,每个小应用除了完成自身本身的业务功能外,重点就是还需要消费外部其它应用暴露的服务,同时自身

《Spring Cloud与Docker微服务架构实战》配套代码

不才写了本使用Spring Cloud玩转微服务架构的书,书名是<Spring Cloud与Docker微服务架构实战> - 周立,已于2017-01-12交稿.不少朋友想先看看源码,现将代码放出. 本次放出的代码: 共计70+个DEMO 覆盖Eureka.Ribbon.Feign.Hystrix.Zuul.Spring Cloud Config.Spring Cloud Bus.Spring Cloud Sleuth.Docker.Docker Compose等. 1-11章代码地址: ht

微服务架构与实践-王磊

(原文地址:http://www.infoq.com/cn/articles/microservice-and-continuous-delivery) 摘选书中节选-微服务与持续交付 十年以前,软件在一年之内的交付次数屈指可数. 过去的十年间,交付的过程一直被不断地优化和改进.从早期的RUP模型.敏捷.XP.Scrum,再到近几年的精益创业.DevOps,都力求能更有效地降低交付过程所耗费的成本并提高效率,从而尽早实现软件的价值. 持续交付是一种软件开发策略,用于优化软件交付的流程,以尽快得到

从 Spring Cloud 开始,聊聊微服务架构实践之路

[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为 .NET SQL Server: 表示层:位于最外层(最上层),最接近用户.用于显示数据和接收用户输入的数 据,为用户提供一种交互式操作的界面,平台所使用

分布式系统(微服务架构)的一致性和幂等性问题相关概念解析

目录 前言 1. 分布式系统的数据一致性 1.1 分布式存储系统中的一致性问题 1.2 微服务应用的分布式一致性问题 1.3 对于一致性的正确理解 2.分布式一致性模型 3. 追求强一致性的约束--CAP定理 3.1 如何理解CAP三要素不可兼得 3.2 如何正确理解CAP定理 4. 一致性的妥协--最终一致性和Base原则 4.1 CAP,BASE以及ACID的关系 5. 分布式系统的幂等性 6.微服务架构的分布式一致性和幂等性问题 6.1 微服务架构下的分布式一致性问题 6.2 微服务架构下

微服务架构设计基础之领域驱动设计

DDD早于微服务「出道」十年,这两个「忘年交」的软件设计哲学是如何相爱相杀的? 背景 微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了,那么微服务作为新的架构标准与SOA有什么差异点呢?其本质区别在于设计原理,微服务是去中心化设计,SOA是「集成」形成中心设计: 另外,笔者认为以下几点并不是微服务和SOA的区别点: CI/CD:持续集成.持续部署本身与敏捷.D

SOA和微服务架构的区别

微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui,到控制层,逻辑层,数据库访问,数据库都完全是独立的一套.在这里我们不用组件而用小应用这个词更加合适,每个小应用除了完成自身本身的业务功能外,重点就是还需要消费外部其它应用暴露的服务,同时自身也将自身的能力朝外部发布为服务. 如果一句话来谈SOA和微服务的区别,即微服务不再强调传统SOA架构里面比较