我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

  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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录