Я пытаюсь попробовать открытую трассировку для 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 создает новый промежуток, но не является потомком первого. Я застрял здесь.