Puede instrumentar su aplicación Go con Jaeger y reportar las trazas a Managed Service for OpenTelemetry. Una vez que se reportan las trazas, Managed Service for OpenTelemetry comienza a monitorear la aplicación. Es posible consultar diversos datos de monitoreo, como la topología de la aplicación, las pilas de llamadas, las transacciones anómalas, las transacciones lentas y el análisis de SQL. Este tema describe cómo usar el SDK de Jaeger y Jaeger Agent para instrumentar y reportar los datos de una aplicación Go.
Para obtener funciones más completas, capacidades avanzadas de rastreo y una mejor experiencia, conecte su aplicación a Managed Service for OpenTelemetry mediante el protocolo OpenTelemetry. Para más información, consulte Preparations.
ARMS proporciona un agente desarrollado internamente y con soporte comercial para aplicaciones Go. Este agente permite una instrumentación no intrusiva y ofrece un conjunto de funciones más amplio y mayor estabilidad. Para más información, consulte Monitor Go applications.
Requisitos previos
Contexto
Método 1: reporte de datos con el SDK de Jaeger
Esta sección toma como ejemplo la herramienta de gestión de dependencias Go Modules. Puede usar el SDK de Jaeger para instrumentar y reportar datos directamente al lado del servidor de Managed Service for OpenTelemetry. Si utiliza otras herramientas de gestión de dependencias, ejecute las operaciones correspondientes.
-
Importe jaeger-client-go.
go get github.com/uber/jaeger-client-go -
Cree un objeto Tracer.
NotaReemplace
<endpoint>con el endpoint correspondiente a su cliente y región. Puede obtener el endpoint desde la página Endpoint Information en la consola de Managed Service for OpenTelemetry. Para más información sobre cómo obtener el endpoint, consulte la sección de requisitos previos de este tema.func NewJaegerTracer(service string) (opentracing.Tracer, io.Closer) { sender := transport.NewHTTPTransport( // Set the gateway. The gateway varies based on the region. "<endpoint>", ) tracer, closer:= jaeger.NewTracer(service, jaeger.NewConstSampler(true), jaeger.NewRemoteReporter(sender)) return tracer, closer } -
Cree un objeto de instancia de span y habilite el paso directo de datos.
-
Si no existe ningún parentSpan:
// Create a span. span := tracer.StartSpan("myspan") // Set a tag. clientSpan.SetTag("mytag", "123") // Pass through the trace ID. tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) ... defer span.Finish() -
Si existe un parentSpan:
// Parse spanCtx from the HTTP/RPC object. spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header)) span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx)) ... defer span.Finish()
Para más información sobre cómo usar el SDK, consulte Go Doc.
-
Método 2: reporte de datos con Jaeger Agent
Inicie Jaeger Agent. Para más información, consulte Install Jaeger Agent.
-
Importe jaeger-client-go.
go get github.com/uber/jaeger-client-go -
Cree un objeto Tracer.
func NewJaegerTracer(serviceName string) (opentracing.Tracer, io.Closer) { sender, _ := jaeger.NewUDPTransport("",0) tracer, closer:= jaeger.NewTracer(serviceName, jaeger.NewConstSampler(true), jaeger.NewRemoteReporter(sender)) return tracer, closer } -
Cree un objeto de instancia de span y habilite el paso directo de datos.
-
Si no existe ningún parentSpan:
// Create a span. span := tracer.StartSpan("myspan") // Set a tag. clientSpan.SetTag("mytag", "123") // Pass through the trace ID. tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) ... defer span.Finish() -
Si existe un parentSpan:
// Parse spanCtx from the HTTP/RPC object. spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header)) span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx)) ... defer span.Finish()
Para más información sobre cómo usar el SDK, consulte Go Doc.
-
Ejemplos
Reporte directo de datos con el SDK de Jaeger
Obtenga el endpoint. Para más información, consulte la sección de requisitos previos de este tema.
-
Ejecute el siguiente comando para descargar el archivo de ejemplo.
wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip -
Abra el archivo examples/settings.go en la carpeta de ejemplo y configure los parámetros tal como indican los comentarios del bloque de código: establezca TracingAnalysisEndpoint con el endpoint que obtuvo en Step 1.
package examples // Required for SDK reporting: set the Tracing Analysis gateway (the value varies by region; obtain it from the configuration view at http://trace.console.alibabacloud.com/) const TracingAnalysisEndpoint = "http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxxxxx_xxxxx/api/traces" // Agent reporting: true (requires a locally started jaeger-agent) SDK reporting: false (default) const AgentSwitch = false // Application names in the Tracing Analysis console const ( CliTracerServiceName = "cliDemo" GrpcServerName = "grpcServer" GrpcClientName = "grpcClient" HttpServerName = "httpServer" HttpClientName = "httpClient" ) Ejecute el comando
go mod tidypara gestionar las dependencias.Ejecute el comando
go run tracingdemopara ejecutar el ejemplo.
Reporte de datos con Jaeger Agent
Obtenga el endpoint. Para más información, consulte la sección de requisitos previos de este tema.
-
Ejecute el siguiente comando para descargar el archivo de ejemplo.
wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip Inicie Jaeger Agent. Para más información, consulte Install Jaeger Agent.
-
Abra el archivo examples/settings.go en la carpeta de ejemplo, configure los parámetros tal como indican los comentarios del bloque de código y cambie el valor de
AgentSwitchatrue.package examples // Required for SDK reporting: set the Tracing Analysis gateway (the value varies by region; obtain it from the configuration view at http://trace.console.alibabacloud.com/) const TracingAnalysisEndpoint = "http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxxxxx_xxxxx/api/traces" // Agent reporting: true (requires a locally started jaeger-agent) SDK reporting: false (default) const AgentSwitch = false // Application names in the Tracing Analysis console const ( CliTracerServiceName = "cliDemo" GrpcServerName = "grpcServer" GrpcClientName = "grpcClient" HttpServerName = "httpServer" HttpClientName = "httpClient" ) Ejecute el comando
go mod tidypara gestionar las dependencias.Ejecute el comando
go run tracingdemopara ejecutar el ejemplo.
Preguntas frecuentes
P: ¿Por qué ocurre el siguiente error durante la ejecución?
2021/06/28 21:11:54 ERROR: error when flushing the buffer: error from collector: 403
R: Este error indica que el endpoint es incorrecto. Corrija el endpoint e inténtelo de nuevo.
