otelsqs

package
v1.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 12, 2024 License: MIT Imports: 6 Imported by: 3

Documentation

Overview

Package otelsqs implements carrier for SQS.

Usage

Use `SqsCarrierAttributes.Extract()` to extract trace context from SQS message.

import (
    "github.com/aws/aws-sdk-go-v2/service/sqs/types"
    "github.com/udhos/opentelemetry-trace-sqs/otelsqs"
)

// handleSQSMessage is an example function that uses SqsCarrierAttributes.Extract to
// extract tracing context from inbound SQS message.
func handleSQSMessage(app *application, inboundSqsMessage types.Message) {
    // Extract the tracing context from a received SQS message
    ctx := otelsqs.NewCarrier().Extract(context.Background(), inboundSqsMessage.MessageAttributes)

    // Use the trace context as usual, for instance, starting a new span
    ctxNew, span := app.tracer.Start(ctx, "handleSQSMessage")
    defer span.End()

    // One could log the traceID
    log.Printf("handleSQSMessage: traceID=%s", span.SpanContext().TraceID().String())

    // Now handle the SQS message

Use `SqsCarrierAttributes.Inject()` to inject trace context into SQS message before sending it.

import (
    "github.com/aws/aws-sdk-go-v2/service/sqs/types"
    "github.com/udhos/opentelemetry-trace-sqs/otelsqs"
)

// sendSQSMessage is an example function that uses SqsCarrierAttributes.Inject to
// propagate tracing context into outgoing SQS message.
// 'ctx' holds current tracing context.
func sendSQSMessage(ctx context.Context, app *application, outboundSqsMessage types.Message) {
    // You have a trace context in 'ctx' that you need to propagate into SQS message 'outboundSqsMessage'
    ctxNew, span := app.tracer.Start(ctx, "sendSQSMessage")
    defer span.End()

    // Inject the tracing context
    otelsqs.NewCarrier().Inject(ctxNew, outboundSqsMessage.MessageAttributes)

    // Now you can send the SQS message

Index

Constants

This section is empty.

Variables

View Source
var ErrMaxAttrLimit = fmt.Errorf("max attribute limit reached") // ErrMaxAttrLimit signals max attribute limit reached.

Functions

func ContextFromSqsMessageAttributes deprecated

func ContextFromSqsMessageAttributes(sqsMessage *types.Message) context.Context

ContextFromSqsMessageAttributes gets a tracing context from SQS message attributes. `sqsMessage` is incoming, received SQS message (possibly) carring trace information in the message attributes. Use ContextFromSqsMessageAttributes right after receiving an SQS message.

Deprecated: Use c := NewCarrier() followed by c.Extract().

func InjectIntoSqsMessageAttributes deprecated

func InjectIntoSqsMessageAttributes(ctx context.Context, sqsMessage *types.Message)

InjectIntoSqsMessageAttributes inserts tracing from context into the SQS message attributes. `ctx` holds current context with trace information. `sqsMessage` is outgoing SQS message that will be set to carry trace information. Use InjectIntoSqsMessageAttributes right before sending out the SQS message.

Deprecated: Use c := NewCarrier() followed by c.Inject().

func SetTextMapPropagator

func SetTextMapPropagator(propagator propagation.TextMapPropagator)

SetTextMapPropagator optionally replaces the default propagator (B3 with single header). Please notice that SQS only supports up to 10 attributes, then be careful when picking another propagator that might consume multiple attributes.

Types

type SqsCarrierAttributes

type SqsCarrierAttributes struct {
	// contains filtered or unexported fields
}

SqsCarrierAttributes is a message attribute carrier for SQS. https://pkg.go.dev/go.opentelemetry.io/otel/propagation#TextMapCarrier

func NewCarrier added in v1.0.0

func NewCarrier() *SqsCarrierAttributes

NewCarrier creates a carrier for SQS.

func NewCarrierAttributes deprecated

func NewCarrierAttributes(sqsMessage *types.Message) *SqsCarrierAttributes

NewCarrierAttributes creates a carrier attached to an SQS message.

Deprecated: Use NewCarrier().

func (*SqsCarrierAttributes) Extract added in v1.0.0

func (c *SqsCarrierAttributes) Extract(ctx context.Context, messageAttributes map[string]types.MessageAttributeValue) context.Context

Extract gets a tracing context from SQS message attributes. `messageAttributes` should point to incoming SQS message MessageAttributes (possibly) carring trace information. If `messageAttributes` is nil, ctx is returned unchanged. Use Extract right after receiving an SQS message.

func (*SqsCarrierAttributes) Get

func (c *SqsCarrierAttributes) Get(key string) string

Get returns the value for the key.

func (*SqsCarrierAttributes) Inject added in v1.0.0

func (c *SqsCarrierAttributes) Inject(ctx context.Context, messageAttributes map[string]types.MessageAttributeValue) error

Inject inserts tracing from context into the SQS message attributes. `ctx` holds current context with trace information. `messageAttributes` should point to outgoing SQS message MessageAttributes which will carry the trace information. `messageAttributes` must not be nil. If `messageAttributes` holds 10 or more items, Inject will do nothing and return ErrMaxAttrLimit, since SQS refuses messages with more than 10 attributes. Use Inject right before sending out the SQS message.

func (*SqsCarrierAttributes) Keys

func (c *SqsCarrierAttributes) Keys() []string

Keys lists the keys in the carrier.

func (*SqsCarrierAttributes) Set

func (c *SqsCarrierAttributes) Set(key, value string)

Set stores a key-value pair.

func (*SqsCarrierAttributes) WithPropagator added in v1.0.2

WithPropagator sets propagator for carrier. If unspecified, carrier uses default propagator defined with SetTextMapPropagator.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL