文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-09 11:25

关注
  1. k8s安装skywalking
[root@master skping]# cat apm-oap-server.yamlapiVersion: apps/v1kind: Deploymentmetadata:  labels:    app: skywalking-oap-server  name: skywalking-oap-server  namespace: ops-sharespec:  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: v1kind: Servicemetadata:  name: skywalking-oap-server  namespace: ops-share  labels:    app: skywalking-oap-serverspec:  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.yamlapiVersion: apps/v1kind: Deploymentmetadata:  labels:    app: skywalking-ui  name: skywalking-ui  namespace: ops-sharespec:  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: v1kind: Servicemetadata:  name: skywalking-ui  namespace: ops-share  labels:    app: skywalking-uispec:  #type: ClusterIP  type: NodePort  ports:    - name: http      protocol: TCP      port: 8080      targetPort: http  selector:    app: skywalking-ui
  1. 启动
kubectl ns create ops-sharekubectl apply -f ./kubectl get pod,svc -n ops-share
  1. 访问ip+端口
    在这里插入图片描述
    在这里插入图片描述

  2. golang代码接入skywalking

#cat test.gopackage mainimport (    "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.gopackage mainimport (    "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-alpinedocker run -itd  -p 8080:8080 skyapm/skywalking-php:v4.2.0-7.2-fpm-alpine bash docker exec -it id bashcd /usr/local/etc/php/conf.d/cat ext-skywalking.ini[skywalking]extension=skywalking.soskywalking.app_code = hello_skywalkingskywalking.enable = 1skywalking.version = 8skywalking.grpc = 192.168.14.27:11800#skywalking.error_handler_enable = 0#skywalking.sample_n_per_3_secs = -1#skywalking.instance_name = ""cd /var/www/htmlcat 2.php<?php$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
    在这里插入图片描述

在这里插入图片描述

来源地址:https://blog.csdn.net/weixin_43606975/article/details/128575800

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯