一、线上真实场景模拟(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 界面

  1. 吞吐量CPM,表示每分钟的调用.
  2. Apdex分数:衡量服务器性能的标准
  3. 响应时间百分比,包括 p99, p95, p90, p75, p50.
  4. SLA表示成功率。对于HTTP,表示响应为200的请求.

Day08-可观察性-APM-图8

上图中重要指标:

  • Service Load(CPM/PPM):正常加载的服务
  • Slow Service (ms):服务延迟的时间
  • Un-Health Service(Apdex):不健康的服务
  • Slow Endpoints(ms):慢的Endpoints

拓扑图:用指标显示服务和实例之间的关系,点击服务显示监控数据

Day08-可观察性-APM-图9

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

Day08-可观察性-APM-图10

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

Day08-可观察性-APM-图11

二、Go应用如何接入Skywalking?

SkyWalking Go Agent 快速开始指南 | Apache SkyWalking

三、总结

SkyWalking 的主要功能和特点:

  • 分布式追踪:提供了分布式追踪功能,可以帮助研发同学识别和调试分布式微服务 应用中的性能问题。
  • 应用性能监测:监测应用程序的性能情况,包括吞吐量、响应时间、错误率等指 标。
  • 自定义告警:自定义告警条件和操作,以便及时发现和解决性能问题。
  • 多语言支持:多种编程语言,包括 Java、.NET、Node.js 等。
  • 可扩展性:支持插件式的架构,可以方便地添加新的监测模块和数据存储引擎。