首页 > 其他分享 >skywalking安装以及使用go

skywalking安装以及使用go

时间:2022-09-21 21:13:19浏览次数:59  
标签:span go2sky err fmt ctx test go skywalking 安装

Skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

1.部署Elasticsearch

 这里基于Docker简单单机部署,普通部署和集群部署可以参考官方文档。

docker pull elasticsearch:7.6.2

指定单机启动

注:通过ES_JAVA_OPTS设置ES初始化内存,否则在验证时可能会起不来

docker run --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" --name='elasticsearch' -d elasticsearch:7.6.2

验证es安装成功, 浏览器地址栏输入:http://127.0.0.1:9200/,浏览器页面显示如下内容:

{

  "name" : "592326f2d7c6",

  "cluster_name" : "docker-cluster",

  "cluster_uuid" : "zY7SuwXCSLulJGIkJbMgWQ",

  "version" : {

    "number" : "7.6.2",

    "build_flavor" : "default",

    "build_type" : "docker",

    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",

    "build_date" : "2020-03-26T06:34:37.794943Z",

    "build_snapshot" : false,

    "lucene_version" : "8.4.0",

    "minimum_wire_compatibility_version" : "6.8.0",

    "minimum_index_compatibility_version" : "6.0.0-beta1"

  },

  "tagline" : "You Know, for Search"

}

2.部署Skywalking OAP

拉取镜像

docker pull apache/skywalking-oap-server:8.5.0-es7

启动Skywalking OAP

注:–link后面的第一个参数和elasticsearch容器名一致; -e SW_STORAGE_ES_CLUSTER_NODES:es7也可改为你es服务器部署的Ip地址,即ip:9200

docker run --name oap --restart always -d --restart=always -e TZ=Asia/Shanghai -p 12800:12800 -p 11800:11800 --link elasticsearch:elasticsearch -e SW_STORAGE=elasticsearch7 -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 apache/skywalking-oap-server:8.5.0-es7

3.部署Skywalking UI

拉取镜像

docker pull apache/skywalking-ui:8.5.0

启动Skywalking UI

注:–link后面的第一个参数和skywalking OAP容器名一致;

docker run -d --name skywalking-ui --restart=always -e TZ=Asia/Shanghai -p 8088:8080 --link oap:oap -e SW_OAP_ADDRESS=oap:12800 apache/skywalking-ui:8.5.0

注意,这里的 8080 端口为可视化页面端口。默认账号密码为 admin/admin

 

  go代码示例

这里完美写2个服务8080---->7070

7070的代码如下

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()
    rp, err := reporter.NewGRPCReporter("192.168.100.30: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")
}

8080的代码如下

 

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()
    rp, err := reporter.NewGRPCReporter("192.168.100.30: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(":8080")

}

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 8080",go2sky.TraceID(ctx),go2sky.SpanID(ctx)))
    HttpRequest(ctx)
    c.String(http.StatusOK, "test 8080")
}

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)))
    }
}

运行结果

 

 

 

 

标签:span,go2sky,err,fmt,ctx,test,go,skywalking,安装
From: https://www.cnblogs.com/majiang/p/16717126.html

相关文章

  • VS2022+OpenGL:安装
    EBU7405-3DGraphicsProgrammingTools的要求罢嘞,除了自带的GL只安装GLUT;参考的老师的文档安装VSCODE下载VSCode预览版下载地址稳定版下载地址选择组件修改......
  • 【C++】GoogleTest入门指南
    参考:GoogleTest官网基本概念要使用GoogleTest,需要包含headergtest/gtest.h断言Assertions断言是检查条件是否为真的语句,其结果可能是成功或失败,失败分为非致命失败和......
  • 基于docker安装jumpserver
    以下配置均在一台ubuntu上实现#生成宿主机Mysql配置文件,便于docker内容器使用[root@ubuntu2004~]#mkdir-p/etc/mysql/mysql.conf.d[root@ubuntu2004~]#mkdir-p/......
  • ansible的安装与简单使用
    1.安装前需要epel的repo文件以及2.6以上的python可以在阿里镜像站下载到2.开始安装我这里只有两台虚拟机,一台作为控制端,一台作为被控端控制端:192.168.10.144(之后称主......
  • Django 目录
    1PythonWeb开发主流框架2Django简介和版本介绍3Django使用cmd创建工程4Django创建APP和目录结构介绍5Django使用VScode创建工程6Django使用Pycharm创......
  • 【整理】jenkins插件安装的几种方式(在线安装、离线安装)
    整理参考:https://blog.csdn.net/qq_35472206/article/details/1260495741、在线安装:安装jenkins后,初次启动的时候安装插件安装推荐的插件,或者选择插件安装 2、在线安......
  • golang语法复习
    标识符大小写当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需......
  • nltk+TextBlob的Windows安装
    主要遇见的问题:显示如下:Resourcepunktnotfound.PleaseusetheNLTKDownloadertoobtaintheresource: >>>importnltk>>>nltk.download('punkt')解......
  • CentOS 7.x 安装redis-5.0.14
    准备篇一、防火墙配置CentOS7.x默认使用的是firewall作为防火墙,这里改为iptables防火墙。1、关闭firewall:systemctlstopfirewalld.service#停止firewallsystemctl......
  • Go RPC开发简介
    gorpc开发指南本书首先介绍了使用Go官方库开发RPC服务的方法,然后介绍流行gRPC库以及其它一些RPC框架如Thrift等,后面重点介绍高性能的分布式全功能的RPC框架rpcx。读者通......