.Net架构篇:思考如何设计一款实用的分布式监控系统?

前言

无论从最早期的unix操作系统,还是曾经大行其道的单体式应用,还是现在日益流行的微服务架构,始终都离不开监控的身影。如windows的任务管理器,linux的top命令,都可以看作是监控的面板。

再联系起现实生活,无处不在的路网摄像头,为交通机关监控交通人流提供了方便。

系统规模越大,越离不开监控。缺少了监控,就像盲人摸象,窥不到全貌。

理想中的分布式监控

进入互联网时代,系统调用规模日益庞大,对监控的需求更是迫切。比如一个页面打开很慢,怎么分析哪里慢?是网站接受请求慢还是连接数据库慢,或者消息队列挂了,或者redis请求慢?我们需要监控系统能提供这些信息供我们追踪分析。

所以理想中的分布式监控应该记录从请求发起那一刻,所调用的公开方法,接触过的数据库,缓存,队列等步骤,以及每一步所消耗的时间。这些都需要大量的日志去记录。

第二点,理想中的分布式监控必须是对代码无侵入,应用程序员无需对每个方法去调用监控代码。这样完全解藕的监控系统,才更容易使用,加入每个方法,都要调一下监控接口,那不要累死人,代码也及其不友好。

第三点,理想中分布式监控应该对性能不造成损耗或者极小的损耗。如果流量一大,监控系统CPU飙生的话,那这个监控无疑是失败的。

第四点,许多方法有层级,方法内调用其他方法,应该能通过报表聚合查看,进入每个方法的时间以及调用耗时,调用方法的层级树。

第五点,分布式时代,一个调用请求会横跨很多站点,理想的分布式监控应该提供调用链上所有站点的聚合报表查看,要极力避免死循环,两个站点长官相互调用的情况下,应该用双箭头表明调用关系。

第六点,能提供接入监控的服务器cpu,内存,硬盘空间等指标,并根据警戒线发送通知。这个优先级可以降低,可以借助云服务器自身提供的监控,阿里云和Ucloud都有自己的服务器监控面板。

如何设计一款实用的监控

统一的调用链id

根据软件的调用链特性,从一个请求开始到最终的结束,应该具有一个统一的调用链id

时间戳

调用各种方法的时间也应该是顺序的,需要一个精确的时间戳,来描述调用方法的进入与离开的时间。

异步传输

为了不影响性能,应该以异步传输,定时落库的方式。

延时聚合

如果能做到实时聚合更好,如果实现困难可以采用延时聚合报表,延时的时间应该小于一分钟。这个时间使用人群应该能接受,当然如果能缩短到几秒钟,那使用人群会更加高兴。聚合报表应首先提供最近时间内的耗时排序,可以查看调用的方法树,可以查看调用链的所有站点,其他需求可以后期开发,解决核心需求。

最后的难点

如果不追求无侵入,提供一个空接口。所有需要记录日志的实现接口,就已经达到了目标的一半。

为了完成对应用无侵入的目标,我们首先需要一款真正的aop,即静态编织Aop,这个只听说过postsharp,为什么只有它能实现?或者是类似fiddler之类的抓包工具。

本篇暂时写到这里结束。

可参考的如google dapper论文,zipkin,听云。

转载于:https://www.cnblogs.com/fancunwei/p/9625841.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

敲代码括号技巧_理解代码块概念,养成良好编程习惯 | 亲子课堂 第 3 课

亲子课堂关卡解析 / 英语教学 / 编程讲解 做亲子编程教育的好帮手! 每周二、四定期更新 地牢面向真正0编程基础的孩子们,关卡被设计成迷宫的形式,引导孩子们使用编程思维解决问题。以循序渐进的方式,让大家理解掌握几个Pyth…

在struts2中push方法的使用_电脑使用中怎么截屏的几种方法

电脑在日常工作中经常需要用到截屏的操作,为了截取画面提供证明或者说明,像我就经常需要用到,当然我在写文章的时候更是需要用到,来配合文字的描述,使大家能更直观更容易的去操作,以达到快速解决电脑问题的…

vue父组件向子组件动态传值的两种方法

在一些项目需求中需要父组件向子组件动态传值,比如我这里的需求是,父组件动态通过axios获取返回的图片url数组然后传给子组件,上传图片的子组件拿到该数组后进行遍历并展示图片,因为有时候获取到的会是空,所以这里要考…

什么是Spring Data?

(这与“学生计划”有关,稍后我将重新讨论该主题。) Spring Data在最近的几次采访中获得通过。 什么是Spring Data ? 为了回答这个问题,让我们考虑持久性的标准方法–所有访问都是通过数据访问对象 (DAO&a…

卸载WPS后,原office出现各种问题,报错,图标混乱

1.运行环境win7专业版64位操作系统,之前电脑上装了WPS和office2013,后来卸载了WPS,导致office图标显示不正常(因为WPS与office有很多冲突的地方,卸载的时候会影响到注册表,导致office的注册表损坏&#xff…

计算机一级应用于段落还是文字,计算机一级复习资料

出国留学网小编们精心为广大考生准备了“2017年计算机一级PS基础知识点”,各位同学赶快学起来吧,做好万全准备,祝各位同学考试顺利通过。更多相关资讯请持续关注出国留学网。AdobePhotoshop 是目前最流行的平面设计软件之一。可以说&#xff…

C#中的CultureInfo类

CultureInfo类位于System.Globalization命名空间内,这个类和命名空间许多人都不是很熟悉,实际我们在写程序写都经常间接性的接触这个类,当进行数字,日期时间,字符串匹配时,都会进行CultureInfo的操作&#…

clistctrl控件最后插入在后面_老板让我把图片放到Excel表格中,批量插入效率高...

私信回复关键词【福利】,获取丰富办公资源!助你高效办公早下班!大家好,我是懂点 Excel 的小E~初入「江湖」,还请大家多多关照!今天我们来学学 Excel 图片的 6 个小技巧,满满都是干货&#xff0c…

python天气预报的功能介绍_python实现智能语音天气预报

本系统主要包括四个函数: 1、获取天气数据 1、输入要查询天气的城市 2、利用urllib模块向中华万年历天气api接口请求天气数据 3、利用gzip解压获取到的数据,并编码utf-8 4、利用json转化成python识别的数据,返回为天气预报数据复杂形式的字典…

vue获取DOM元素并设置属性

这里我想到了2个方法: 方法一: 直接给相应的元素加id,然后再document.getElementById("id");获取,然后设置相应属性或样式 方法二: 使用ref,给相应的元素加ref“name” 然后再this.$refs.name获取到该元素 注意&…

甲骨文发布Java 8

甲骨文决定在3月18日发布升级到JDK(Java开发工具包)8的消息,尽管新版本可能会带来一些错误(如Full speed所介绍的那样) :甲骨文将在3月份发布Java 8,即使有错误 。 Oracle JDK 8发行经理Mathia…

python所有基础

下面就不一一列举了,所有的资料都和GitHub对接,到时候我有更新就直接拖到GitHub上面了。入门的小伙伴们可以进来看看,估计后面还会有很多项目,待更新。 转载于:https://www.cnblogs.com/wuzaipei/p/9633673.html

计算机硬件系统一直延用,会计从业资格证考试:会计电算化计算机硬件系统

要求掌握冯•诺依曼计算机体系结构的基本思想,熟悉计算机硬件的组成及其工作原理,掌握计算机中的常用术语和主要性能指标。1946年,著名美籍匈牙利数学家冯•诺依曼(JohnVon Neumann)提出并论证了计算机体系结构的基本思想。目前的电子计算机都…

部署环境_Hyperledger Fabric Composer环境部署(一)

声明:本体系Hyperledger Fabric Composer相关分享都是基于MacPro进行多次亲测和体验。今天我这里主要介绍的是这些先决条件安装完成后,如何搭建和使用一个基础环境的问题,适合有一定基础的同学一起交流,也欢迎随时留言交流&#x…

输入参数的数目不足_sklearn.decomposition.PCA 参数速查手册

sklearn常用的API参数解析:sklearn.linear_model.LinearRegression调用sklearn.decomposition.PCA(n_componentsNone, copyTrue, whitenFalse, svd_solverauto, tol0.0, iterated_powerauto, random_stateNone)参数n_components释义PCA 算法中所要保留的主成分个数 …

vue-cli打包之后的项目在nginx的部署

vue-cli执行 npm run build 进行打包,生成dist文件夹,把该文件夹下的文件直接复制到nginx服务器目录下,就可打开项目,但是只有首页是可以看到的,再刷新一下就404了,原因是vue的项目为单页应用,路…

了解位图

几周前,我和Alistair一起研究了用于对Neo4j数据库中节点已附加到其上的标签进行建模的代码。 这种工作方式是将32个节点ID的块表示为每个标签的32位位图 ,其中位1表示节点具有标签,而0表示没有标签。 例如,假设我们有节点ID 0-3…

centos7输入法,非root用户无法使用

背景: 1. centos7安装完了输入法之后,root账号能正常使用,但是非root账号始终无法使用中文 解决方案:   1. 登录非root账号,编译家目录的隐藏文件.bash_profile  export GTK_IM_MODULEibus  export XMODIFIERSim…

服务器旧图片维护,图片服务器

注意:AKCMS已于2019年12月27日宣布停止更新,此文档仅供老用户参考,不建议新用户选择AKCMS建站。注意:AKCMS6.1.2已取消授权机制,文档中关于授权、服务、技术支持等的内容均已失效。3.9.4版本起,增加了图床功…

各种说明方法的答题格式_语文万能答题公式,给孩子收藏吧!

1、某句话在文中的作用1、文首:开篇点题;渲染气氛(散文),埋下伏笔(记叙类文章),设置悬念(小说),为下文作辅垫;总领下文;2、文中:承上启下;总领下文;总结上文&…