skywalking 链路追踪监控并接入golang,php环境

6 篇文章 0 订阅
  1. k8s安装skywalking
[root@master skping]# cat apm-oap-server.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: skywalking-oap-server
  name: skywalking-oap-server
  namespace: ops-share
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: skywalking-oap-server
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: skywalking-oap-server
    spec:
      containers:
        - env:
            - name: SW_STORAGE
              value: elasticsearch7
            - name: SW_STORAGE_ES_CLUSTER_NODES
              value: '192.168.14.27:9200'  #es地址
          image: 'apache/skywalking-oap-server:8.5.0-es7'
          imagePullPolicy: IfNotPresent
          securityContext:
            privileged: true
          name: skywalking-oap-server
          ports:
            - containerPort: 1234
              protocol: TCP
            - containerPort: 11800
              protocol: TCP
            - containerPort: 12800
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  name: skywalking-oap-server
  namespace: ops-share
  labels:
    app: skywalking-oap-server
spec:
  type: ClusterIP
  ports:
    - name: http1
      protocol: TCP
      port: 1234
      targetPort: 1234
    - name: http2
      protocol: TCP
      port: 11800
      targetPort: 11800
    - name: http3
      protocol: TCP
      port: 12800
      targetPort: 12800
  selector:
    app: skywalking-oap-server
[root@master skping]# cat skywalking-ui.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: skywalking-ui
  name: skywalking-ui
  namespace: ops-share
spec:
  replicas: 1
  selector:
    matchLabels:
      app: skywalking-ui
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: skywalking-ui
    spec:
      containers:
        - env:
            - name: SW_OAP_ADDRESS
              value: 'skywalking-oap-server.ops-share:12800'
          image: 'apache/skywalking-ui:8.5.0'
          imagePullPolicy: IfNotPresent
          name: skywalking-ui
          ports:
            - containerPort: 8080
              name: http
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  name: skywalking-ui
  namespace: ops-share
  labels:
    app: skywalking-ui
spec:
  #type: ClusterIP
  type: NodePort
  ports:
    - name: http
      protocol: TCP
      port: 8080
      targetPort: http
  selector:
    app: skywalking-ui
  1. 启动
kubectl ns create ops-share
kubectl apply -f ./
kubectl get pod,svc -n ops-share
  1. 访问ip+端口
    在这里插入图片描述
    在这里插入图片描述

  2. golang代码接入skywalking

#cat test.go
package main
import (
    "fmt"
    "github.com/SkyAPM/go2sky"
    v3 "github.com/SkyAPM/go2sky-plugins/gin/v3"
    "github.com/SkyAPM/go2sky/reporter"
    "github.com/gin-gonic/gin"

    "net/http"
    "time"
)


func main() {
    r := gin.Default()
    //skywalking 的端口需要nodeport映射出来,如果你使用的go容器,那么直接使用svc的地址也行。
    rp, err := reporter.NewGRPCReporter("192.168.14.27:11800", reporter.WithCheckInterval(time.Second))
    if err != nil{
        fmt.Println("NewGRPCReporter failed!")
        return
    }
    tracer, err := go2sky.NewTracer("demo2", go2sky.WithReporter(rp))
    if err != nil{
        fmt.Println("NewTracer failed!")
        return
    }
    //使用go2sky-plugins的middleware,就不用我们自己写span了,插件帮我们完成
    go2sky.SetGlobalTracer(tracer)
    r.Use(v3.Middleware(r, tracer))
    r.GET("/",test)

    r.Run(":7070")

}

func test(c *gin.Context)  {
    span,ctx, _ :=go2sky.GetGlobalTracer().CreateLocalSpan(c.Request.Context(),go2sky.WithOperationName("demo2-test"))
    if span!=nil{
        span.Log(time.Now(),"start demo2-test")
        defer span.End()
    }
    fmt.Println(fmt.Sprintf("traceid:%s  spaneId:%d, test 7070",go2sky.TraceID(ctx),go2sky.SpanID(ctx)))
    c.String(http.StatusOK, "test 7070")
}
#cat test2.go
package main

import (
    "context"
    "crypto/tls"
    "fmt"
    "github.com/SkyAPM/go2sky"
    v3 "github.com/SkyAPM/go2sky-plugins/gin/v3"
    "github.com/SkyAPM/go2sky/reporter"
    "github.com/gin-gonic/gin"
    "io/ioutil"
    "net/http"
    "time"
)

func main() {
    r := gin.Default()
    //skywalking 的端口需要nodeport映射出来,如果你使用的go容器,那么直接使用svc的地址也行。
    rp, err := reporter.NewGRPCReporter("192.168.14.27:11800", reporter.WithCheckInterval(time.Second))
    if err != nil {
        fmt.Println("NewGRPCReporter failed!")
        return
    }
    tracer, err := go2sky.NewTracer("demo1", go2sky.WithReporter(rp))
    if err != nil {
        fmt.Println("NewTracer failed!")
        return
    }
    //使用go2sky-plugins的middleware,就不用我们自己写span了,插件帮我们完成
    go2sky.SetGlobalTracer(tracer)
    r.Use(v3.Middleware(r, tracer))
    r.GET("/", test)

    r.Run(":8085")

}

func test(c *gin.Context) {
    span, ctx, _ := go2sky.GetGlobalTracer().CreateLocalSpan(c.Request.Context(), go2sky.WithOperationName("demo1-test"))
    if span != nil {
        defer span.End()
    }
    fmt.Println(fmt.Sprintf("traceid:%s  spaneId:%d, test 8085",go2sky.TraceID(ctx),go2sky.SpanID(ctx)))
    HttpRequest(ctx)
    c.String(http.StatusOK, "test 8085")
}

func HttpRequest(ctx context.Context) {
    url := "http://localhost:7070/"
    request, _ := http.NewRequest(http.MethodGet, url, nil)
    span, _ := go2sky.GetGlobalTracer().CreateExitSpan(ctx, "httpRequest", url, func(headerKey, headerValue string) error {
        request.Header.Set(headerKey, headerValue)
        return nil
    })
    defer span.End()
    span.Log(time.Now(), "start "+url)

    request = request.WithContext(ctx)
    client := http.Client{Transport: &http.Transport{DisableKeepAlives: true, TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}}

    response, err := client.Do(request)
    if err != nil {
        span.Error(time.Now(), fmt.Sprintf("%v", err))
    } else {
        defer response.Body.Close()
        responseByte, _ := ioutil.ReadAll(response.Body)
        span.Log(time.Now(), "response:"+string(responseByte))
        fmt.Println(fmt.Sprintf("traceid:%s  spaneId:%d, response%s", go2sky.TraceID(ctx), go2sky.SpanID(ctx), string(responseByte)))
    }
}

  1. 启动go服务
go run test.go 
go run test2.go 
  1. 访问ip+8085地址
    在这里插入图片描述

  2. 多请求一点数据让skywalking数据展示出来

for i in {1..100};do sleep 2; hey -n 100 -m get  http://192.168.10.100:8085 ;done

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. php-fpm容器接入skywalking
docker pull  skyapm/skywalking-php:v4.2.0-7.2-fpm-alpine
docker run -itd  -p 8080:8080 skyapm/skywalking-php:v4.2.0-7.2-fpm-alpine bash 
docker exec -it id bash
cd /usr/local/etc/php/conf.d/
cat ext-skywalking.ini
[skywalking]
extension=skywalking.so
skywalking.app_code = hello_skywalking
skywalking.enable = 1
skywalking.version = 8
skywalking.grpc = 192.168.14.27:11800
#skywalking.error_handler_enable = 0
#skywalking.sample_n_per_3_secs = -1
#skywalking.instance_name = ""
cd /var/www/html
cat 2.php
<?php
/*
 * Copyright 2021 SkyAPM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
$url = 'http://192.168.10.100:8085/';
echo file_get_contents($url);
?>
  1. 重启docker php-fpm容器并访问8080/2.php
    页面显示test 8085 因为访问的8085的接口

  2. 查看skywalking是否监控到了php
    在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值