首页>>后端>>java->Arthas Tunnel Server功能扩展

Arthas Tunnel Server功能扩展

时间:2023-11-29 本站 点击:54

Arthas是什么这里就不做介绍了,不了解的同学可以到Arthas官网查看教程Arthas快速入门

Arthas提供了一个工具Arthas Tunnel,我们可以通过Arthas Tunnel Server/Client 来远程管理/连接多个Agent。

基于实际的应用场景,我在Arthas Tunnel Server的功能做了一下扩展,更加方便使用:

通过级联下拉框按服务->实例自动展示arthas agent列表,无需手动输入agentId进行连接;

基于Nacos动态配置实现的用户->项目的权限访问控制,可以动态添加修改用户、密码以及用户可以访问的项目访问;

支持代理连接模式,即:通过服务端转发代理连接到arthas agent;

项目地址

GITHUB仓库:arthas-ext

功能说明

arthas agent级联显示

权限控制

在nacos的配置管理中新建一条dataId=application.yaml,group=arthas-tunnel-web的配置,内容如下:

arthas:tunnel:super-admin-role-sign:'*'#超级管理员的角色标志users:-name:arthas#登录名password:123456#登录密码roles:${arthas.tunnel.super-admin-role-sign}#roles=${arthas.tunnel.super-admin-role-sign}表示超级管理员,拥有查看所有appagent的权限-name:user1#登录名password:123456#登录密码roles:#可以访问的项目列表-service-a-service-b-name:user2password:123456roles:-service-b

代理模式

代理模式主要是为了解决当前浏览器与目标arthas agent的网络不通而无法访问arthas agent的问题,例如在目标服务部署在K8S环境中或要访问线上的服务

解决方式是通过tunnel server建立websocket代理(因为tunnel server与arthas agent的网络必定是通的),浏览器将websocket请求提交到tunnel server中,在tunnel server中做转发代理

websocket转发代理的实现位于com.wf2311.arthas.tunnel.filter包中,大部分代码移植于SpringCloud GatewayWebsocketRoutingFilter的相关代码

应用名分隔符配置

为了从agentId中区分arthas agent的应用名,约定agentId的生成规则为 <项目名> + <分隔符> + <随机字符串> ,默认的分隔符为@

也可以通过配置arthas.agent.split属性值来修改分隔符

dynamic-arthas-spring-boot-starter

参考SpringBoot Admin集成Arthas实践 ,在com.taobao.arthas:arthas-spring-boot-starter的基础上提供Arthas动态开关的效果

Maven坐标

<dependency><groupId>com.wf2311</groupId><artifactId>dynamic-arthas-spring-boot-starter</artifactId><version>2021.07-SNAPSHOT</version></dependency>

动态开关配置

是否启用arthas是通过spring.arthas.enabled属性进行来控制的,默认为false,即默认不启用Arthas

可以通过Nacos等配置中心设置spring.arthas.enabled来动态开启或关闭Arthas

参数配置

项目中引入dynamic-arthas-spring-boot-starter后,通过以下参数配置连接至 Arthas Tunnel Server

arthas:tunnel-server:ws://<ip>:<port>/ws#<ip>、<port>分别ArthasTunnelServer的IP和websocket端口号#客户端id,应用名@随机值,tunnelserver会截取分隔符@前面的字符串作为应用名agent-id:${spring.application.name}@${random.value}http-port:0#为0表示随机telnet-port:0#为0表示随机

#<ip>、<port>分别ArthasTunnel的IP和websocket端口号arthas.tunnel-server=ws://<ip>:<port>/ws#客户端id,应用名@随机值,tunnelserver会截取分隔符@前面的字符串作为应用名arthas.agent-id=${spring.application.name}@${random.value}#为0表示随机arthas.http-port=0#为0表示随机arthas.telnet-port=0

以上参数就是com.taobao.arthas:arthas-spring-boot-starter中的配置参数。如果不需要动态开关功能也可以直接引用com.taobao.arthas:arthas-spring-boot-starter

注意:为保证在Arthas Tunnel Server的页面上能够显示应用名,参数arthas.agent-id=${spring.application.name}@${random.value}中的格式需与应用名分隔符配置中说明的配置保持一致

使用说明

本项目为实现动态权限控制的功能,依赖了nacos的配置管理,因此需要连接Nacos服务

具体参数配置可以参见权限控制 和应用名分隔符配置

特别说明:本项目不支持集群部署

部署方式

本机调试

修改bootstrap.yml中的

spring.cloud.nacos.config.server-addr

spring.cloud.nacos.config.namespace

启动项目

docker启动

dockerrun-d-t-p9999:9999-p7777:7777\-v~/logs/arthas-tunnel-web/:/application/logs\-eJAVA_OPTS='-Xmx512m-Xms512m'\-eSERVER_PORT='<本服务的启动端口,默认为9999>'\-eTUNNEL_SERVER_PORT='<TunnelServer的启动端口,默认为7777>'\-eNACOS_ADDR='<nacos服务地址>'\-eNACOS_NAMESPACE='<nacos命名空间>'\--namearthas-tunnel-webwf2311/arthas-tunnel-web:latest

docker-compose启动

version:"3"services:arthas-tunnel-web:image:wf2311/arthas-tunnel-web:latestcontainer_name:arthas-tunnel-webenvironment:-JAVA_OPTS=-Xmx256m-Xms256m-SERVER_PORT=<本服务的启动端口,默认为9999>-TUNNEL_SERVER_PORT=<TunnelServer的启动端口,默认为7777>-NACOS_ADDR=<nacos服务地址>-NACOS_NAMESPACE='<nacos命名空间>'volumes:-~/Share/logs/arthas-tunnel-web/:/application/logsports:-"9999:9999"-"7777:7777"

k8s部署脚本

apiVersion:apps/v1kind:Deploymentmetadata:name:arthas-tunnel-webspec:replicas:1selector:matchLabels:app:arthas-tunnel-webtemplate:metadata:labels:app:arthas-tunnel-webspec:containers:-env:-name:SERVER_PORTvalue:'<本服务的启动端口,默认为9999>'-name:TUNNEL_SERVER_PORTvalue:'<TunnelServer的启动端口,默认为7777>'-name:JVM_OPTSvalue:'-Xmx256m-Xms256m'-name:NACOS_ADDRvalue:'<nacos服务地址>'-name:NACOS_NAMESPACEvalue:'<nacos命名空间>'name:arthas-tunnel-webimage:'wf2311/arthas-tunnel-web:latest'imagePullPolicy:Alwaysports:-containerPort:<SERVER_PORT>---apiVersion:v1kind:Servicemetadata:name:arthas-tunnel-webnamespace:supportspec:ports:-port:9999targetPort:9999name:arthas-tunnel-web-port:7777targetPort:7777name:arthas-tunnel-serverselector:app:arthas-tunnel-webtype:LoadBalancer

参考

SpringBoot Admin集成Arthas实践

SpringBoot Admin2.0集成Arthas实践


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/java/50.html