Оперативное извлечение контекста в лямбда-триггере с помощью SQS - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь попробовать открытую трассировку для AWS лямбда в python для сигнала FX https://github.com/signalfx/signalfx-python

это мой поток

lambda1-- > Sqs -> lambda2

Lambda1 создает контекст Span, и я хочу использовать его в Lambda2

Я начал span в lambda1

import opentracing
from opentracing.ext import tags
import signalfx_lambda
@signalfx_lambda.is_traced
def handle_request(event,context):


    aws_services_client = aws_services()

    tracer = opentracing.tracer

    try:
        span_tags = {tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER}
        with tracer.start_span('handle_request', tags=span_tags) as span:
            span.set_tag("test", "Test_Tracing")

            span.set_tag('aws_request_id', context.aws_request_id)
            trace_id = '{0:x}'.format(span.context.trace_id)
            span_id = '{0:x}'.format(span.context.span_id)

            data = {"message":"data"}

            message_attributes = {'TraceContext': {
                'DataType': 'String',
                'StringValue': str(span)
            }}
            with tracer.start_span('send_message_to_sqs', child_of=span) as child_span:

                aws_services_client.send_message_to_sqs(queue_url="https://sqs.us-east-1.amazonaws.com/12345566666/test-distributed-tracing", message=json.dumps(data), message_attributes=message_attributes, child_span=child_span)
            response = {"message":"Received successfully!!",
                        "trace_id":trace_id}
            return {
                "isBase64Encoded": True,
                "statusCode": 200,
                "headers": {},
                "multiValueHeaders": {},
                "body": json.dumps(response,indent=4)
            }
    except Exception as ex:
        template = "An exception of type {0} occurred. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)
        return {
                "isBase64Encoded": True,
                "statusCode": 500,
                "headers": {},
                "multiValueHeaders": {},
                "body": "Failure!! "+message
            }

Я пытаюсь создать контекст span снова в Lambda2. Это то, что я написал. Моя идея состояла в том, чтобы извлечь строку контекста в Lambda 2 и создать новый диапазон.

import opentracing
from opentracing.ext import tags
import signalfx_lambda
from aws_services import aws_services


from jaeger_client.span import Span
@signalfx_lambda.is_traced
def handle_request(event,context):
    # TO-DO

    aws_services_client = aws_services()

    tracer = opentracing.tracer
    span_tags = {tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER}

    print(event)
    try:

            context_string = event['Records'][0]["messageAttributes"]["TraceContext"]["stringValue"]
            spanParent = Span(tracer=tracer,context=context_string, operation_name="handle_request")

            with tracer.start_span('handle_request', tags=span_tags, child_of=spanParent) as span:

                print("Lambda processing done")

                print(span)
                print(type(spanParent))
                print(type(span))

                span.set_tag('aws_request_id', context.aws_request_id)
                trace_id = '{0:x}'.format(span.context.trace_id)
                span_id = '{0:x}'.format(span.context.span_id)
                print(span_id)
                print(span.context)

    except Exception as ex:
        print(ex)

Я вижу, что lambda2 создает новый промежуток, но не является потомком первого. Я застрял здесь.

...