Skywalking调用链监控平台搭建

  • Skywalking架构简介
  • 在Minikube中部署Skywalking监控平台
  • 部署YAML文件准备
  • skywalking-oap.yml文件准备:
  • skywalking-ui.yml文件准备:
  • 部署开始
  • Ingress暴露Skywalking UI


Skywalking架构简介

skywalking 调用python skywalking 调用链_apache


服务器端: Receiver接收数据,HTTP支持UI访问,Tracing, metrics 处理模块,Analysis分析引擎,Query查询引擎

UI端

Skywalking Agent:无侵入式埋点

Skywalking Client: 侵入式埋点

后端:生产环境建议使用Elasticsearch,也支持其他数据存储机制,mysql etc.

在Minikube中部署Skywalking监控平台

部署YAML文件准备

skywalking-oap.yml文件准备:

OAP部署文件:Observability Analysis Platform 可以理解为skywalking的服务器端。

  • Port 11800 用来接收Trace,Metrics.
  • Port 12800 用来给skywalking UI做查询用的。

随OAP deployment发布的service是用来给UI提供后端服务的,需要在集群里暴露出来,type没有加,默认为ClusterIP类型,集群内服务地址。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: oap
  namespace: skywalking
spec:
  replicas: 1
  selector:
    matchLabels:
      app: oap
      release: skywalking
  template:
    metadata:
      labels:
        app: oap
        release: skywalking
    spec:
      containers:
        - name: oap
          image: apache/skywalking-oap-server:8.3.0-es6
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 11800
              name: grpc
            - containerPort: 12800
              name: rest
---
apiVersion: v1
kind: Service
metadata:
  name: oap
  namespace: skywalking
  labels:
    service: oap
spec: 
  ports:
    - port: 12800
      name: rest
    - port: 11800
      name: grpc
  type: ClusterIP
  selector:
    app: oap

skywalking-ui.yml文件准备:

UI部署文件:用户访问的界面。

  • value: oap:12800 为OAP服务名加端口号。
  • Port 31234 可以用来访问UI。

随UI deployment发布的服务是nodeport服务,如果后续打算用ingress来暴露UI服务,可以删除—下面服务部分。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ui-deployment
  namespace: skywalking
  labels:
    app: ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ui
  template:
    metadata:
      labels:
        app: ui
    spec:
      containers:
        - name: ui
          image: apache/skywalking-ui:8.3.0
          ports:
            - containerPort: 8080
              name: page
          env:
            - name: SW_OAP_ADDRESS
              value: oap:12800
---
apiVersion: v1
kind: Service
metadata:
  name: ui
  namespace: skywalking
  labels:
    service: ui
spec:
  ports:
    - port: 8080
      name: page
      nodePort: 31234
  type: NodePort
  selector:
    app: ui

部署开始

启动MiniKube Node,如果不会

在K8S中创建namespace skywalking:
执行命令:

kubectl create ns skywalking
kubectl get ns

进入准备好的文件目录:

ls
两个个文件 skywalking-oap.yml skywalking-ui.yml

发布文件

kubectl apply -f .

查看发布的文件及容器状态:

kubectl get all -n skywalking

Skywalking UI在K8S集群外,暴露31234端口。

查看POD日志,观察是否正常运行:

kubectl logs pod/pod_name

gRPC server 0.0.0.0:11800 表示服务起端已经启动,准备好接收数据。
jetty.server也启动成功。

使用minikube自带命令,查看service列表:

minkube service list

浏览器访问skywalking UI校验成功。数据目前为空。

skywalking 调用python skywalking 调用链_skywalking 调用python_02

本文用定制部署,并且后端数据存储用H2,生产环境建议用chart部署集群模式,后端数据存储用ES。

Ingress暴露Skywalking UI

上述部署已完成,如果想用ingress而不是nodeport,可以参照下面配置部署。

UI的部署可以去掉nodeport服务,改用ingress来暴露服务。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-skywalking-service
  namespace: skywalking
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - host: skywalking.minikube.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: ui
                port:
                   number: 8080

minikube node 所在VM也可以配置nginx:

server {
        listen       80;
        server_name  skywalking.minikube.com;

        location / {
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $http_host;
            proxy_set_header Host "skywalking.minikube.com";
            proxy_pass http://skywalking.minikube.com;
        }
    }

然后修改相应hosts文件。

  • linux上

vim /etc/hosts

192.168.49.2   skywalking.minikube.com
  • windows上

编辑C:\Windows\System32\drivers\etc\hosts

192.168.44.133      skywalking.minikube.com