AWS Distro components

AWS Distro for OpenTelemetry

AWS Distro for OpenTelemetry consists of SDKs, auto-instrumentation agents, collectors and exporters to send data to back-end services. AWS has contributed code to the upstream project for OpenTelemetry components including:

  • OpenTelemetry SDK: We have contributed code upstream to enable the collection of AWS resource-specific metadata, such as container ID, Lambda function version, Task and Pod ID. We have added support to the OpenTelemetry SDKs for the X-Ray trace format and context. OpenTelemetry SDKs now correlate ingested trace and metrics data from AWS X-Ray and CloudWatch.

  • Auto-instrumentation agent: We have added support in the OpenTelemetry Java auto-instrumentation agent for AWS SDK and AWS X-Ray trace data.

  • OpenTelemetry Collector: The collector in our distro is built using the upstream OpenTelemetry collector. We have added AWS-specific exporters to the upstream collector to send data to AWS services including AWS X-Ray, Amazon CloudWatch and Amazon Managed Service for Prometheus. We have also included the OTLP (OpenTelemetry Protocol) exporter.

Refer to our documentation to learn about different exporters supported in AWS Distro for OpenTelemetry.

OpenTelemetry basics

OpenTelemetry defines a specification and implementations to provide application observability. Here are few basic concepts to grasp:

Context propagation

All of OpenTelemetry cross-cutting concerns, such as traces and metrics, share an underlying Context mechanism for storing state and accessing data across the lifespan of a distributed transaction.

Traces

Traces in OpenTelemetry are defined implicitly by their Spans. In particular, a Trace can be thought of as a directed acyclic graph (DAG) of Spans, where the edges between Spans are defined as parent/child relationship.

Temporal relationships between Spans in a single Trace

––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–> time

 [Span A···················································]
   [Span B··············································]
      [Span D··········································]
    [Span C········································]
         [Span E·······]        [Span F··]

Spans

A span represents an operation within a transaction. Each Span encapsulates the following state (not exclusive):

  • An operation name
  • A start and finish timestamp
  • Attributes: A list of key-value pairs.
  • A set of zero or more Events, each of which is itself a tuple (timestamp, name, Attributes).
  • Links to zero or more causally-related Spans (via the SpanContext of those related Spans).

A Span may be linked to zero or more other Spans (defined by SpanContext) that are causally related. Links can point to Spans inside a single Trace or across different Traces

Refer to the OpenTelemetry specification to learn more.