在日常系统运行过程中,故障总是不期而遇。一旦出现故障通常是查监控,翻各种日志,从大量的日志中寻找蛛丝马迹。如果问题现场的日志记录缺失,会尝试在本地重现问题并调试解决,本地难以重现的,只能再加日志,再部署,再重现,然后再查日志,效率较低。对于复杂一些的比如程序性能问题,如何定位性能瓶颈,一不小心又要回到加日志、部署、查日志、再加日志的老路,不仅效率不高,也破坏了问题现场。
创新互联专注于企业营销型网站建设、网站重做改版、察哈尔右翼后网站定制设计、自适应品牌网站建设、HTML5、商城系统网站开发、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为察哈尔右翼后等各大城市提供网站开发制作服务。
所以针对以上问题,我们的目标是建立一个Java应用在线诊断平台,让开发人员无需登录机器或修改系统,就可以从日志、内存、线程、类信息、调试、机器和系统属性等各个方面对应用进行诊断,提升开发人员诊断问题的效率和能力。
我们期望有一套架构,让开发人员以Web UI的方式使用各类在线诊断能力。
架构概览
浏览器是开发人员进行在线诊断的入口,tunnel server通过Web UI的方式提供在线诊断能力,支持复杂的交互场景。
提供两个方面的功能,分别是:
浏览器通过http与tunnel server的12201端口进行交互;
连接指定IP的arthas agent机器、断开指定IP的arthas agent机器、查看指定IP的arthas agent生成的文件。
浏览器通过websocket与tunnel server的12202端口进行交互;
支持各种arthas诊断指令:dashboard、heapdump、thread、vmtool等。
arthas agent作为websocket客户端与tunnel server的12202端口进行交互;
arthas agent通过attach应用进程实现对应用进程的诊断。
核心流程
流程说明:
1.1 tunnel server 监听12201端口,该端口用于展示Web UI
1.2 tunnel server监听12202端口,该端口用于与浏览器进行websocket交互,也用于与arthas agent进行websocket交互
1.3 应用程序通过引入arthas pom依赖,在应用部署的时候将arthas安装包安装到服务器上
2.1 通过在浏览器上访问:
http://tunner_server_ip:12201,打开Web UI
2.2 在Web UI上输入要诊断的服务器IP,点击Connect,建立与tunner server 12202端口的websocket连接,发送请求为:
ws://tunner_server_ip:12202/ws?method=connectArthas&id=服务器IP
2.3 tunner server根据服务器IP获取与arthas agent的control connection
2.4 如果control connection没有建立,则通过访问
http://arthas_agent_IP:12230?tunnerserver=ws://tunner_server_ip:12202/ws,触发arthas agent初始化、attach应用进程。
2.5 arthas agent创建与tunner server的websocket连接:
此时创建的websocket连接称为:control connection。
2.6 control connection已创建成功,则向arthas agent tunnel client发送:response:/?method=startTunnel&id=服务器IP&clientCnotallow=connectionIDxxx,请求建立连接;
arthas agent tunnel client收到startTunnel请求后,新建与tunnel server的连接,并发送:ws://tunner_server_ip:12202/ws/?method=openTunnel&clientCnotallow=connectionIDxxx&id=服务器IP
此时创建的websocket连接称为:tunnel connection;
同时创建与arthas agent的本地连接:ws://127.0.0.1:3658/ws,此时创建的连接称为:local connection
3.13.2 执行诊断命令链路如下:
交互逻辑
arthas本身提供了tunner server功能,我们主要需要解决的有两个问题:
将arthas打包进操作系统镜像中,保证新初始化的ECS实例中含有最新版本的arthas;对于已经存在的ECS实例则需要想办法进行arthas版本更新。
第2.2步骤当对指定服务器进行诊断的时候,在tunnel server或其他旁路系统通过ssh方式将arthas安装包拷贝的指定服务器。
在应用进程初始化的时候,加载自定义的javaagent,该javaagent实现下载、解压arthas的功能。
第2.2步骤当对指定服务器进行诊断的时候,tunnel server或其他旁路系统通过与指定服务器javaagent通讯,通过javaagent完成arthas下载、解压。
应用通过引入arthas pom,将arthas打包进应用部署包中。
com.taobao.arthas
arthas-agent-attach
3.6.7
com.taobao.arthas
arthas-packaging
3.6.7
在应用工程中新建一个Controller,该Controller实现arthas agent初始化功能。
tunnel server通过现有的Web Server访问Controller接口触发arthas agent初始化。
注意:
创建独立的HTTP Server,主要是为了使得tunnel server能够访问新监听的端口,解决【复用Web Server】端口面临的两个问题。
注意:
根据应用使用的RPC框架,新建对应的RPC Provider,tunnel server直接调用指定IP的RPC Provider完成arthas agent的初始化。该方式的好处是不用新开放监听端口。
注意:
tunnel server作为MQ Producer发送报文(报文中包含指定服务器的IP)到MQ Broker,应用中新建MQ Consumer消费tunnel server的报文,如果报文中IP与本机一致则处理,不一致则丢弃。
思路与【通过MQ】一致,按照apollo等配置中心相关API进行实现。
思路与【通过MQ】一致,按照Redis相关通讯机制进行实现。
tunner server或旁路系统有权限直接ssh指定服务器,通过脚本方式触发arthas agent初始化。
在AgentId的文本框里输入要诊断的服务器IP,稍等一会就可以进行诊断了。
web console
dashboard
thread示例
thread
monitor示例
monitor
JVM options示例
jvm options
console
terminal与tunner server UI基本一致,不同的是该terminal是直接访问的目标服务器。
以上方案只是简单的应用,期望以后可以不断的迭代优化。
当前题目:基于Arthas的应用在线诊断平台实践
链接分享:http://www.gawzjz.com/qtweb2/news4/15904.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联