一、线上真实场景模拟(springboot微服务)¶
1.1 Springboot微服务 - UI服务¶
[root@master01 ~]# mkdir -p /root/8/appwithskywalking/newapp
[root@master01 ~]# cd /root/8/appwithskywalking/newapp
[root@master01 newapp]# vim acme-ui.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: acme-financial-ui
name: acme-financial-ui
spec:
replicas: 1
selector:
matchLabels:
app: acme-financial-ui
template:
metadata:
labels:
app: acme-financial-ui
spec:
initContainers:
- name: init-skywalking-agent
image: registry.cn-hangzhou.aliyuncs.com/github_images1024/skywalking-agent:8.5.0
command:
- 'sh'
- '-c'
- 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;'
volumeMounts:
- mountPath: /vmskywalking/agent
name: skywalking-agent
containers:
- env:
- name: JAVA_OPTS
value: "-javaagent:/opt/sw/agent/skywalking-agent.jar"
- name: SW_AGENT_NAME
value: "acme-financial-ui"
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: "skywalking-oap.devops.svc.cluster.local:11800"
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/acme-financial-ui:v0.1
imagePullPolicy: Always
name: ui
ports:
- containerPort: 8081
protocol: TCP
volumeMounts:
- mountPath: /opt/sw/agent
name: skywalking-agent
volumes:
- name: skywalking-agent
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
app: acme-financial-ui
name: acme-financial-ui
spec:
ports:
- name: http
port: 8081
protocol: TCP
targetPort: 8081
selector:
app: acme-financial-ui
sessionAffinity: None
type: ClusterIP
# 应用
[root@master01 newapp]# kaf acme-ui.yaml
# 验证
[root@master01 newapp]# kgp | grep acme-financial-ui
acme-financial-ui-85fd7bb844-gngnv 1/1 Running 0 50m
1.2 Springboot微服务 - office服务¶
[root@master01 newapp]# vim acme-office.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: acme-financial-office
name: acme-financial-office
spec:
replicas: 1
selector:
matchLabels:
app: acme-financial-office
template:
metadata:
labels:
app: acme-financial-office
spec:
initContainers:
- name: init-skywalking-agent
image: registry.cn-hangzhou.aliyuncs.com/github_images1024/skywalking-agent:8.5.0
command:
- 'sh'
- '-c'
- 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;'
volumeMounts:
- mountPath: /vmskywalking/agent
name: skywalking-agent
containers:
- env:
- name: JAVA_OPTS
value: "-javaagent:/opt/sw/agent/skywalking-agent.jar"
- name: SW_AGENT_NAME
value: "acme-financial-office"
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: "skywalking-oap.devops.svc.cluster.local:11800"
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/acme-financial-office:v0.1
imagePullPolicy: Always
name: office
ports:
- containerPort: 8082
protocol: TCP
volumeMounts:
- mountPath: /opt/sw/agent
name: skywalking-agent
volumes:
- name: skywalking-agent
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
app: acme-financial-office
name: acme-financial-back-office
spec:
ports:
- name: http
port: 8082
protocol: TCP
targetPort: 8082
selector:
app: acme-financial-office
sessionAffinity: None
type: ClusterIP
# 应用
[root@master01 newapp]# kaf acme-office.yaml
# 验证
[root@master01 newapp]# kgp | grep acme-financial-office
acme-financial-office-654d8b4d69-dkclf 1/1 Running 0 50m
1.3 Springboot微服务 - account服务¶
[root@master01 newapp]# vim acme-account.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: acme-financial-account
name: acme-financial-account
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: acme-financial-account
template:
metadata:
labels:
app: acme-financial-account
spec:
initContainers:
- name: init-skywalking-agent
image: registry.cn-hangzhou.aliyuncs.com/github_images1024/skywalking-agent:8.5.0
command:
- 'sh'
- '-c'
- 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;'
volumeMounts:
- mountPath: /vmskywalking/agent
name: skywalking-agent
containers:
- env:
- name: JAVA_OPTS
value: "-javaagent:/opt/sw/agent/skywalking-agent.jar"
- name: SW_AGENT_NAME
value: "acme-financial-account"
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: "skywalking-oap.devops.svc.cluster.local:11800"
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/acme-financial-account:v0.1
imagePullPolicy: Always
name: account
ports:
- containerPort: 8083
protocol: TCP
volumeMounts:
- mountPath: /opt/sw/agent
name: skywalking-agent
volumes:
- name: skywalking-agent
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
app: acme-financial-account
name: acme-financial-account
spec:
ports:
- name: http
port: 8083
protocol: TCP
targetPort: 8083
selector:
app: acme-financial-account
sessionAffinity: None
type: ClusterIP
# 应用
[root@master01 newapp]# kaf acme-account.yaml
# 验证
[root@master01 newapp]# kgp | grep acme-financial-account
acme-financial-account-8897cb6b6-wklsn 1/1 Running 0 58m
1.4 Springboot微服务 - customer服务¶
[root@master01 newapp]# vim acme-customer.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: acme-financial-customer
name: acme-financial-customer
spec:
replicas: 1
selector:
matchLabels:
app: acme-financial-customer
template:
metadata:
labels:
app: acme-financial-customer
spec:
initContainers:
- name: init-skywalking-agent
image: registry.cn-hangzhou.aliyuncs.com/github_images1024/skywalking-agent:8.5.0
command:
- 'sh'
- '-c'
- 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;'
volumeMounts:
- mountPath: /vmskywalking/agent
name: skywalking-agent
containers:
- env:
- name: JAVA_OPTS
value: "-javaagent:/opt/sw/agent/skywalking-agent.jar"
- name: SW_AGENT_NAME
value: "acme-financial-customer"
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: "skywalking-oap.devops.svc.cluster.local:11800"
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/acme-financial-customer:v0.1
imagePullPolicy: Always
name: customer
ports:
- containerPort: 8084
protocol: TCP
volumeMounts:
- mountPath: /opt/sw/agent
name: skywalking-agent
volumes:
- name: skywalking-agent
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
app: acme-financial-customer
name: acme-financial-customer
namespace: default
spec:
ports:
- name: http
port: 8084
protocol: TCP
targetPort: 8084
selector:
app: acme-financial-customer
sessionAffinity: None
type: ClusterIP
# 应用
[root@master01 newapp]# kaf acme-customer.yaml
# 验证
[root@master01 newapp]# kgp | grep acme-financial-customer
acme-financial-customer-69d69d4659-hlk8x 1/1 Running 0 149m
1.5 创建UI-ingress¶
[root@master01 newapp]# vim acme-ui-ing.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: acme-financial-ing
spec:
ingressClassName: nginx
rules:
- host: acme.zhang-qing.com
http:
paths:
- pathType: Prefix
backend:
service:
name: acme-financial-ui
port:
number: 8081
path: /
# 应用
[root@master01 newapp]# kaf acme-ui-ing.yaml
# 验证
[root@master01 newapp]# kgi | grep acme-financial-ing
acme-financial-ing nginx acme.zhang-qing.com 10.0.0.11 80 150m
1.6 测试Spring微服务API¶
通过Ingress访问UI服务的三个接口:/hello、/start、/readtimeout。
# 查看服务svc
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
acme-financial-account ClusterIP 10.96.54.249 <none> 8083/TCP 6m22s
acme-financial-back-office ClusterIP 10.111.237.227 <none> 8082/TCP 6m22s
acme-financial-customer ClusterIP 10.98.134.30 <none> 8084/TCP 6m21s
acme-financial-office ClusterIP 10.97.42.206 <none> 8082/TCP 6m21s
acme-financial-ui ClusterIP 10.99.246.84 <none> 8081/TCP 6m21s
# 模拟访问
## 正常访问
$ for i in {1..5000}; do curl http://acme.zhang-qing.com/hello && sleep 1; done
## 正常访问
$ for i in {1..5000}; do curl http://acme.zhang-qing.com/start && sleep 1; done
## 异常访问
$ for i in {1..5000}; do curl http://acme.zhang-qing.com/readtimeout && sleep 1; done
1.7 查看 SkyWalking UI 界面¶
- 吞吐量CPM,表示每分钟的调用.
- Apdex分数:衡量服务器性能的标准
- 响应时间百分比,包括 p99, p95, p90, p75, p50.
- SLA表示成功率。对于HTTP,表示响应为200的请求.

上图中重要指标:
- Service Load(CPM/PPM):正常加载的服务
- Slow Service (ms):服务延迟的时间
- Un-Health Service(Apdex):不健康的服务
- Slow Endpoints(ms):慢的Endpoints
拓扑图:用指标显示服务和实例之间的关系,点击服务显示监控数据

跟踪查询:skywalk提供的分布式代理一样的典型特性.

具体接口服务报错/响应慢的主要原因

二、Go应用如何接入Skywalking?¶
SkyWalking Go Agent 快速开始指南 | Apache SkyWalking
三、总结¶
SkyWalking 的主要功能和特点:
- 分布式追踪:提供了分布式追踪功能,可以帮助研发同学识别和调试分布式微服务 应用中的性能问题。
- 应用性能监测:监测应用程序的性能情况,包括吞吐量、响应时间、错误率等指 标。
- 自定义告警:自定义告警条件和操作,以便及时发现和解决性能问题。
- 多语言支持:多种编程语言,包括 Java、.NET、Node.js 等。
- 可扩展性:支持插件式的架构,可以方便地添加新的监测模块和数据存储引擎。