Skip to content

AWS X-Ray and SQS with AWSTraceHeader #173

Closed
@toleabivol

Description

@toleabivol

Hello,

recently it was announced that:

AWS X-Ray integrates with Amazon Simple Queue Service (Amazon SQS) to trace messages that are passed through an Amazon SQS queue.

What I fail to get is a nice map as shown here : https://docs.aws.amazon.com/xray/latest/devguide/xray-services-sqs.html

image

Specifically the arrow between SQS and custom sqs poller.

I have : API GW->LAMBDA->SQS->Custom python script with instrumented aws xray sdk that polls sqs

In the Lambda I have the following code:

...
        trace_entity = xray_recorder.get_trace_entity()
        trace_header = TraceHeader(root=trace_entity.trace_id, parent=trace_entity.id,
                                   sampled=trace_entity.sampled)
        message['MessageSystemAttributes'] = {
            'AWSTraceHeader': {
                'StringValue': trace_header.to_header_str(),
                'DataType': 'String'
            }
        }

        sqs_client.send_message(**message)

and in the sqs poller :

def _yielded_receive(self) -> List[SQSMessage]:
        return self.sqs.receive_messages(MessageAttributeNames=['All'],
                                             AttributeNames=['All'],
                                             VisibilityTimeout=self.VisibilityTimeout,
                                             WaitTimeSeconds=self.WaitTimeSeconds,
                                             MaxNumberOfMessages=self.MaxNumberOfMessages)

for raw_sqs_message in self._yielded_receive():
    trace_header = 
    TraceHeader.from_header_str(raw_sqs_message.attributes.get('AWSTraceHeader'))
    trace_id = trace_header.root
    sampled = trace_header.sampled

    segment = xray_recorder.begin_segment('SQS Receive',
                                                              traceid=trace_id,
                                                              sampling=sampled,
                                                              parent_id=trace_header.parent)

And with this I get in the x-ray map : API GW -> Lambda -> SQS Poller ; and SQS tied to Lambda separately.

image

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions