Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

511
Views
Seguimiento de AWS X-Ray GoLang Lambda a lambda y visualización en el mapa de servicio

Tengo la API Gateway que llama a la función 1 de Lamdba y que invoca a la función 2 de lambda en Go. Quiero ver estas 2 funciones unidas en el mapa de servicios.

La única forma en que he podido hacer esto hasta ahora es crear un segmento personalizado, por ejemplo, llamado "principal" y crear un subsegmento a partir de este contexto, por ejemplo, llamado "hijo". Luego, use client.InvokeWithContext para invocar la función 2 pasando el contexto del segmento "secundario".

 sess := session.Must(session.NewSession()) client := lambda.New(sess, &aws.Config{Region: aws.String(region)}) xray.Configure(xray.Config{LogLevel: "trace"}) xray.AWS(client.Client) ctx, seg := xray.BeginSegment(context.Background(), "Parent") ctx, subseg := xray.BeginSubsegment(ctx, "Child") result, _ := client.InvokeWithContext(ctx, lambda.InvokeInput{FunctionName: aws.String(functionName), Payload: nil}) subseg.Close(nil) seg.Close(nil)

El problema es que esto crea un seguimiento padre -> hijo en el mapa del servicio, pero también tiene la función 1.

¿Cuál es la mejor manera de unir estas 2 funciones en el mapa de servicios, por favor? Nota. Tengo más de 2 que quiero ver vinculados en el mapa de servicio para mostrarme todo mi flujo a través de lambdas.

Por favor ayuda.

gracias

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No necesita agregar un subsegmento para la llamada "secundaria" a menos que desee agregar anotaciones/metadatos.

La puerta de enlace API agrega un ID de rastreo llamado X-Amzn-Trace-Id al encabezado de las solicitudes entrantes, que X-ray recoge. Si reenvía ese ID de seguimiento en su llamada de lambda 1 a lambda 2, entonces X-ray representará visualmente las llamadas con una flecha de lambda 1 a lambda 2 en la descripción general e incluirá los detalles de seguimiento de lambda 2 al ver los detalles de seguimiento de lambda 1.

Siempre que reenvíe el ID de seguimiento superior a través de la cadena de llamadas, X-ray visualizará correctamente la cadena de llamadas de un servicio a otro con nodos y flechas.

Desde https://aws.amazon.com/xray/faqs/ :

P: ¿Qué es un rastro?

Un trazo de rayos X es un conjunto de puntos de datos que comparten el mismo ID de trazo. Por ejemplo, cuando un cliente realiza una solicitud a su aplicación, se le asigna una identificación de seguimiento única. A medida que la solicitud se abre paso a través de los servicios de su aplicación, los servicios transmiten información sobre la solicitud a X-Ray utilizando esta ID de seguimiento única. La información transmitida por cada servicio de su aplicación a X-Ray es un segmento, y una traza es una colección de segmentos.

https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader

https://docs.aws.amazon.com/xray/latest/devguide/xray-services-apigateway.html

over 4 years ago · Santiago Trujillo Report

0

Esta aplicación repetitiva de Go and Lambda demuestra las trazas de Lambda a Lambda en el mapa del servicio de rayos X:

https://github.com/nzoschke/gofaas/blob/master/worker.go

Mapa de servicio de rayos X resultante

WorkCreateFunction (función 1) es una función de controlador de API Gateway. Llama a WorkerFunction (función 2) a través de una llamada Lambda.InvokeWithContext .

El truco consiste en instrumentar el cliente de la API de Lambda con xray antes de realizar llamadas a la API de Lambda:

 // Lambda is an xray instrumented Lambda client func Lambda() *lambda.Lambda { c := lambda.New(sess) xray.AWS(c.Client) return c } out, err := Lambda().InvokeWithContext(ctx, &lambda.InvokeInput{ FunctionName: aws.String(os.Getenv("WORKER_FUNCTION_NAME")), InvocationType: aws.String("Event"), // async }) if err != nil { return responseEmpty, errors.WithStack(err) }

aws-xray-sdk-go copia el X-Amzn-Trace-Id de la función 1 en la solicitud de Lambda API para la función 2:

https://github.com/aws/aws-xray-sdk-go/blob/master/xray/aws.go#L56

Si esto no funciona, intente actualizar a la última aws-xray-sdk-go .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!