聊聊如何通过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管理页面。不过开启这个有风险,官方有做了说明

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

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

应用程序如何与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类似。

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


更多相关的配置信息,可以查看官网
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,查看所有连接的应用列表

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


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


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

总结

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

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脚本

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

posted @ 2024-04-23 09:12  Linyb极客之路  阅读(15)  评论(0编辑  收藏  举报