1.引言
1.1编写目的

该文档主要是解决远程使用arthas诊断的功能需求,只需要一个Web-Console即可使用Arthas的功能,解决机器权限问题,控制必要的命令和禁止不必要的命令,也为公司的机器安全着想也解决研发同学利用好工具Arthas诊断他负责的系统潜在的威胁.

GitHub上官方命令文档的连接: https://alibaba.github.io/arthas/web-console.html

本文主要解决一站式使用Arthas的方案,该方案并非完美方案,但可用于生产级别,各位如果有新的更好的想法,可直接扩展实现属于自己公司的方案.

看此文章之前必须通过控制台部署和Client端注册到Server端成功才能进行阅读,否则你根本不知道此文对你有什么意义.

1.2项目背景

统一授权登录机器,对机器可以直接使用arthas诊断,无需登录到具体目标IP去启动arthas-boot.jar.
2. 准备环境
2.1统一的web-console服务端

下载arthas-tunnel-server-3.1.7.jar,我这里用的是3.1.7版本,请到官网直接下载即可: https://github.com/alibaba/arthas/releases

2.2在目标机器上上传arthas包

下载arthas-3.1.7-bin.zip,我这里用的是3.1.7版本, 请到官网直接下载即可: https://github.com/alibaba/arthas/releases

解压到你自己的目录下.

2. web-console服务端使用说明
2.1部署web-console服务端

启动arthas-tunnel-server-3.1.7.jar

这个在前一篇文件已经给出详细的部署方案了,各位参考之前的文章即可:https://blog.csdn.net/caodegao/article/details/104016095

3.需要解决的问题

前提:下载arthas的源码,里面已经包含了server的控制台代码了(tunnel-server).

把包复制一份为(arthas-tunnel-server),单独对他修改,不影响到远代码.也方便以后合并新分支做对比改动的部分合并.

3.1如何用SSH连接到目标机器

Linux机器直接用Java来打交道要用到SSH工具,个人使用的是ganymed的api来和Linux交互,目的是执行JPS命令拿到该机器的PID进程,在用java -jar arthas-boot.jar pid命令直接attach到进行并启动arthas工具.

我还用到httpclient,和apache文件读起的包,http大家可以用Spring的RestTemplate,这样就不用导入这些包了.

http是用到了获取用户有权限的机器列表和ip列表时使用的,因为公司提供了http的接口可以获取到这些东西.

如果其他的朋友有用到就可以用这种方式去拿,或者有些是通过dubbo接口提供的,那就用dubbo,我只是提一嘴.

写一个SSH交互的代码例子.红色框是用SSH生成的id_rsa文件,怎么生成大家去百度即可,我生成后就是这个样,记得是带BEGIN和END的这种杆杆.这个文件要放到目标机器的hosts文件里面做免密登录的,这点要跟大家说明白,否则Ssh登录不了命令无法执行.

特别注意一下

然后用io加载为file,这个大家找例子都能有,用FileUtils挺方便的,所以我就导入了common-io.

所以第一步就先执行jps命令,把该目标IP所有的PID给展现出来,让用户选择要attach哪个

命令:String cmd = "source /etc/profile; jps -l"; 为啥要加source,因为用这个工具貌似必须要执行一下环境变量才能执行到这个命令,我也不知道为什么,暂时放下后面再研究,反正我直接jps -l是报没有这个命令的提示.

可以看看我改造后的页面

1:根据登录人,下拉列表中显示有权限的系统;

2:该系统对应的IP列表,选择IP,或者通过自定义IP直接填入IP;

3:显示进程,把IP的进程显示出来,用户选择要Attach的进程即可.

这些可以参考自己去做改造.

3.2如何执行java -jar arthas-boot.jar

点击上图的Attach按钮后,执行的命令是:source /etc/profile; java -jar %s %s --tunnel-server 'ws://%s:7777/ws' --agent-id '%s' --session-timeout 300 --attach-only

%s是String.format的转义字符串:

1:arthas-boot.jar的完整路径.

2:pid就是上图的7.

3:tunnel-server的ip我是在代码里面获取执行机的IP填进去的, 为什么呢,因为tunnel-server是多机器部署的,如果你用一个域名/LVS那么你让目标机器注册到的可能不是你现在这台执行远程命令的IP,那么你通过当前连接就会出现问题了,目标机器Attach到其他节点上去了,这里有点尴尬.

4:目标Ip也是页面传过来的目标的IP,上个文章说了,要用IP作为agent-id就是有这个作用,避免重复,也好标记意义.

重要提示:执行该命令必须执行退出该目标IP的命令,所以我在页面点击Attach按钮是做了两个动作,先Stop再启动arthas-boot,Stop命令很重要,我也找了很久才发现arthas-client.jar有这个命令支持,相当于踢出前个登录只允许一个地方登录.
String cmd = "source /etc/profile; java -jar  你的路径/arthas-client.jar -c stop";

3.3如何使用xterm.js黑框框与目标机器交互

上图的页面是通过Jquery和后台交互的,我在里面做了一些改造,

1:那个下拉选择菜单我用Bootstrap来做的,哎!我不懂前端,搞起来很麻烦,我有篇文章也写了怎么去用这个下拉框,这里就不再说了.

2:Jquery我换过,原本是最简单版的没有ajax,所以我就换了3.4.1版本进来.

3:my-web-console.js我自己写的ajax代码,这里也不方便直接展示给大家看,见谅,不过这也难不了大家,网上一堆例子.

重要的是黑框框的输入跟远程机器交互这里,我要稍稍给大家说一下,通过上面的命令我已经attach到远程机器了,我现在就出现这种效果:

这个是修改index.html页面后变成这样子的,我已经通过xterm.js设置不允许黑框输入,因为如果开放这个等于什么命令都能执行,权限太大,所以还是禁用掉,只能使用你控制的命令,我在下面新增了输入框,通过这个来控制.

那么现在问题来了,通过js来获取输入命令,该怎么和xterm交互呢,我也是摸索了很久才发现,根据源码是有这一句:ws.send(JSON.stringify({action: 'read', data: cmd}));

其实很简单,复制这句话,再执行命令的时候再cmd后面加 \n即可,等于换行执行.也挺逗的.

ws.send(JSON.stringify({action: 'read', data: cmd + '\n'}));

还有个问题:比如执行dashboard命令的时候是不停的刷的,怎么让他停下来呢?这个命令怎么用js来表达:Control+C

我找了好久是这个:\x03代表.

3.4进一步扩展根据登录人直接显示有权限的机器以及机器IP列表

上面的下拉列表是根据http接口去获取的,这点小小说明一下,因为官方的这个前端控件没有这种下拉支持,所以我找了boostrap4来做的:https://blog.csdn.net/caodegao/article/details/104928117

就是风格有点相似所以我用它,但是我用这种东西导致按钮颜色变得有点奇怪了,我不知道怎么解决,希望后面有其他的代替吧.

3.5对Web-Console页面进行修改,集成几个基础快捷键方便用户直接使用

接下来看看我实现的快捷键功能:

我把常用的很多功能直接做成按钮在下面,并且支持快捷键,比如Dashboard直接按d就执行了.如果有其他命令不在里面的可以用input输入框执行,我会屏蔽校验redefine这种命令,因为这是修改内存代码的命令,有点危险.这个由大家去扩展.

提示:每执行一行代码记得先执行Control+C退出,因为Dashboard这种你必须先退出才能执行下一个命令.

快捷键监听的方法给大家贴出来,如果要找确实得找好久.最后那个是Ctrl+C的组合键,送给各位了.

3.6火焰图支持

火焰图是个好东西,大家要多推广这个功能,但是也对这个目标机器有要求的,要开通机器诊断权限,否则执行命令的时候会显示一些不支持的返回,这点要在目标机器先测试一下看看,一般不是arthas的问题都是机器不给权限或者不装某些插件的问题,如果是公司的策略原因,那么得由公司管理定夺.

执行火焰图生成后,执行停止收集命令会有一个文件路径,大家可以执行停止的时候加上路径参数,保存到一个地方,让这个地方有权限浏览或下载,可以用一个挂载盘,如果没有挂载盘,那么先存到本地,用SSH命令下载出来.

我就是用SSH命令下载的,但是前提是机器要装SCP命令,否则无法使用的,代码很简单,参考这个即可.记得目标机器必须要装SCP命令,否则下载是异常的.

stop采样的代码,要设置自己的路径,然后文件名,不设置文件名会是一个随机串,这点你不好操作,所以我用年月日时间来做文件名,停止后直接填到input框里面,再点击下载火焰图出来.

最后

总结一下:

1:SSH登录认证要用ssh的根文件

2:SSH交互有java的jar api支持可以直接用,记得要source一下,执行arthas-boot.jar之前要先stop.

3:前端体验好要把登录人的权限给控制好,直接显示有权限列表的IP即可,其实我不建议填IP的,大家可以不做这个功能,这是测试方便用的,对了这个控制台没有登录的,我自己做了一个链接跳转,执行域名的时候默认会执行一个方法去获取登录人的应用权限列表,这个控制台也是从我们DevOps平台链接过来的,所以有登录人信息,这点大家自行实现.

4:前端xterm.js交互很简单,记得加换行命令.

5:优化体验控制权限,定义一些常用的命令出来,记得屏蔽掉一些危险的命令.

6:火焰图的好处要多用用,这是你推广这个技术的好切入点.

虽然写的粗糙些,但是很多关键点和逻辑已经给出来了,秉着开源的原则,我尽量做到回馈社区,感谢alibaba,我也是从里面出来的,吃水不忘挖井人,如果大家有哪些疑问的,需要探讨的请留言,我尽量回复,有时候忙不看消息也没办法.

有些点我没贴出代码的,大家也别上火,只要你用心开发过了找过资源了测试过了,你会很熟悉,如果全用我的代码你会失去乐趣.里面的index.html我改造了很多,大家凭自己的前端能力去改造即可,可以邀请你们公司的前端给你搞更好,我们组没有前端资源,只能自己整,很多JS自己摸索资料写的,能用即可,后期再优化.

谢谢各位!

Arthas Web-Console一站式解决方案相关推荐

  1. CAD_DWG图Web可视化一站式解决方案-唯杰地图-vjmap

    背景 DWG图是AutoCAD是私有格式,只能在CAD软件上编辑查看,如何发布至Web上做数据展示,GIS分析应用开发,一直是业内头疼的事情. 传统的办法采用的解析AutoCAD图形绘制,并封装成Ac ...

  2. Spring Cloud Alibaba一站式解决方案

    一.Spring Cloud Alibaba一站式解决方案 在springCloud的基础上延伸出来的微服务技术栈 为什么学习spring cloud alibaba? spring cloud多项组 ...

  3. 【Python】Pandas profiling 生成报告并部署的一站式解决方案

    Pandas 库功能非常强大,特别有助于数据分析与处理,并为几乎所有操作提供了完整的解决方案.一种常见的Pandas函数是pandas describe.它向用户提供数据集所有特征的描述性统计摘要,尽 ...

  4. Pandas profiling 生成报告并部署的一站式解决方案

    Pandas 库功能非常强大,特别有助于数据分析与处理,并为几乎所有操作提供了完整的解决方案.一种常见的Pandas函数是pandas describe.它向用户提供数据集所有特征的描述性统计摘要,尽 ...

  5. 商场室内地图导航如何实现,便捷、低成本智慧商业综合体一站式解决方案

    试想一下,在大型商场内,顾客结队购物,同伴走散或者儿童走失,顾客不知道自己和同伴的位置,这是多么糟糕的事情.的确,在室内迷路,是一件令人很头疼的事情,如何把室外导航这种完整度高.体验感极佳的导航方式从 ...

  6. 立可得_第1章_物联网亿万级通信一站式解决方案EMQ

    立可得_第1章_物联网亿万级通信一站式解决方案EMQ 文章目录 立可得_第1章_物联网亿万级通信一站式解决方案EMQ 物联网亿万级通信一站式解决方案EMQ 1. MQTT 1.1 MQTT简介 1.1 ...

  7. 物联网新零售项目 物联网亿万级通信一站式解决方案EMQ

    物联网亿万级通信一站式解决方案EMQ 1. MQTT 1.1 MQTT简介 1.1.1 什么是MQTT ​ MQTT(Message Queuing Telemetry Transport,消息队列遥 ...

  8. 物联网亿万级通信一站式解决方案EMQ

    物联网亿万级通信一站式解决方案EMQ 1. MQTT 1.1 MQTT简介 1.1.1 什么是MQTT 1.1.2 设计原则 1.1.3 应用领域 1.2 MQTT协议相关概念 1.2.1 MQTT协 ...

  9. Bigemap GIS数据处理及开发应用一站式解决方案

    Bigemap GIS大数据 数据处理与开发应用一站式解决方案 技术服务:数据中心 + 桌面端 + 移动端(APP) + WEB端 关 键 词:地图 导航 定位 编辑 开发 分析 智慧 可视化 (以上 ...

  10. 基于Web的一站式养老院的设计与实现(论文+源码)_kaic

    XXXX大学 毕业(设计)论文 (校徽) 论文题目: 基于Web的一站式养老院的设计与实现 专业班级: 学    号: 学生姓名: 指导教师: 电    话: 学院名称: 完成日期:      年   ...

最新文章

  1. python使用imbalanced-learn的RandomOverSampler方法进行上采样处理数据不平衡问题
  2. CDH- 集群时间同步ntp问题解决
  3. HDU Problem - 5971 Wrestling Match(染色)
  4. 图像填充不怕区域大!MSRA等提出协同调制生成对抗网络
  5. tft_LCD一些引脚极性设置方法:vsync, hsync, VBLANK
  6. 一步一步写算法(之图创建)
  7. 使用Apache FtpServer
  8. ScrollView和listview的冲突问题,关于宽度,和滑动
  9. java简历的专业技能,java程序员专业技能简历范文
  10. java 缓存 框架_5个常用的Java分布式缓存框架
  11. Git初学(5)--关联远程库
  12. signature=56b13ba141d8042e7f17a5bffcc46d8e,vue 汉字转成拼音
  13. 【卸载神器——Geek】的下载安装使用教程
  14. 加州大学欧文分校 计算机专业,加州大学欧文分校信息与计算机科学
  15. 【数据分析】滴滴数据分析岗实习经验
  16. USB基础书籍资料推荐
  17. toad连接数据库时报错 cannot load OCI DLL
  18. Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession
  19. 计算机重启恢复系统怎么操作,电脑只要关机重启系统就会自动还原?-电脑怎么系统还原...
  20. 【学习笔记】明哥聊求职第二季

热门文章

  1. 电报被人胡乱拉群解决办法
  2. 服务器网站出现403 forbidden,谷歌浏览器出现403 forbidden怎么回事_谷歌浏览器出现403 forbidden如何解决...
  3. YDLIDAR G4雷达的unity使用相关+北阳雷达
  4. oracle查询某字段为空时,赋值为0
  5. linux awk 排序,利用Shell中awk和sort命令合并同类数据后并依据某一列进行排序
  6. 国开大学 C语言程序 形考任务4,[国家开放大学] 国开电大人体生理学形考任务4...
  7. 微服务电商实战(十一)搭建vue项目对接注册登陆接口,解决跨域问题,使用七牛云实现头像上传
  8. 利用R包ggmsa进行多序列比对_2020-05-31
  9. 从头认识Spring-1.14 SpEl表达式(3)-SpEl表达式的两个坑:Bean的顺序与Bean的toString方法
  10. 华为荣耀android进入,EMUI 9.1公测招募开启 华为荣耀14款机型获支持