在SpringBoot中验证Skywalking(AWS EKS版)

问题

之前在AWS EKS上面部署成功了Skywalking,现在在这个基础上面需要使用Springboot验证Skywalking是否生效。

思路

这里主要是自己手动构建skywalking 代理边车镜像,然后,把这个docker镜像推送到自己的AWS ECR私有库(Docker私库)上面,然后,在Spring中使用这个代理边车镜像。最后,在Skywalking UI中检查检查。

步骤

从官网上面下载skywalking的java 代理包。具体如下:

选择可选插件

解压这个包,从可选插件里面,根据你自己的java项目的实际情况,选择可选包,复制到正式插件包里面。具体如下:

将这些可选包从optional-plugins复制到plugins文件夹。

Dockerfile

bash 复制代码
FROM busybox:latest

ENV LANG=C.UTF-8

RUN set -eux && mkdir -p /usr/skywalking/agent/

ADD skywalking-agent/ /usr/skywalking/agent/

WORKDIR /

开始构建自己的skwalking agent镜像文件。

bash 复制代码
docker build -t sw-agent-sidecar .

推送到私有ECR库中

bash 复制代码
# 登录到ECR私有库
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin xxxxx.dkr.ecr.us-east-1.amazonaws.com
# 构建
docker build -t sw-agent-sidecar .
# 标记
docker tag sw-agent-sidecar:latest xxx.dkr.ecr.us-east-1.amazonaws.com/sw-agent-sidecar:latest
# 推送
docker push xxxx.dkr.ecr.us-east-1.amazonaws.com/sw-agent-sidecar:latest

Spring中k8s配置

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    name: demo-sw
  name: demo-sw
spec:
  replicas: 1
  selector:
    matchLabels:
      name: demo-sw
  template:
    metadata:
      labels:
        name: demo-sw
    spec:
      initContainers:
      - image: xxxx.dkr.ecr.us-east-1.amazonaws.com/sw-agent-sidecar:latest
        name: sw-agent-sidecar
        imagePullPolicy: IfNotPresent
        command: ['sh']
        args: ['-c','mkdir -p /skywalking/agent && cp -r /usr/skywalking/agent/* /skywalking/agent']
        volumeMounts:
        - mountPath: /skywalking/agent
          name: sw-agent
      containers:
      - image: nginx:1.7.9
        name: nginx
        volumeMounts:
        - mountPath: /usr/skywalking/agent
          name: sw-agent
        ports:
        - containerPort: 80
      volumes:
      - name: sw-agent
        emptyDir: {}

除了在Deployment设置sidecar之外,还需要在configmap里面给Spring设置3个环境变量:

yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Values.services.demo2.name }}-configmap
  namespace: {{ .Release.Namespace }}
data:
  SPRING_PROFILES_ACTIVE: {{ .Values.spring.profiles.active }}
  MYSQL_HOST: {{ .Values.mysql.HOST }}
  JAVA_OPTS: -javaagent:/usr/skywalking/agent/skywalking-agent.jar
  SW_AGENT_NAME: demo2
  SW_AGENT_COLLECTOR_BACKEND_SERVICES: skywalking-skywalking-helm-oap.skywalking:11800

主要是下面3个变量:

yaml 复制代码
  JAVA_OPTS: -javaagent:/usr/skywalking/agent/skywalking-agent.jar
  SW_AGENT_NAME: demo2
  SW_AGENT_COLLECTOR_BACKEND_SERVICES: skywalking-skywalking-helm-oap.skywalking:11800

这里涉及到k8s跨名字空间的服务调用------FQDN。

效果

启动转发命令:

bash 复制代码
kubectl port-forward svc/skywalking-skywalking-helm-ui 8080:80 --namespace skywalking

具体效果:

总结

利用k8s边车模式,就解决了skywalking的代理文件共享问题。最后,利用环境变量JAVA_OPTS正常启动spring就可以开启skywalking的代理调用链监控了。

参考:

相关推荐
Dola_Pan1 小时前
Linux文件IO(二)-文件操作使用详解
java·linux·服务器
wang_book1 小时前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
蜗牛^^O^2 小时前
Docker和K8S
java·docker·kubernetes
从心归零3 小时前
sshj使用代理连接服务器
java·服务器·sshj
IT毕设梦工厂4 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
Ylucius4 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
七夜zippoe5 小时前
分布式系统实战经验
java·分布式
是梦终空5 小时前
JAVA毕业设计176—基于Java+Springboot+vue3的交通旅游订票管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·源代码·交通订票
落落落sss5 小时前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
码爸5 小时前
flink doris批量sink
java·前端·flink