日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過SkyWalking上報Go應用數據

通過SkyWalking為應用埋點并上報鏈路數據至可觀測鏈路 OpenTelemetry 版后,可觀測鏈路 OpenTelemetry 版即可開始監控應用,您可以查看應用拓撲、調用鏈路、異常事務、慢事務和SQL分析等一系列監控數據。本文介紹如何使用SkyWalking Go Agent進行自動埋點并上報應用數據。

說明

ARMS應用監控針對Golang語言提供了商業化版本的自研探針,提供了無侵入的埋點能力,擁有更加豐富的功能和更高的穩定性。詳細信息,請參見開始監控Golang應用。

前提條件

獲取接入點信息

新版控制臺

  1. 登錄可觀測鏈路 OpenTelemetry 版控制臺,在左側導航欄單擊接入中心。

  2. 開源框架區域單擊SkyWalking卡片。

  3. 在彈出的SkyWalking面板中選擇數據需要上報的地域。

    說明

    初次接入的地域將會自動進行資源初始化。

  4. 選擇連接方式,然后復制接入點信息。

    若您的服務部署在阿里云上,且所屬地域與選擇的接入地域一致,推薦使用阿里云內網方式,否則選擇公網方式。

    image.png

舊版控制臺

  1. 登錄可觀測鏈路 OpenTelemetry 版控制臺。

  2. 在左側導航欄單擊集群配置,然后在右側頁面單擊接入點信息頁簽。

  3. 在頁面頂部選擇需要接入的地域,然后在集群信息區域打開顯示Token開關。

  4. 客戶端采集工具區域單擊SkyWalking。

    相關信息列中,獲取接入點信息。

    SkyWalking接入點信息

    說明

    如果應用部署于阿里云生產環境,則選擇阿里云VPC網絡接入點,否則選擇公網接入點。

Agent選擇

Go2Sky是SkyWalking官方舊版的SkyWalking Go探針,使用人數較多,但侵入較嚴重,因此官方推出了新版的skywalking-go探針,新版探針具有無侵入的特性。本文同時提供skywalking-go和Go2Sky兩種探針接入流程,方便您將數據上報至可觀測鏈路 OpenTelemetry 版控制臺。

Go2Sky

  • 舊版SkyWalking Agent,在skywalking-go Agent正式發布后停止支持。

    根據官網頁面顯示,Go2Sky已被移到Retired,即不再維護。

  • 代碼侵入較嚴重,每一個插件都要在項目中添加Hook。

  • 使用人數較多。

  • 支持的埋點庫:

    展開查看支持的埋點庫

    庫名稱

    監控安裝方式

    sql

    go get -u github.com/SkyAPM/go2sky-plugins/sql

    dubbo-go

    go get -u github.com/SkyAPM/go2sky-plugins/dubbo-go

    gear

    go get -u github.com/SkyAPM/go2sky-plugins/gear

    gin

    go get -u github.com/SkyAPM/go2sky-plugins/gin/v2
    go get -u github.com/SkyAPM/go2sky-plugins/gin/v3

    go-restful

    go get -u github.com/SkyAPM/go2sky-plugins/go-restful

    gorm

    go get -u github.com/SkyAPM/go2sky-plugins/gorm

    http

    go get -u github.com/SkyAPM/go2sky

    go-kratos v2

    go get -u github.com/SkyAPM/go2sky-plugins/kratos

    logrus

    go get -u github.com/SkyAPM/go2sky-plugins/logrus

    go-micro(v3.5.0)

    go get -u github.com/SkyAPM/go2sky-plugins/micro

    mongo

    go get -u github.com/SkyAPM/go2sky-plugins/mongo

    go-resty(v2.2.0)

    go get -u github.com/SkyAPM/go2sky-plugins/resty

    zap(v1.16.0)

    go get -u github.com/SkyAPM/go2sky-plugins/zap

skywalking-go

  • 新版SkyWalking Agent,官方提供穩定支持。

  • 代碼幾乎無侵入。

  • 用法簡單,只需要編譯GoLang項目時通過-toolexec參數指定skywalking-go Agent。

  • 使用人數相對Go2Sky較少。

  • 支持的埋點庫:

    展開查看支持的埋點庫

    庫名稱

    監控安裝方式

    sql

    無需安裝。

    dubbo-go

    gear

    gin

    go-restful

    gorm

    http

    go-kratos v2

    logrus

    go-micro(v3.5.0)

    mongo

    go-resty(v2.2.0)

    zap(v1.16.0)

推薦Agent

建議您使用新版skywalking-go探針,優勢如下:

  • 使用簡便:skywalking-go使用更簡單,您只需要通過簡短的步驟即可完成接入和自動埋點。Skywalking-go是無侵入式探針,而Go2Sky在使用插件時需要手動添加Hook鉤子。

  • 社區支持:官方將取消對Go2Sky的繼續支持,也不再接受關于Go2Sky的PR。

  • 插件生態:官方將會持續將Go2Sky的插件移植到skywalking-go。目前,skywalking-go相比Go2Sky多了對gRPC框架的埋點。

示例Demo

示例Demo倉庫地址:SkyWalking Demo

通過skywalking-go探針上報

  1. 下載skywalking-go Agent。

  2. 構建Agent。

    cd skywalking-go && make build
  3. 在skywalking-go/bin路徑下生成可執行文件。

    不同的操作系統對應的可執行文件不同。例如,mac系統需選擇skywalking-go-agent--darwin-amd64。

    image.png

  4. 打開Go項目,在main package中導入skywalking module。

    方式一

    package main
    
    import (
    	_ "github.com/apache/skywalking-go"
    )

    方式二

    skywalking-go/bin/skywalking-go-agent--darwin-amd64 -inject path/to/your-project
  5. 配置config.yaml文件。

    您可以參考示例Demo的skywalking-go/tools/go-agent/config/config.default.yaml文件修改。

    展開查看config.default.yaml文件示例

    agent:
      # Service name is showed in UI.
      service_name: ${SW_AGENT_NAME:Your_ApplicationName}
      # To obtain the environment variable key for the instance name, if it cannot be obtained, an instance name will be automatically generated.
      instance_env_name: SW_AGENT_INSTANCE_NAME
      # Sampling rate of tracing data, which is a floating-point value that must be between 0 and 1.
      sampler: ${SW_AGENT_SAMPLE:1}
      meter:
        # The interval of collecting metrics, in seconds.
        collect_interval: ${SW_AGENT_METER_COLLECT_INTERVAL:20}
    
    reporter:
      grpc:
        # The gRPC server address of the backend service.
        backend_service: ${SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE:127.0.0.1:11800}
        # The maximum count of segment for reporting tracing data.
        max_send_queue: ${SW_AGENT_REPORTER_GRPC_MAX_SEND_QUEUE:5000}
        # The interval(s) of checking service and backend service
        check_interval: ${SW_AGENT_REPORTER_GRPC_CHECK_INTERVAL:20}
        # The authentication string for communicate with backend.
        authentication: ${SW_AGENT_REPORTER_GRPC_AUTHENTICATION:}
        # The interval(s) of fetching dynamic configuration from backend.
        cds_fetch_interval: ${SW_AGENT_REPORTER_GRPC_CDS_FETCH_INTERVAL:20}
        tls:
          # Whether to enable TLS with backend.
          enable: ${SW_AGENT_REPORTER_GRPC_TLS_ENABLE:false}
          # The file path of ca.crt. The config only works when opening the TLS switch.
          ca_path: ${SW_AGENT_REPORTER_GRPC_TLS_CA_PATH:}
          # The file path of client.pem. The config only works when mTLS.
          client_key_path: ${SW_AGENT_REPORTER_GRPC_TLS_CLIENT_KEY_PATH:}
          # The file path of client.crt. The config only works when mTLS.
          client_cert_chain_path: ${SW_AGENT_REPORTER_GRPC_TLS_CLIENT_CERT_CHAIN_PATH:}
          # Controls whether a client verifies the server's certificate chain and host name.
          insecure_skip_verify: ${SW_AGENT_REPORTER_GRPC_TLS_INSECURE_SKIP_VERIFY:false}
    
    log:
      # The type determines which logging type is currently used by the system.
      # The Go agent wourld use this log type to generate custom logs. It supports: "auto", "logrus", or "zap".
      # auto: Automatically identifies the source of the log.
      #       If logrus is present in the project, it wourld automatically use logrus.
      #       If zap has been initialized in the project, it would use the zap framework.
      #       By default, it would use std errors to output log content.
      # logrus: Specifies that the Agent should use the logrus framework.
      # zap: Specifies that the Agent should use the zap framework.
      # The system must have already been initialized through methods such as "zap.New", "zap.NewProduction", etc.
      type: ${SW_AGENT_LOG_TYPE:auto}
      tracing:
        # Whether to automatically integrate Tracing information into the logs.
        enable: ${SW_AGENT_LOG_TRACING_ENABLE:true}
        # If tracing information is enabled, the tracing information would be stored in the current Key in each log.
        key: ${SW_AGENT_LOG_TRACING_KEY:SW_CTX}
      reporter:
        # Whether to upload logs to the backend.
        enable: ${SW_AGENT_LOG_REPORTER_ENABLE:true}
        # The fields name list that needs to added to the label of the log.(multiple split by ",")
        label_keys: ${SW_AGENT_LOG_REPORTER_LABEL_KEYS:}
    
    plugin:
      # List the names of excluded plugins, multiple plugin names should be splitted by ","
      # NOTE: This parameter only takes effect during the compilation phase.
      excluded: ${SW_AGENT_PLUGIN_EXCLUDES:}
      config:
        http:
          # Collect the parameters of the HTTP request on the server side
          server_collect_parameters: ${SW_AGENT_PLUGIN_CONFIG_HTTP_SERVER_COLLECT_PARAMETERS:false}
        mongo:
          # Collect the statement of the MongoDB request
          collect_statement: ${SW_AGENT_PLUGIN_CONFIG_MONGO_COLLECT_STATEMENT:false}
        sql:
          # Collect the parameter of the SQL request
          collect_parameter: ${SW_AGENT_PLUGIN_CONFIG_SQL_COLLECT_PARAMETER:false}
    

    設置參數有以下兩種方式,例如,如果要配置service_name,配置方法如下:

    方式一(推薦):直接在config.yaml中添加參數

    agent:
      service_name: ${SW_AGENT_NAME:<your_service_name>}

    方式二:配置系統環境變量

    export SW_AGENT_NAME=<your_service_name>

    接入可觀測鏈路 OpenTelemetry 版控制臺需要設置以下參數:

    • service_name: ${SW_AGENT_NAME:Your_ApplicationName}:服務名稱。

    • backend_service: ${SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE:127.0.0.1:11800}:接入點的Endpoint。

    • authentication: ${SW_AGENT_REPORTER_GRPC_AUTHENTICATION:}:接入點鑒權Token。

    skywalking-go Agent默認對所有的插件自動埋點,若需要移除特定插件,可以設置excluded參數,例如:

    # 如果想要關閉sql plugin
    plugin:
      excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql}
    
    # 如果想同時關閉多個plugin,使用,分隔
    plugin:
      excluded: ${SW_AGENT_PLUGIN_EXCLUDES:sql,gorm}
  6. 重新構建項目。

    # 需要使用-toolexec
    sudo go build -toolexec "path/to/skywalking-go-agent -config path/to/config.yaml" -a
    • path/to/skywalking-go-agent:上文步驟1可執行文件的絕對路徑。

    • path/to/config.yaml:skywalking-go Agent的參數配置文件的絕對路徑。

  7. 啟動項目。此時SkyWalking數據將會上報至可觀測鏈路 OpenTelemetry 版控制臺。

參考信息

skywalking-go探針的部分屬性列表,NULL表示默認值未設置:

環境變量

描述

默認值

SW_AGENT_NAME

服務名稱。

NULL

SW_AGENT_INSTANCE_NAME

服務實例名稱。

自動生成

SW_AGENT_SAMPLE

采樣率,取值在0和1之間。

1

SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE

監控數據通過gRPC上報的服務端Endpoint。

127.0.0.1:11800

SW_AGENT_REPORTER_GRPC_AUTHENTICATION

監控數據通過gRPC上報的服務端的鑒權Token。

NULL

SW_AGENT_PLUGIN_EXCLUDES

指定移除的插件。

NULL

通過Go2Sky探針上報

  1. Go2Sky同時支持配置參數硬編碼到項目或通過環境變量自動配置兩種方法。

    配置參數硬編碼

    ### 使用reporter.WithParameter()導入參數
    report, err := reporter.NewGRPCReporter(
        <your-backend-server-address>,
        reporter.WithAuthentication(<your-auth-token>))

    環境變量自動配置

    ### 目前go2sky支持從環境變量獲取以下參數
    SW_AGENT_AUTHENTICATION
    SW_AGENT_LAYER
    SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD
    SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL
    SW_AGENT_COLLECTOR_BACKEND_SERVICES
    SW_AGENT_COLLECTOR_MAX_SEND_QUEUE_SIZE
    SW_AGENT_PROCESS_STATUS_HOOK_ENABLE
    SW_AGENT_PROCESS_LABELS
    
    ### 配置環境變量,以macOS為例
    # 方法1:寫入環境變量配置文件(持久化)
    vim ~/.bash_profile
    export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address>
    source ~/.bash_profile
    # 方法2:打開終端,命令行配置(臨時生效,打開新的終端失效)
    export SW_AGENT_COLLECTOR_BACKEND_SERVICES=<your-collector-address>
  2. 配置ServiceName,用于識別具體的應用。

    ServiceName := <your-service-name>
    tracer, err := go2sky.NewTracer(ServiceName, go2sky.WithReporter(report))
  3. 添加Go2Sky-Plugin Hook。

    Go2Sky開發了眾多庫的插件,但是需要在項目源代碼中添加埋點。如何添加埋點請參見Go2Sky-Plugins的Github倉庫。在每個插件的plugin文件夾下,README.md文件給了簡單的使用示例。

    以gin框架為例:

    1. 進入/gin文件夾,查看/gin/v3/README.md文件。

    2. 添加Middleware的Hook:v3.Middleware(r, tracer)

      package main
      
      import (
      	"log"
      
      	"github.com/SkyAPM/go2sky"
      	v3 "github.com/SkyAPM/go2sky-plugins/gin/v3"
      	"github.com/SkyAPM/go2sky/reporter"
      	"github.com/gin-gonic/gin"
      )
      
      func main() {
      	// Use gRPC reporter for production
      	re, err := reporter.NewLogReporter()
      	if err != nil {
      		log.Fatalf("new reporter error %v \n", err)
      	}
      	defer re.Close()
      
      	tracer, err := go2sky.NewTracer("gin-server", go2sky.WithReporter(re))
      	if err != nil {
      		log.Fatalf("create tracer error %v \n", err)
      	}
      
      	gin.SetMode(gin.ReleaseMode)
      	r := gin.New()
      
      	//Use go2sky middleware with tracing
      	r.Use(v3.Middleware(r, tracer))
      
      	// do something
      }
  4. 重新啟動應用。

參考信息

Go2Sky的Agent屬性配置表,NULL表示默認值未設置:

環境變量

描述

默認值

SW_AGENT_NAME

Go服務的名稱。

NULL

SW_AGENT_LAYER

Instance belong layer name which define in the backend

實例所屬的layer名稱。

NULL

SW_AGENT_INSTANCE_NAME

Go服務的實例名稱。

隨機生成

SW_AGENT_SAMPLE

采樣率,1表示全量采集。

1

SW_AGENT_COLLECTOR_BACKEND_SERVICES

Agent數據上報的服務端地址。

NULL

SW_AGENT_AUTHENTICATION

Agent數據上報的服務端的鑒權令牌。

NULL

SW_AGENT_COLLECTOR_HEARTBEAT_PERIOD

Agent心跳上報周期,單位:s。

20

SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL

動態獲取Agent配置的時間間隔,單位:s。

20

SW_AGENT_COLLECTOR_MAX_SEND_QUEUE_SIZE

發送跨度Span的隊列Buffer長度。

30000

SW_AGENT_PROCESS_STATUS_HOOK_ENABLE

啟用進程狀態Hook功能。

False

SW_AGENT_PROCESS_LABELS

進程標簽,多個標簽用英文半角逗號(,)分隔。

NULL

常見問題

  • 使用skywalking-go時報錯如下:

    image.png

    如果使用inject方式報錯,您可以通過import在main package中導入skywalking module。

  • 跨進程調用時,為什么通過Go2Sky上報可觀測鏈路 OpenTelemetry 版控制臺無法顯示正確的調用鏈?

    全鏈路追蹤通過TraceId將整個鏈路串聯起來,而TraceId通過HTTP請求攜帶傳遞。如果調用鏈不正確,說明TraceId沒有正確傳遞,需要設置合理的Span埋點。

    通過合理使用下面兩個重要的接口,可以將跨進程的調用鏈正確的串聯起來:

    • CreateEntrySpan:入口Span,可以通過該接口從HTTP請求中提取得到鏈路追蹤上下文(包含TraceId)。

    • CreateExitSpan:出口Span,可以通過該接口向HTTP請求注入鏈路追蹤上下文(包含TraceId)。

    // 進程內,使用CreateLocalSpan創建一個跨度(Span)。
    span, ctx, err := tracer.CreateLocalSpan(context.Background())
    subSpan, newCtx, err := tracer.CreateLocalSpan(ctx)
    
    // 跨進程,使用入口Span從CreateEntrySpan從Http請求中提取上下文,使用出口Span向CreateExitSpan向Http請求中注入上下文。
    span, ctx, err := tracer.CreateEntrySpan(r.Context(), "/api/login", func(key string) (string, error) {
        return r.Header.Get(key), nil
    })
    span, err := tracer.CreateExitSpan(req.Context(), "/service/validate", "tomcat-service:8080", func(key, value string) error {
    		req.Header.Set(key, value)
    		return nil
    })

    跨進程的項目,不同進程之間需要傳遞TraceId才能將調用鏈串聯起來,所以需要用到上面的接口將上下文注入到HTTP請求中隨著請求在進程間傳遞。

相關文檔