更新时间:2025-09-28 GMT+08:00
分享

快速接入Agent

前提条件

  • 部署APM Agent时,必须确保接入APM的机器与APM服务网络连通,Agent才能正常工作。可使用“curl -kv”命令测试目标机器与APM服务器网络是否连通。例如,以检查华北-北京四区域,且接入方式为“Skywalking”的连通性为例,请登录应用所部署的机器,并输入命令“curl -kv” 100.125.2.112:11800,其他区域或源代码的地址请参考探针接入地址
  • GO语言支持Skywalking和OpenTelemetry。

操作步骤

  1. 登录APM控制台
  2. 单击左侧,选择“管理与监管 > 应用性能管理 APM”,进入APM服务页面。
  3. 在左侧导航栏中选择“应用监控 > 应用列表”。
  4. 单击“接入应用”,进入接入应用页面。

    图1 接入应用

  5. 选择“区域”和“应用”。单击“创建应用”,弹出“创建应用”弹窗,可以具体操作参见创建应用

    图2 基础信息

  6. “接入方式”选择Skywalking或者OpenTelemetry。
  7. “服务端语言”选择Go。

    图3 接入方式

  8. 根据应用类型选择接入对应的接入方式,按照步骤接入。同一个应用下,组件名称不能重复。

    • OpenTelemetry
      1. 使用PuTTY等远程登录工具,登录待安装Agent的Linux操作系统主机,并以root或者service权限执行相关命令执行相关命令。执行安装命令的用户需要和启动应用的用户保持一致。
      2. 添加 OpenTelemetry 依赖。
        import (
         "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
         "go.opentelemetry.io/otel"
         "go.opentelemetry.io/otel/baggage"
         "go.opentelemetry.io/otel/exporters/otlp/otlptrace"
         "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
         "google.golang.org/grpc"
         "go.opentelemetry.io/otel/propagation"
         "go.opentelemetry.io/otel/sdk/resource"
         sdktrace "go.opentelemetry.io/otel/sdk/trace"
         semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
        )
      3. 对接OpenTelemetry。
        const (
         SERVICE_NAME = "应用名称.组件名称.环境名称"
         GRPC_ENDPOINT="**.**.**.**:****"
         GRPC_TOKEN= "8e***4x"
        )
        
        func main() {
         init := initialization()
         defer init()
         grpc := otel.Tracer("服务本身名称")
         method, _ := baggage.NewMember("method", "repl")
         client, _ := baggage.NewMember("client", "cli")
         bag, _ := baggage.New(method, client)
         context := baggage.ContextWithBaggage(context.Background(), bag)
         for {
          ctx, span := grpc.Start(context, "CreateSpan")
          createSpan(ctx)
          span.End()
          time.Sleep(time.Duration(1) * time.Second)
         }
        }
        func initialization() func() {
         ctx := context.Background()
         headers := map[string]string{"Authentication": APM_TOKEN}
         traceClientGrpc := otlptracegrpc.NewClient(
          otlptracegrpc.WithInsecure(),
          otlptracegrpc.WithEndpoint(APM_ENDPOINT),
          otlptracegrpc.WithHeaders(headers),
          otlptracegrpc.WithDialOption(grpc.WithBlock()))
         traceExp, err := otlptrace.New(ctx, traceClientGrpc)
         if err != nil {
          log.Fatalf("%s: %v", "can not create exporter", err)
         }
         res, err := resource.New(ctx,
         resource.WithFromEnv(),
         resource.WithProcess(),
         resource.WithTelemetrySDK(),
         resource.WithHost(),
         resource.WithAttributes(
          semconv.ServiceNameKey.String(SERVICE_NAME),
          semconv.HostNameKey.String(APM_ENDPOINT),
         ),
         )
         if err != nil {
          log.Fatalf("%s: %v", "can not create exporter", err)
         }
         bsp := sdktrace.NewBatchSpanProcessor(traceExp)
         tracerProvider := sdktrace.NewTracerProvider(
          sdktrace.WithSampler(sdktrace.AlwaysSample()),
          sdktrace.WithResource(res),
          sdktrace.WithSpanProcessor(bsp),
         )
         otel.SetTextMapPropagator(propagation.TraceContext{})
         otel.SetTracerProvider(tracerProvider)
         return func() {
          cxt, cancel := context.WithTimeout(ctx, time.Second)
          defer cancel()
          if err := traceExp.Shutdown(cxt); err != nil {
           otel.Handle(err)
          }
         }
        }
        func createSpan(ctx context.Context) {
         address := "远程服务端地址"
         client := http.Client {
          Transport: otelhttp.NewTransport(http.DefaultTransport),
         }
         req, err := http.NewRequestWithContext(ctx, "GET", address, nil)
         res, err := client.Do(req)
         if err != nil {
          log.Println(err)
         } else {
          res.Body.Close()
         }
        }
        
    • Skywalking
    • 下载Skywalking。安装Skywalking go sdk。执行命令如下:
      go get -u github.com/SkyAPM/go2sky-plugins/sql
    • 接入sdk。
      1. 在main.go文件导入sdk包。
        import (
                "github.com/SkyAPM/go2sky"
                "github.com/SkyAPM/go2sky/reporter"
              )
      2. 在main方法里接入sdk。
        r, err := reporter.NewGRPCReporter(100.79.29.107:11800,
        reporter.WithCDS(0),
        reporter.WithAuthentication(Zv***ePqe))
        if err != nil {
            log.Fatalf("new reporter error %v \n", err)
        }
        defer r.Close()
        tracer, err := go2sky.NewTracer(<应用名称.组件名称.环境名称>,
        go2sky.WithReporter(r))
        if err != nil {
            log.Fatalf("create tracer error %v \n", err)
        }
        go2sky.SetGlobalTracer(tracer)

相关文档