聊聊如何通过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目录,然后点击脚本运行即可