27.链路追踪-skywalking-oap

27.链路追踪-skywalking-oap

我们这里手动构造资源文件部署skywalking到k8s集群中

Helm安装参考https://github.com/apache/skywalking-kubernetes/tree/master/chart/skywalking

namespace:skywalking-ns

一、skywalking-oap资源说明
  1. elasticsearch-svc.yaml
  2. elasticsearch-statefulset.yaml
  3. oap-rbac.yaml
  4. oap-svc.yaml
  5. oap-es-init-job.yaml
  6. oap-deployment.yaml
  7. ui-svc.yaml
  8. ui-deployment.yaml
二、skywalking-oap资源
1. elasticsearch

用于存储skywalking oap接收到的数据

  • elasticsearch-svc.yaml
kind: Service
apiVersion: v1
metadata:
  namespace: skywalking-ns
  name: elasticsearch-master
  labels:
    heritage: "Helm"
    release: "hzw-od-sw"
    chart: "elasticsearch"
    app: "elasticsearch-master"
  annotations:
    {}
spec:
  type: ClusterIP
  selector:
    heritage: "Helm"
    release: "hzw-od-sw"
    chart: "elasticsearch"
    app: "elasticsearch-master"
  ports:
  - name: http
    protocol: TCP
    port: 9200
  - name: transport
    protocol: TCP
    port: 9300
---
kind: Service
apiVersion: v1
metadata:
  namespace: skywalking-ns
  name: elasticsearch-master-headless
  labels:
    heritage: "Helm"
    release: "hzw-od-sw"
    chart: "elasticsearch"
    app: "elasticsearch-master"
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  clusterIP: None # This is needed for statefulset hostnames like elasticsearch-0 to resolve
  # Create endpoints also if the related pod isn't ready
  publishNotReadyAddresses: true
  selector:
    app: "elasticsearch-master"
  ports:
  - name: http
    port: 9200
  - name: transport
    port: 9300
  • elasticsearch-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: skywalking-ns
  name: elasticsearch-master
  labels:
    heritage: "Helm"
    release: "hzw-od-sw"
    chart: "elasticsearch"
    app: "elasticsearch-master"
  annotations:
    esMajorVersion: "7"
spec:
  serviceName: elasticsearch-master-headless
  selector:
    matchLabels:
      app: "elasticsearch-master"
  replicas: 2
  podManagementPolicy: Parallel
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      name: "elasticsearch-master"
      labels:
        heritage: "Helm"
        release: "hzw-od-sw"
        chart: "elasticsearch"
        app: "elasticsearch-master"
      annotations:       
    spec:
      securityContext:
        fsGroup: 1000
        runAsUser: 1000
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - "elasticsearch-master"
            topologyKey: kubernetes.io/hostname
      terminationGracePeriodSeconds: 120
      volumes:
      initContainers:
      - name: configure-sysctl
        securityContext:
          runAsUser: 0
          privileged: true
        image: "docker.elastic.co/elasticsearch/elasticsearch:7.5.1"
        imagePullPolicy: "IfNotPresent"
        command: ["sysctl", "-w", "vm.max_map_count=262144"]
        resources:
          {}
      containers:
      - name: "elasticsearch"
        securityContext:
          capabilities:
            drop:
            - ALL
          runAsNonRoot: true
          runAsUser: 1000
        image: "docker.elastic.co/elasticsearch/elasticsearch:7.5.1"
        imagePullPolicy: "IfNotPresent"
        readinessProbe:
          failureThreshold: 3
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 3
          timeoutSeconds: 5
          exec:
            command:
              - sh
              - -c
              - |
                #!/usr/bin/env bash -e
                # If the node is starting up wait for the cluster to be ready (request params: 'wait_for_status=green&timeout=1s' )
                # Once it has started only check that the node itself is responding
                START_FILE=/tmp/.es_start_file
                http () {
                    local path="${1}"
                    if [ -n "${ELASTIC_USERNAME}" ] && [ -n "${ELASTIC_PASSWORD}" ]; then
                      BASIC_AUTH="-u ${ELASTIC_USERNAME}:${ELASTIC_PASSWORD}"
                    else
                      BASIC_AUTH=''
                    fi
                    curl -XGET -s -k --fail ${BASIC_AUTH} http://127.0.0.1:9200${path}
                }
                if [ -f "${START_FILE}" ]; then
                    echo 'Elasticsearch is already running, lets check the node is healthy and there are master nodes available'
                    http "/_cluster/health?timeout=0s"
                else
                    echo 'Waiting for elasticsearch cluster to become cluster to be ready (request params: "wait_for_status=green&timeout=1s" )'
                    if http "/_cluster/health?wait_for_status=green&timeout=1s" ; then
                        touch ${START_FILE}
                        exit 0
                    else
                        echo 'Cluster is not yet ready (request params: "wait_for_status=green&timeout=1s" )'
                        exit 1
                    fi
                fi
        ports:
        - name: http
          containerPort: 9200
        - name: transport
          containerPort: 9300
        resources:
          limits:
            cpu: 1000m
            memory: 2Gi
          requests:
            cpu: 100m
            memory: 2Gi
        env:
          - name: node.name
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: cluster.initial_master_nodes
            value: "elasticsearch-master-0,elasticsearch-master-1,"    # es集群节点名,按节点数量
            # value: "elasticsearch-master-0,elasticsearch-master-1,elasticsearch-master-2,"
          - name: discovery.seed_hosts
            value: "elasticsearch-master-headless"
          - name: cluster.name
            value: "elasticsearch"
          - name: network.host
            value: "0.0.0.0"
          - name: ES_JAVA_OPTS
            value: "-Xmx1g -Xms1g"
          - name: node.data
            value: "true"
          - name: node.ingest
            value: "true"
          - name: node.master
            value: "true"
        volumeMounts:

因为elasticsearch是有状态服务,我们使用StatefulSet资源来部署elasticsearch

2. oap-server
  • oap-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app: hzw-od-sw
    chart: skywalking-4.0.0
    component: "oap"
    heritage: Helm
    release: hzw-od-sw
  name: hzw-od-sw-skywalking-oap
  namespace: skywalking-ns
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: skywalking-ns
  name: hzw-od-sw-skywalking
  labels:
    app: hzw-od-sw
    chart: "skywalking-4.0.0"
    release: "hzw-od-sw"
    heritage: "Helm"
rules:
  - apiGroups: [""]
    resources: ["pods","configmaps"]
    verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: skywalking-ns
  name: hzw-od-sw-skywalking
  labels:
    app: hzw-od-sw
    chart: "skywalking-4.0.0"
    release: "hzw-od-sw"
    heritage: "Helm"
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: hzw-od-sw-skywalking
subjects:
  - kind: ServiceAccount
    name: hzw-od-sw-skywalking-oap
    namespace: skywalking-ns
  • oap-svc.yaml
---
apiVersion: v1
kind: Service
metadata:
  namespace: skywalking-ns
  name: hzw-od-sw-skywalking-oap
  labels:
    app: hzw-od-sw
    chart: skywalking-4.0.0
    component: "oap"
    heritage: Helm
    release: hzw-od-sw
spec:
  type: ClusterIP
  ports:
  - port: 12800
    name: rest
  - port: 11800
    name: grpc
  selector:
    app: hzw-od-sw
    component: "oap"
    release: hzw-od-sw
---
  • oap-es-init-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  namespace: skywalking-ns
  name: "hzw-od-sw-es-init"
  labels:
    app: hzw-od-sw
    chart: skywalking-4.0.0
    component: "hzw-od-sw-skywalking-job"
    heritage: Helm
    release: hzw-od-sw
spec:
  template:
    metadata:
      name: "hzw-od-sw-es-init"
      labels:
        app: hzw-od-sw
        component: "hzw-od-sw-skywalking-job"
        release: hzw-od-sw
    spec:
      restartPolicy: Never
      initContainers:
      - name: wait-for-elasticsearch
        image: busybox:1.30
        imagePullPolicy: IfNotPresent
        command: ['sh', '-c', 'for i in $(seq 1 60); do nc -z -w3 elasticsearch-master 9200 && exit 0 || sleep 5; done; exit 1']
      containers:
      - name: oap
        image: apache/skywalking-oap-server:8.1.0-es7
        imagePullPolicy: IfNotPresent
        env:
        - name: JAVA_OPTS
          value: "-Xmx2g -Xms2g -Dmode=init"
        - name: SW_STORAGE
          value: elasticsearch7
        - name: SW_STORAGE_ES_CLUSTER_NODES
          value: "elasticsearch-master:9200"
---

在elasticsearch中初始化skywalking的数据表等资源

  • oap-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: hzw-od-sw
    chart: skywalking-4.0.0
    component: "oap"
    heritage: Helm
    release: hzw-od-sw
  name: hzw-od-sw-skywalking-oap
  namespace: skywalking-ns
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hzw-od-sw
      component: "oap"
      release: hzw-od-sw
  template:
    metadata:
      labels:
        app: hzw-od-sw
        component: "oap"
        release: hzw-od-sw
    spec:
      serviceAccountName: hzw-od-sw-skywalking-oap
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            podAffinityTerm:
              topologyKey: kubernetes.io/hostname
              labelSelector:
                matchLabels:
                  app: "hzw-od-sw"
                  release: "hzw-od-sw"
                  component: "oap"
      initContainers:
      - name: wait-for-elasticsearch
        image: busybox:1.30
        imagePullPolicy: IfNotPresent
        command: ['sh', '-c', 'for i in $(seq 1 60); do nc -z -w3 elasticsearch-master 9200 && exit 0 || sleep 5; done; exit 1']
      containers:
      - name: oap
        image: apache/skywalking-oap-server:8.1.0-es7
        imagePullPolicy: IfNotPresent
        livenessProbe:
          tcpSocket:
            port: 12800
          initialDelaySeconds: 15
          periodSeconds: 20
        readinessProbe:
          tcpSocket:
            port: 12800
          initialDelaySeconds: 15
          periodSeconds: 20
        ports:
        - containerPort: 11800
          name: grpc
        - containerPort: 12800
          name: rest
        env:
        - name: JAVA_OPTS
          value: "-Dmode=no-init -Xmx2g -Xms2g"
        - name: SW_CLUSTER
          value: kubernetes
        - name: SW_CLUSTER_K8S_NAMESPACE
          value: "skywalking-ns"
        - name: SW_CLUSTER_K8S_LABEL
          value: "app=hzw-od-sw,release=hzw-od-sw,component=oap"
        - name: SKYWALKING_COLLECTOR_UID
          valueFrom:
            fieldRef:
              fieldPath: metadata.uid
        - name: SW_STORAGE
          value: elasticsearch7
        - name: SW_STORAGE_ES_CLUSTER_NODES
          value: "elasticsearch-master:9200"
        volumeMounts:
      volumes:
---
3. skywalking-ui
  • ui-svc.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: hzw-od-sw
    chart: skywalking-4.0.0
    component: "ui"
    heritage: Helm
    release: hzw-od-sw
  name: hzw-od-sw-skywalking-ui
  namespace: skywalking-ns
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
  selector:
    app: hzw-od-sw
    component: "ui"
    release: hzw-od-sw
---
  • ui-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: skywalking-ns
  name: hzw-od-sw-skywalking-ui
  labels:
    app: hzw-od-sw
    chart: skywalking-4.0.0
    component: "ui"
    heritage: Helm
    release: hzw-od-sw
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hzw-od-sw
      component: "ui"
      release: hzw-od-sw
  template:
    metadata:
      labels:
        app: hzw-od-sw
        component: "ui"
        release: hzw-od-sw
    spec:
      containers:
      - name: ui
        image: apache/skywalking-ui:8.1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: page
        env:
        - name: SW_OAP_ADDRESS
          value: hzw-od-sw-skywalking-oap:12800
---
Skywalking链路追踪是一种用于监测和追踪分布式系统中请求路径的方法。它能够帮助开发人员了解系统中的微服务之间的调用关系,以及发现潜在的性能瓶颈和故障点。 当前主流的分布式链路追踪系统中,Skywalking是其中一个非常受欢迎的开源系统。它提供了丰富的功能和灵活的配置选项,使得开发人员能够轻松地集成和使用它来进行链路追踪Skywalking的基本知识包括了服务监控的三个要素,即请求的入口、请求的出口以及请求的耗时。通过监控这些要素,我们可以获得对分布式系统中请求的全局视图,并且可以跟踪请求路径中的每个节点。 要使用Skywalking进行链路追踪,我们首先需要在系统中部署Skywalking oap服务,并将其注册到nacos上。只要至少保持一个Skywalking oap服务在运行,就能够进行链路追踪。通过配置Skywalking agent,我们可以在各个微服务中埋点,从而捕获和发送调用链数据到Skywalking oap服务。 总结起来,Skywalking链路追踪是一种用于监测和追踪分布式系统中请求路径的方法,它能够帮助开发人员了解系统中的微服务之间的调用关系,以及发现潜在的性能瓶颈和故障点。Skywalking是当前非常受欢迎的开源链路追踪系统,通过部署Skywalking oap服务和在各个微服务中埋点,我们可以实现对分布式系统中请求的全局视图和详细追踪数据的收集。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [全网最全的Skywalking链路追踪](https://blog.csdn.net/scmagic/article/details/123429815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [链路追踪SkyWalking](https://blog.csdn.net/qq_41910252/article/details/122746979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzw@sirius

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值