可能是整个网络上最全面的文章,介绍监视功能
优采云 发布时间: 2020-08-06 17:09在当今拥有数亿服务和海量数据的情况下,对Internet服务的要求是三高,高并发,高性能和高可用性. 为了实现“三高”,程序员确实可以尽力在技术架构中使用微服务架构,在部署方法中使用Docker和Kubernetes,在弹性扩展中使用云计算. 我今天想向您介绍的是应用程序监视系统. 监视就像是应用程序的关注者. 您知道自己要去哪里,做什么并记录下来. 通过建立监视系统,可以在应用程序出现问题时快速“回放”应用程序跟踪以查找原因. 从长远来看,它还可以预测故障的发生并提前避免.
那么应用程序系统是什么样的?用户通过PC或智能终端(移动电话)上的浏览器或APP向应用程序发起请求,然后该请求通过网络传输到业务系统. 业务系统的功能通过应用程序框架和中间件运行,并且操作系统依赖于操作系统来运行. 系统需要诸如网卡之类的网络设备与外界建立通信,并且已安装了此整套软件机房中安装了诸如服务器,网卡等硬件设备上的硬件. 因此,对应用程序系统的全栈监视包括APP监视,浏览器监视,服务器监视,网络监视,日志监视,基础结构监视和物理环境监视.
APP监控
当前,APP的主流操作系统是Android和IOS. 因此,每个APP在开发时都会有两个版本. APP的开发过程是根据产品要求开发功能. 开发完成后,单击相应的Android程序包和IOS. 该软件包在Android应用商店和Apple应用产品中启动. 因此,对APP的监视是在包装过程中将探针安装在相应的应用程序包中,以形成用于外部发布的正式程序包.
当用户的手机下载APP并使用APP的各种功能时,探针也会记录整个行为轨迹. 该探针采集两种类型的数据: 用户数据和APP操作数据. 用户数据包括地区,城市,设备操作系统,使用时间和设备定位的次数. 运行数据包括APP的运行网络状况,阻塞状况和运行缓慢. . 获取用户数据和运营数据后,您可以进行运营分析和运维监控,了解已开发APP用户的日常活动,访问区域,访问版本等,并帮助产品操作学员优化和迭代产品并提供建议通过运维数据,可以了解用户是否以黑屏打开APP,是否卡死,运行缓慢,是否被运营商劫持,以帮助研发人员快速解决问题和解决问题. 提高用户保留率.
浏览器监视
浏览器监视起源于早期的Internet时代. 购物,票务,办公室工作等都在PC端进行. 随着移动互联网的兴起,它已逐渐被削弱,但它是必不可少的,因此浏览设备监视也是监视系统中必不可少的部分. 浏览器监视系统还收录三个部分: 探针采集数据并将其发送到后端,后端将数据处理到前端,然后前端将其呈现给用户.
探针的实现取决于应用程序的运行方式. 对于浏览器应用程序,前端主要基于HTML / CSS和JavaScript开发. 用户在浏览器中输入URL,然后首先查询地址是否对应于本地缓存. 如果没有IP地址,请使用DNS进行域名解析,以找到提供该服务的地址,然后对该地址执行TCP三向握手连接,发送请求以获取请求的数据,并在之后进行数据分析. 获取数据,包括HTML文档分析,DOM构建,页面渲染,最后呈现给可视化页面的用户.
因此,浏览器探针是一段JS代码,它通过浏览器加载事件,导航事件等获取页面访问数据,例如浏览器基本信息,采集页面性能数据,采集Ajax性能数据和请求响应数据,然后,将JS错误数据,页面跟踪数据等发送到后台进行处理,以形成用户操作数据(例如页面PV,操作员信息,浏览器信息,访问城市和省会信息),操作和维护数据(例如Ajax错误信息,JS慢速页面信息),以帮助操作人员了解产品用户状况,更好地促进市场营销,并帮助R&D运维团队解决产品生产环境中的功能性能问题.
服务器监视
对于服务器监视,它主要监视后端系统的操作. 因为Java,Python,PHP,.Net / .NetCore,C / C ++,Golang和其他语言都可以开发后端应用程序,所以服务器探针还包括针对多种语言的各种探针. 从这八种开发语言的特点来看,已经编译了一些语言,这意味着可以在运行之前将源代码翻译成机器代码,例如Golang,C / C ++;一些语言会被解释,在执行时会翻译,例如PHP,Python;有些语言在编译和解释之间是混合的,即将代码编译成中间代码,然后在该语言提供的平台上运行,例如Java,.Net / .NetCore. 因此,不同类型语言的探测实现是不同的.
对于解释语言,使用HookApi. 例如,Python需要在操作期间调用框架和函数. 因此,Python探针需要为每个框架和数据库专门定义Hook函数. 该探针会将我们编写的Hook函数(用于WEB框架,WSGI,数据库等)添加到sys_meta_path中,以便用户函数将在执行后首先执行我们定义的Hook函数以采集数据;对于已编译的语言,请使用SDK. 总体思路与HookAPI相同. 不同之处在于SDK已完全封装;对于混合语言,它以代理方式实现. 例如,Java探针是在JavaSE的Instrumentation上开发的,并以Java代码进行编译. 那时,执行了代码注入. Java探针已附加到Java进程. 它创建了多个线程来采集和汇总数据,而不是创建一个新进程. 如下图所示,当通过ClassLoader将用户的类A.class加载到JVM中时,将使用Javaagent嵌入监视代码以生成A'.class. 当用户请求进入时,引擎将查找A'.class来执行常规业务逻辑. 执行逻辑后,引擎将监视数据写入监视数据缓冲区(即,一次采集周期),并将每60秒将数据发送到服务器以清除缓冲区.
该探针采集应用程序运行功能,调用数据库,第三方服务,消息中间件,下一个业务系统的持续时间和调用语句的时间运行轨迹,并在后端处理和分析之后,提供完整的信息. 用户应用程序调用的链接拓扑图,函数执行堆栈,函数响应时间和调用时间,慢速/错误SQL语句,慢速外部调用语句,帮助开发人员了解整体业务运作,快速定位和分析后端错误以及优化应用程序性能.
网络监控
对于网络监视,主要是在应用程序运行期间获取网络状况并在数据传输期间定位网络问题. 实*敏*感*词*融和其他行业都使用这种监视方法.
日志监控
日志是服务的运行轨迹. 所有服务在运行期间都会生成日志. 主要有五种类型: 主机日志,网络设备日志,应用程序日志,中间件日志和数据库日志. 日志监控的实现逻辑是通过日志探针获取数据源,上传日志,与MQ队列接口对接,然后在后台对其进行处理和分析,最后将其呈现在前端. 用户可以根据前端业务问题的时间范围,在一段时间内获取日志,也可以输入关键字进行查询. 日志可以了解应用程序的本机操作,并帮助开发人员快速定位问题. 日志平台的两个最重要的功能是存储大量数据和快速搜索的能力. 对于搜索,Eleasearch大数据通常用于提供数据存储和搜索功能.
基础设施监控
基础结构包括物理机房,服务器,网络设备,中间件,数据库,存储,虚拟化等. 基础结构的监视包括机房操作环境的温度和湿度,服务器的CPU内存磁盘网络以及数据库的类型,版本,字符集,IP端口,状态,安装路径和数据库大小等. 对于非物理机房类型,实现逻辑是通过各种协议(SNMP,WMI, Telnet,SSH,IPMI,JMX,JDBC,Agent等),然后通过协议分析数据,执行后台处理,并将前端呈现给用户;物理机房的实现逻辑是通过API接口调用服务器的数据. 通过基础架构监视,运维人员可以全景查看整个企业的实际状况. 机房下电或服务器CPU内存指示灯异常时,可以通过升级硬件解决.
通过介绍上述各种监视平台,我相信您对监视产品的类型,监视的用途和价值以及实现原理有清楚的了解. 对于研发人员而言,选择合适的监控产品可以在业务运营过程中花费一半的精力获得两倍的结果,并大大提高开发效率;对于运维人员,选择合适的监控产品也将改善业务运维流程. 可以保证业务的正常运行,提高用户满意度;对于想要开始监视的学生,每个方向的监视原理和用户价值都非常清楚. 根据自己的兴趣,选择最合适的运维监控领域.
因此,本文可能是整个网络上最全面的介绍监视的文章. 如果愿意,记得与更多朋友分享“好看的东西”〜