
Overcoming the OpenTelemetry Data Gap in Amazon CloudWatch Omni
Why did your CloudWatch Omni AI assistant return "Complete Signal Coverage All Empty"? A hands-on look at enriching DynamoDB metrics with OTel standards.
Every AWS developer has been there. You build an asynchronous microservice workflow, write clean business logic, deploy your datastore, and push the service live. In small staging environments, it functions flawlessly. But the second you simulate true concurrent production traffic patterns, the entire ingestion pipeline begins to crawl.
The most frustrating part? Your application framework isn't throwing hard, distinct 500-series crash alerts. The logs look successful, but downstream API gateway layers are reporting massive execution lag.
This week, I set out to test the brand-new Amazon CloudWatch Omni AI assistant to see how it isolates hidden data-tier bottlenecks under heavy multi-tenant concurrent traffic and I stumbled right into a critical architectural friction point regarding open observability telemetry metrics that every cloud engineer needs to know.

What is Amazon CloudWatch Omni Actually?
A collaborative observability environment built directly on open telemetry standards.Unlike the legacy AWS CloudWatch console which relies on engineers manually constructing separate dashboards, running complex log insight queries, and manually mapping cross-resource relationships Omni acts as an automated, conversational DevOps co-pilot.
What It Does
It eliminates the friction of writing manual queries. You can query your logs, infrastructure traces, application metrics, and AI agent token runaways simultaneously by simply asking questions in plain English.
The Architecture
To replicate a realistic enterprise operational workflow under tight budget parameters, I built a modular order lookup microservice directly inside AWS CloudShell:
- The Datastore (InventoryLedger): A DynamoDB table pre-seeded with 1,000 corporate checkout histories distributed across active enterprise clients (CLIENT-4011 through CLIENT-4015). To simulate a production out-of-capacity event safely, I locked the table’s provisioned capacity tightly to 5 Read Capacity Units (RCUs).
- The Fetch Layer (operational_handler_scan.py): A backend function designed to aggregate histories by matching a targeted ClientID.
- The Workload Simulator (traffic_load_simulator.py): A concurrent multi-threaded execution pooling module configured to fire 80 requests simultaneously using Python's ThreadPoolExecutor to test structural data limits.
The Outage: A Silent Bottleneck
The immediate structural issue with the legacy fetch module is an architectural classic: it uses a table-wide
scan() operation with a filter expression instead of an explicit indexed lookup. This forces DynamoDB to read every single record in the table on every single request.When I ran the concurrent load driver, the behavior in the terminal was fascinating. The requests didn't fail out right away. Instead, they took a dramatic performance nose-dive:

As you can see in the terminal log output above, execution speeds started at a rapid 0.0327s but immediately bloated to 1.0384s, 1.0476s, and peaked well over a second.
Why didn’t it throw hard crash exceptions immediately? Because the underlying AWS SDK (
boto3) uses internal retry-and-backoff mechanisms. It intercepted the database throttles under the hood, paused the threads, and silently retried the scans until they cleared. The application stayed technically "alive," but the user experience was ruined by a massive latency surge.The Triage: Navigating the CloudWatch Omni Data Gap
To diagnose this degradation without building manual dashboard metrics, I provisioned an isolated CloudWatch Omni Space to leverage its new conversational AI context engine.
I opened the workspace and issued a natural language prompt directly to the chat bar at the bottom:
“Show me a list of all metrics and anomalies for the InventoryLedger table over the last 15 minutes. Identify why requests are experiencing latency degradation up to 1.4 seconds.”
Omni responded with a stark, extensive technical assessment:

Instead of an immediate answer, the engine returned a “Complete Signal Coverage All Empty” matrix, reporting zero nodes, zero edges, and no matching database query telemetry.
This is the ultimate trap for early adopters of CloudWatch Omni. CloudWatch Omni is an AI-first workspace built natively on OpenTelemetry (OTel) standards. Because my CloudShell script used raw Python calls without the AWS Distro for OpenTelemetry (ADOT) wrapper libraries, the database metrics were trapped in legacy CloudWatch log buckets. Omni had nothing to reason with.
As the assistant outlined in its diagnostic checklist, to make raw tables visible to the AI reasoning engine, you must explicitly enable CloudWatch Metric Streams with OTel enrichment or wrap runtime layers in an active OpenTelemetry collector sidecar.
The Resolution: Deploying the GSI Fast-Lane
Armed with the knowledge that the database layer was completely blind to our topology, I manually bypassed the full-table scan loop by adding a dedicated Global Secondary Index (GSI) named
ClientID-Core-Index to handle the data distribution routes cleanly.1
2
3
4
5
aws dynamodb update-table \
--table-name InventoryLedger \
--attribute-definitions AttributeName=ClientID,AttributeType=S \
--global-secondary-index-updates \
"[{\"Create\": {\"IndexName\": \"ClientID-Core-Index\", \"KeySchema\": [{\"AttributeName\": \"ClientID\", \"KeyType\": \"HASH\"}], \"Projection\": {\"ProjectionType\": \"ALL\"}, \"ProvisionedThroughput\": {\"ReadCapacityUnits\": 5, \"WriteCapacityUnits\": 5}}}]"I waited a brief moment for the partition layout state flag to transition to active, refactored the fetch layer script to use an optimized
table.query() pointing directly to the GSI, and unleashed the concurrent traffic engine again:
The difference was night and day. The script immediately returned
⚡ [QUERY STABILIZED]. By switching from an all-hands scan to a targeted index query, the systemic queue delays flattened out, dropping baseline lookup queries down to safe sub-second levels.Core Engineering Insights
- Beware of Silent Latency: Just because your microservices aren’t throwing exceptions doesn’t mean your architecture is healthy. SDK automatic retries can hide severe structural bugs inside your database queries.
- Mind the OTel Gap: If you plan to adopt new tools like CloudWatch Omni for your AI operations, your observability mapping strategy must include OpenTelemetry standards. Traditional raw metrics are invisible to modern conversational AI triage layers unless enriched at the pipeline level.
All code architectures and script modules used to build this replication lab are fully available in my GitHub repository.
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article