springboot应用接入 Arthas Tunnel Server
{HOSTNAME:${spring.application.name}} 含义:HOSTNAME 含义为容器id,因为agent-id是唯一的,所以用这个比较方便。10.233.39.19 为tunnel-server 的容器的虚拟ip。4.将应用中的arthas注册到Arthas Tunnel Server中。telnet-port: -1 防止本地端口调试时被重复绑定,设置随机。http-p
1.在springboot项目中引入包
<dependency> <groupId>com.taobao.arthas</groupId> <artifactId>arthas-spring-boot-starter</artifactId> <version>3.7.2</version> </dependency>
2.在本地运行项目
如果可以正常访问http://localhost:8563页面,说明引入成功。如果不能访问,需要排除解决其他问题
3.搭建Arthas Tunnel Server服务。
我们是通过k8s部署的,因此把https://github.com/alibaba/arthas.git
使用分支3.x, 然后修改配置文件:
arthas.enable-detail-pages=true
然后加入Dockerfile.
FROM openjdk:8-jdk RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone COPY target/*.jar /app.jar EXPOSE 8080 ENV PARAMS="--server.port=8080" ENV JVM_OPTS="" ENTRYPOINT ["/bin/sh","-c","java ${JVM_OPTS} -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar /app.jar ${PARAMS}"]
打包成镜像。
去k8s中添加工作负载,使用yml
kind: Deployment
apiVersion: apps/v1
metadata:
name: arthas-tunnel-server372-v1
namespace: szqc2023002-dev
labels:
app: arthas-tunnel-server372
version: v1
annotations:
deployment.kubernetes.io/revision: '10'
kubesphere.io/creator: XXX
spec:
replicas: 1
selector:
matchLabels:
app: arthas-tunnel-server372
version: v1
template:
metadata:
creationTimestamp: null
labels:
app: arthas-tunnel-server372
version: v1
annotations:
kubesphere.io/creator: XXX
spec:
volumes:
- name: host-time
hostPath:
path: /etc/localtime
type: ''
containers:
- name: container-jx32i4
image: 'XXXX:40080/szqc2023002/arthas-tunnel-server:3.7.2'
args:
- '--arthas.enable-detail-pages=true'
ports:
- name: tcp-8080
containerPort: 8080
protocol: TCP
- name: tcp-7777
containerPort: 7777
protocol: TCP
env:
- name: PARAMS
value: '--server.port=8080 --arthas.enable-detail-pages=true'
resources: {}
volumeMounts:
- name: host-time
readOnly: true
mountPath: /etc/localtime
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
serviceAccountName: default
serviceAccount: default
securityContext: {}
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
去k8s中添加服务,可以使用以下yml
kind: Service
apiVersion: v1
metadata:
name: arthas-tunnel-server372
namespace: szqc2023002-dev
labels:
app: arthas-tunnel-server372
version: v1
annotations:
kubesphere.io/creator: XXX
kubesphere.io/serviceType: statelessservice
spec:
ports:
- name: tcp-8080
protocol: TCP
port: 8080
targetPort: 8080
nodePort: 31999
- name: tcp-7777
protocol: TCP
port: 7777
targetPort: 7777
nodePort: 31449
selector:
app: arthas-tunnel-server372
clusterIP: 10.233.39.19
clusterIPs:
- 10.233.39.19
type: NodePort
sessionAffinity: None
externalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
internalTrafficPolicy: Cluster
从配置文件可以看到映射为31999。
打开网页可以查看:
4.将应用中的arthas注册到Arthas Tunnel Server中
应用的配置添加下面的配置即可
arthas:
agent-id: ${HOSTNAME:${spring.application.name}}
tunnel-server: ws://10.233.39.19:7777/ws
app-name: ${HOSTNAME:${spring.application.name}}
telnet-port: -1
http-port: -1
${HOSTNAME:${spring.application.name}} 含义:HOSTNAME 含义为容器id,因为agent-id是唯一的,所以用这个比较方便。
10.233.39.19 为tunnel-server 的容器的虚拟ip。7777默认端口
app-name 是应用名称,用与apps.html展示
telnet-port: -1 防止本地端口调试时被重复绑定,设置随机
http-port: -1 防止本地端口调试时被重复绑定,设置随机
5.用tunnel-server连接应用的arthas
先找到应用的容器id
然后你就可以愉快的使用arthas了
更多推荐
所有评论(0)