聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用

2024/5/9 6:02:46

本文主要是介绍聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。很久之前写过一篇文章java应用线上诊断神器–Arthas里面比较详细的介绍了如何使用arthas,感兴趣的朋友可以看下。

在单机的场景下,我们可能直接在宿主机装个arthas,就可以很便捷的监控我们的应用,但是微服务的架构下,单机那种做法可能就不大合适,因为涉及的服务会比较多,意味着部署的服务器资源也比较多,arthas可能会是散落在各个地方,今天给大家推荐一种方式,通过arthas-tunnel-server来管理远程所有需要arthas监控的应用

如何安装arthas tunnel server

可以通过https://github.com/alibaba/arthas/releases进行下载

因为arthas tunnel server本身就是一个java应用,我们通过

java -jar -Darthas.enable-detail-pages=true  arthas-tunnel-server.jar

就可以直接启动。arthas.enable-detail-pages这个属性是用来开启arthas tunnel server管理页面。不过开启这个有风险,官方有做了说明
8001d4ad5df2e4441d45bacb84da1ea6_ae1adc22ed83e8e6eae1c840735dd147.png

默认情况下,arthas tunnel server 的 web 端口是8080,arthas agent 连接的端口是7777。
b1fb7b47d0159fd989606f44bae58af9_e03bbf9a674a4491d07ef42a177edb27.png

浏览器访问http://127.0.0.1:8080/,进入arthas tunnel server web页面
da5a0e8f086e1f09f9c69703e73b0b96_f717e7d880f2f9f99c54643c0fff59ad.png

应用程序如何与arthas tunnel server进行交互

因为在微服务场景下,基本上都是采用springboot,因此我们就以springboot来演示

1、在项目的pom引入arthas-spring-boot-starter gav

 <dependency>
            <groupId>com.taobao.arthas</groupId>
            <artifactId>arthas-spring-boot-starter</artifactId>
            <version>${arthas.version}</version>
        </dependency>

2、springboot的applicaton.yml配置如下内容

arthas:
  http-port: ${ARTHAS_HTTP_PORT:0}
  telnet-port: ${ARTHAS_TELNET_PORT:0}
  session-timeout: ${ARTHAS_SESSION_TIMEOUT:30000}
  #ip: 0.0.0.0
 # agent-id: ${ARTHAS_AGENT_ID:hsehdfsfghhwertyfad}
  app-name: ${spring.application.name}
  tunnel-server: ${ARTHAS_TUNNEL_SERVER:ws://localhost:7777/ws}

这几个属性的说明,大家看属性字段应该就知道啥意思了,就不过多论述了,不过这边有几个端口配置成0的意思稍微说明下

  • 如果配置 arthas.telnetPort为 -1 ,则不 listen telnet 端口。arthas.httpPort类似。
  • 如果配置 arthas.telnetPort为 0 ,则随机 telnet
    端口,在~/logs/arthas/arthas.log里可以找到具体端口日志。arthas.httpPort类似。

官方对端口的配置,也给了相应的建议

1d26ce70bde2a41a5af57ab5627042e0_87bbc89a62e962cf802a4cc680497125.png

更多相关的配置信息,可以查看官网
https://arthas.aliyun.com/doc/arthas-properties.html
或者也可以看下属性配置的源码,因为是springboot应用,相对比较容易看懂
https://github.com/alibaba/arthas/blob/master/arthas-spring-boot-starter/src/main/java/com/alibaba/arthas/spring/ArthasProperties.java

3、验证能否和arthas tunnel server进行交互

启动我们的应用程序,然后访问arthas tunnel server,通过浏览器输入
http://localhost:8080/apps.html,查看所有连接的应用列表
3ac8092bc82ccb94ae8198fc086bae57_16a183f7448324ec84d67aef165651da.png

点击应用名底下的蓝色按钮,就可以看到连接的所有 agent 列表

72d756460727cd9fce406e69d8d747cc_ad3f01d4c707c0e0d5ab1b8c59423944.png

点击你要诊断的应用,进入我们已经非常熟悉的arthas页面
916fbdf1aaec8ec4a461d7a4cf5bee04_3c60e514ef60f9d74c05e2e64a7f40ba.png

e810373c70cef7d3e181adb05ea06396_a6f142e09fbf0c2a173b3c2b28df1169.png

接着就可以利用arthas命令,进行我们要诊断的事项了

总结

凡事都有两面性,在带来便捷的情况下,可能会有一定的安全风险,因此官方也提了如下建议
846c8ac103448630b5b75487ce0c8280_233bebd1a27595feb38b541dcd210e14.png

arthas tunnel是个好东西,更多详细的介绍,大家可以查阅官网
https://arthas.aliyun.com/doc/tunnel.html

demo链接

https://github.com/lyb-geek/springboot-learning/tree/master/springboot-arthas-tunnel

注: 本案例demo提供有启动arthas tunnel server的window脚本
7c0969f72185ef39ee58125c861c1e43_d8ae3ae8f8af000d0aa69e3cffdbed64.png

因为target的arthas-tunnel-server.jar比较大,我就没上传到github了,需要演示本案例的朋友,可以把下载好的arthas-tunnel-server.jar放到target目录,然后点击脚本运行即可



这篇关于聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程