更新时间: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。
操作步骤
- 登录APM控制台。
- 单击左侧
,选择“管理与监管 > 应用性能管理 APM”,进入APM服务页面。
- 在左侧导航栏中选择“应用监控 > 应用列表”。
- 单击“接入应用”,进入接入应用页面。
图1 接入应用
- 选择“区域”和“应用”。单击“创建应用”,弹出“创建应用”弹窗,可以具体操作参见创建应用。
图2 基础信息
- “接入方式”选择Skywalking或者OpenTelemetry。
- “服务端语言”选择Go。
图3 接入方式
- 根据应用类型选择接入对应的接入方式,按照步骤接入。同一个应用下,组件名称不能重复。
- OpenTelemetry
- 使用PuTTY等远程登录工具,登录待安装Agent的Linux操作系统主机,并以root或者service权限执行相关命令执行相关命令。执行安装命令的用户需要和启动应用的用户保持一致。
- 添加 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" )
- 对接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。
- 在main.go文件导入sdk包。
import ( "github.com/SkyAPM/go2sky" "github.com/SkyAPM/go2sky/reporter" )
- 在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)
- 在main.go文件导入sdk包。
- OpenTelemetry
父主题: 开始监控GO应用