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
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
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 .