使用skywalking对k8s应用进行链路监控
为什么做全链路监控
-
故障排查和故障定位:全链路监控能够跟踪应用程序的每个组件和服务之间的调用流程,当系统出现故障时,可以更快地定位和解决问题。通过分析链路数据,可以确定引起问题的具体组件,从而加快故障排查的速度。
-
性能优化:全链路监控可以提供对应用程序的性能指标的实时可视化。您可以了解每个组件和服务的性能表现,并识别瓶颈和性能问题。通过优化关键组件和服务,可以提升整个应用程序的性能和响应时间。
-
业务分析和决策支持:全链路监控能够提供对应用程序的业务流程和关键指标的细粒度监控。这使得您可以深入了解业务流程,识别瓶颈,并为业务决策提供数据支持。通过分析链路数据,您可以了解用户行为、转化率、服务质量等关键指标,从而做出更明智的决策。
-
容量规划和资源管理:通过全链路监控,您可以了解应用程序和各个组件的资源使用情况。这可以帮助您进行容量规划,并优化资源分配,以确保应用程序在不同负载情况下的可靠性和稳定性。
-
安全和合规性:全链路监控可以帮助您监测应用程序的安全事件和异常行为。它可以提供实时警报和通知,以便您能够及时采取措施来应对潜在的安全威胁。此外,全链路监控还可以帮助您满足合规性要求,如数据隐私和安全标准。
方案一、修改代码,引入jar包
方案二、无侵入,在dokerfile里的jar启动命令中添加agent的jar包
以下使用方案二
以下使用helm安装,提前安装helm环境
1.添加SkyWalking的helm仓库
helm repo add apache-skywalking https://apache.jfrog.io/artifactory/skywalking-helm
2.更新Helm仓库
helm repo update
3.创建一个k8s命令空间
kubectl create namespace skywalking
4.下载skywalking压缩包
helm pull apache-skywalking/skywalking
5.安装skywalking(es使用已有的)
tar zxvf skywalking-4.3.0.tgz vim my-values.yaml oap: image: tag: 9.2.0 storageType: elasticsearch ui: image: tag: 9.2.0 service: type: NodePort nodePort: 30880 elasticsearch: enabled: false config: host: elasticsearch.skywalking port: http: 9200 helm -n skywalking install apache-skywalking -f my-values.yaml skywalking
查看pod状态
kubectl get pods -n skywalking
6.改造dockerfile(myweb-0.0.1-SNAPSHOT.jar为我的应用程序)
FROM openjdk:17 ENV LANG=C.UTF-8 ENV TZ=Asia/Shanghai workdir /app COPY skywalking-agent /opt/skywalking-agent/ ADD myweb-0.0.1-SNAPSHOT.jar ./app.jar #CMD ["java","-jar","app.jar"] ENTRYPOINT ["sh","-c","java -javaagent:/opt/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=sky-demo -Dskywalking.collector.backend_service=apache-skywalking-oap.skywalking:11800 -Djava.security.egd=file:/dev/./urandom -jar ./app.jar"]
执行命令: docker build -t myapp3:v1 .
7.编写deployment应用myapp.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: myapp3 namespace: yx labels: app: myapp3 spec: replicas: 1 selector: matchLabels: app: myapp3 template: metadata: labels: app: myapp3 spec: nodeName: dst2 containers: - name: myapp3 image: myapp3:v1 imagePullPolicy: Never ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: myapp3 namespace: yx labels: app: myapp3 spec: type: NodePort #外部流量可访问k8s中的服务 ports: - port: 30084 targetPort: 8080 nodePort: 30084 selector: app: myapp3
创建应用: kubectl create -f myapp.yaml
访问skywalking UI页面ip:30880
可以看到应用已监控