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 defines a specification and implementations to provide application observability. Here are few basic concepts to grasp:
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 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··]
A span represents an operation within a transaction. Each Span encapsulates the following state (not exclusive):
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.