Generated banner for AWS Observability
Generated logo for AWS Observability

AWS Observability

AWSOfficialPublished by AWS

  • Skill
  • Tool integration
  • Cloud and DevOps
  • Apache-2.0
  • Low risk
  • Has scripts

From the author

Investigates root causes on the Omni context graph (service dependencies) and Intelligence insights; builds, configures, debugs, tunes AWS observability - operator-symptom questions, detecting Omni vs classic CloudWatch. CloudWatch on a reporting service: fleet health views, Log Insights, metric/composite/anomaly alarms, custom metrics/EMF, dashboards, X-Ray/ADOT tracing, canaries, CloudTrail, Dynamic Instrumentation (live breakpoints), and Application Signals service map. CloudWatch Omni on an existing Space: SQL over logs/traces, PromQL, Omni dashboards, alerts and Slack notifications, programmatic/IaC access (API/SDK/CLI/CFN), driving Omni from a coding agent or skills, AI agent quality from traces - on-demand and online evaluation of live traffic, incl. setting it up, readback, evaluators. For first-time setup - creating an Omni Space, granting access, ingestion, or ADOT instrumentation for Application Signals or Omni - use setting-up-cloudwatch-observability. Not for app logging or threat detection.
— the description by AWS

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides comprehensive domain expertise for AWS observability, covering both classic CloudWatch and CloudWatch Omni. It assists users in investigating service health, querying logs and traces, configuring alerts, and managing dashboards. The skill is designed to help operators distinguish between the two services, navigate their respective APIs, and perform advanced tasks like agent quality evaluation and context graph analysis. It does not handle initial service setup or onboarding, which are managed by a separate dedicated skill.

What it does

  • Investigates root causes using Omni context graphs and intelligence insights.
  • Queries logs, traces, and metrics using SQL, PromQL, and Log Insights.
  • Configures and tunes alerts, dashboards, and alarms for both CloudWatch and Omni.
  • Evaluates AI agent quality through trace scoring and online evaluation.
  • Provides methodology for service-health investigations and dependency analysis.
  • Supports programmatic access via AWS CLI, SDKs, and CloudFormation.

When to use it

  • When you need to investigate a service performance issue or root cause.
  • When you need to write or debug queries for logs, traces, or metrics.
  • When you need to create or update alerts and dashboards in CloudWatch or Omni.
  • When you need to evaluate the quality of an AI agent using trace telemetry.
  • When you need to understand service dependencies and blast radius.

Advantages

  • Provides clear routing between CloudWatch and Omni based on service signals.
  • Offers structured methodologies for complex observability tasks.
  • Includes specific checklists to ensure all required configuration facts are surfaced.
  • Maintains a strict scope to ensure accurate and relevant technical guidance.
  • Supports advanced observability features like dynamic instrumentation and agent evaluation.

Usage examples

“Why is my service experiencing high latency?”
The agent will guide you through a service-health investigation, starting with relevant telemetry signals and checking for configuration issues like timeouts.
“Create an Omni alert for high error rates.”
The agent will provide the necessary authoring guidance, ask for your specific threshold and evaluation period, and confirm the configuration before proceeding.
“How do I query my traces in Omni?”
The agent will explain the SQL syntax for traces.default and provide the necessary fields to identify slow or failed spans.
“Evaluate the quality of my AI agent's recent sessions.”
The agent will help you select an appropriate evaluator and guide you through the process of scoring traces to assess agent performance.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/aws/aws-observability/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip aws-observability.zip -d .agents/skills

Documentation by AWS

AWS Observability

Overview

Domain expertise for AWS observability across metrics, logs, and traces, for two products that share the CloudWatch name but are separate services with separate control planes, data models, and APIs:

CloudWatchCloudWatch Omni
What it isLog groups, metric namespaces, alarms, Log Insights, X-Ray, Application SignalsApplication Observability / Agent Observability. A Space per account per Region is the access boundary over the account's CloudWatch Dataset (OpenTelemetry logs, traces, and metrics); the Dataset is a CloudWatch resource the Space reads, not something the Space contains
Control planeaws cloudwatch, aws logs, aws xray, aws application-signalsaws cloudwatchomni (endpoint prefix cloudwatch-omni, signing name cloudwatch)
QueryLog Insights query language; GetMetricDataSQL over logs.default / traces.default; PromQL over metrics; named views
NotifyAlarms (metric, composite, anomaly)Alerts (SQL/PromQL rule, contributors, OK/WARNING/CRITICAL/NODATA)
TopologyApplication Signals service mapContext graph (GetContextGraph)
AccessIAM onlyDomain → Space → access grants and access profiles (set up in setting-up-cloudwatch-observability)
Only hereDynamic Instrumentation, Synthetics canaries, CloudTrail auditing, EMFAgent-quality evaluation, views, context graph
First-time setupApplication Signals onboarding — ADOT auto-instrumentation, the amazon-cloudwatch-observability add-on, ServiceEvents, CI/CD metadataDomain → Space → grants → telemetry in → plain-ADOT instrumentation
Referencesreferences/cloudwatch/references/cloudwatch-omni/

This skill covers using both products, never setting either one up. Both first-time setup paths above live in setting-up-cloudwatch-observability (same two-folder split); route there rather than describing an onboarding procedure from memory.

Enabling Omni does not replace CloudWatch; log groups, metrics, and alarms keep working, and most customers use both.

Works best with the AWS MCP server — enables running CLI commands, querying CloudWatch, and validating configurations directly. All guidance also works with standard AWS CLI access.

Note: Reference files contain specific runtime versions, quota values, and feature matrices that may change. When precision matters (e.g. deploying to production, choosing a runtime, or checking a quota), confirm values against current AWS documentation rather than relying solely on the values in these files.

Scope guard — is this an observability request?

This skill owns the scope decision for every request routed to it, and this section is its sole home.

If a request is NOT about AWS observability with CloudWatch or CloudWatch Omni (weather, trivia, general chit-chat, non-observability coding), decline it in one sentence: state plainly that it is out of scope, never fabricate an answer, and never claim a false capability limitation (no "no internet access", no "no weather data") — the reason is simply that it is out of scope. Then redirect by naming what this skill does cover: querying CloudWatch and CloudWatch Omni logs, traces, and metrics, building dashboards, configuring alerts, investigating a service, or agent evaluation.

Do not attempt the off-topic task, and do not call a tool or run a query in pursuit of it. Keep it brief: no lecture, no long refusal.

Step 0 — CloudWatch or CloudWatch Omni?

Decide this before routing. The natural wording ("set up an alert for high latency", "build a dashboard", "query my logs") does not say which product the customer means.

  1. The customer names the product — "Omni", "Application Observability", "Agent Observability", a Space, Domain, Dataset, access grant, spaceId, cloudwatch-omni, Omni SQL, PromQL, views, context graph, evaluators, agent evaluation / scoring traces / online or continuous evaluation / gen_ai.evaluation, and OTel span vocabulary (traces.default, logs.default, spans, durationNano, status.code, resource attributes, service.name) → Omni. "Log Insights", "log group", "metric namespace", "CloudWatch alarm", "metric alarm", "composite alarm", "anomaly alarm", "X-Ray", "Application Signals", "canary", "CloudTrail", "Dynamic Instrumentation" → CloudWatch. A "log group" named inside an agent-evaluation request is the online-evaluation data source to verify, not a CloudWatch signal. A bare "alarm" (or "alert") with no other product signal is ambiguous — fall through to rule 3 and probe: a Space → Omni alert (alerts.md); no Space → CloudWatch alarm (cloudwatch/alarms.md). Exception: a "PromQL alarm" is a CloudWatch alarm on OTel metrics (cloudwatch/alarms.md) — "alarm" wins over "PromQL".

  2. Knowledge or how-to question ("what is an Omni alert", "does Omni have an API", "how do alerts differ from alarms") → answer from the reference files directly. Do not probe the account, and do not divert to the other product. Whether a capability exists is a fact about the product, not the account. concepts.md carries the full feature-equivalence matrix. 2a. Authoring / how-to alert request — "create / set up / write an Omni alert that fires when X", "how should I alert on Y" — with no Space or Region supplied and no go-ahead to actually create it, is a HOW-TO request. Deliver the authoring guidance (the alert row of "Must-state checklists" below, then alerts.md) FIRST, from the reference files. Do NOT stall on a Region/Space clarifying question and do NOT fall back to a CloudWatch alarm for a request that explicitly says "Omni alert". Probe the account only once the user supplies a Space/Region or asks you to create it. 2b. A telemetry object is already in the prompt — the user pastes, or the UI passes as context, a span, trace, log record, or query result and asks what it means, what errors it has, or how long it took. This is not a live-data request: do not probe the account, run a query, or ask the user to fetch it again. Read it in place per the "Reading a span or trace you already have" section of query/sql-logs-traces.md and state every item in its must-state list. 2c. A query request whose live result is empty or unreachable ("show me the slowest spans", "which traces failed") is still answered with the methodology — the exact query and the field rules that make it correct (see the must-state callouts in query/sql-logs-traces.md). Zero rows, a wrong-Region Space, or an unreachable endpoint is reported as a finding alongside the query, never as the whole answer.

  3. Request that must act on live data, and the wording is ambiguous (not a Step 0.5 content question, which is answered from the catalog) → probe the target Region first:

    aws cloudwatchomni list-domains
    aws cloudwatchomni list-spaces --region <target-region> --query "items[?region=='<target-region>']"  # account-global; filter to the Region
    • list-spaces is account-global (the --region flag only selects the endpoint), so filter its result to the target Region as shown rather than reading a non-empty list as proof; a Space is one per account per Region. See references/cloudwatch-omni/concepts.md for the full Region-probe rationale.

    • A Domain and a Space in that Region (a non-empty filtered list) → Omni.

    • No Space in that Region (an empty filtered list) → CloudWatch: alarms → cloudwatch/alarms.md, dashboards → cloudwatch/dashboards.md, queries → cloudwatch/log-insights.md, metrics → cloudwatch/metrics.md. If the customer explicitly asked for Omni and has no Space, that is a first-time setup — see step 4.

    • The probe itself errors ("not yet supported", unknown service, endpoint does not resolve) → the CLI/SDK model in use lacks cloudwatchomni. That is not evidence Omni is absent and must not be reported as "Omni is unavailable". The customer's installed AWS CLI/SDK most likely predates the service. If the request carried any Omni signal, give the customer the upgrade command to run (AWS CLI v2 reinstall or brew upgrade awscli; pip install -U boto3 botocore) and have them re-run aws cloudwatchomni list-domains — exact steps in programmatic-access.md. Never run a package-manager upgrade or installer on the host yourself (brew, pip install -U, .pkg/MSI); it mutates the customer's machine beyond the request and can break unrelated tooling — hand over the command and continue with the guidance. Never substitute a CloudWatch or X-Ray command for an Omni request. If the request carried no Omni signal, do not block on the upgrade. When you are already going back to the customer for missing inputs (for example an alert's threshold and period), ask which product they want in that same question: say the Space probe could not run on this CLI, describe both options, and build neither until they answer. When the request is fully specified or says not to ask, proceed on the CloudWatch path (the pre-Omni default) and mention the upgrade only in passing.

    • Still inconclusive → ask the customer.

  4. First-time setup, on EITHER product → STOP and route to the setting-up-cloudwatch-observability skill. This skill covers a service or Space that already reports and holds no onboarding procedure for either product, so there is nothing here to fall back on: not Omni setup (creating a Domain or Space, granting access, ingestion, forwarding, Slack, instrumenting an app or AI agent for a Space) and not CloudWatch setup (onboarding a service to Application Signals — ADOT auto-instrumentation, the amazon-cloudwatch-observability add-on, monitored service, ServiceEvents, CI/CD metadata, the per-platform enablement guides). Any instrumentation / ADOT / collector request is a setup request either way; the setup skill owns the product decision too, so hand the whole request over rather than probing list-spaces yourself. Application Signals once it is reporting — service map, alarms on its metrics, Dynamic Instrumentation debugging — belongs here.

Under-specified alert requests: When an alert or alarm request names what to watch (a symptom or a service) but not the inputs it needs — the threshold value and the evaluation period — ask for those rather than inventing them. Notifications are optional (per alerts.md), so ask for a notification destination only if the user wants to be notified. This holds on both paths (an Omni alert or a CloudWatch alarm).

Under-specified dashboard requests: When a dashboard request names what to show but not which metrics, panels, or layout, ground those against the data and confirm the panel set rather than inventing panels; a dashboard has no threshold, period, or notification. For ANY dashboard authoring/save request, also open dashboards.md and surface its "Facts you MUST surface when building or saving an Omni dashboard" checklist (see "Must-state checklists" below). Which signals or panels a named resource type needs is a Step 0.5 catalog question, not a dashboards-file question.

Step 0.5 — Service-health investigation (routing)

A large share of real questions are phrased as an operator symptom, not as a tool: "is my <service> throttled / slow / erroring / unhealthy," "which of my <service>s are <symptom>," "what's the health of my <service>," "what does <service> depend on and which is broken," "what signals / what should be on a dashboard or view for <service>." These are observability-data questions. Start from the telemetry, and answer with the methodology (the correct signals, aggregation, scoping, and caveats) even when you also pull live numbers and even when no matching resource exists in the account. Telemetry shows the symptom. The cause is often a configured value, so when the question is why something fails, also read the configuration of the resources involved, for example an API Gateway integration timeout, an SQS visibility timeout, or a Lambda timeout or event source mapping. A read-only or "logs only" role can usually still call these Get and Describe APIs. Make the call and report AccessDenied if it happens.

Route by the symptom, then open the reference and surface every applicable item in its "facts you MUST surface" checklist — the checklist is the output contract, and it lives in the reference file, not here:

  • A metric symptom about one AWS service (throttling, latency, error rate, restarts, saturation, "what signals should it get", which signals or panels a named resource type needs on a dashboard or view) → query/promql-metrics.md. Open its "Service-health question — facts you MUST surface" section and surface every applicable item. Dashboard or view wording does not send this to either dashboards file (neither carries the signal facts) nor to rule 3's probe — it is a content question.

  • "What does <service> depend on / what's broken downstream" / blast radius / who is affected / which direction do I walk the graph / what do CALLS, ACCESSES, RUNS_ON mean → context-graph.md. Open its "Dependency / blast-radius question — facts you MUST surface" section and surface every applicable item. A slowness or error symptom phrased in terms of the graph, dependencies, or edge types routes here, not to the metric bullet above.

  • A health VERDICT for a service ("is <service> healthy", "health summary of <service>") or a dependency map WITH ROLES ("what does <service> depend on and what role does each play", "which services call <service>") → service-health.md. Open its "Service health & dependency question — facts you MUST surface" section and surface every applicable item — it owns the combined verdict and the role-labelled dependency map, and defers the per-resource signal catalog and blast radius elsewhere. A bare single-service metric symptom, or a "what signals / panels does <resource type> need" or fleet-health-view ask, routes to the promql-metrics bullet above; a pure blast-radius / direction / edge-semantics question routes to the context-graph bullet.

  • System status, a root-cause / triage symptom, or a past incident — "is anything wrong right now?", "what's wrong with <service>", "why is <service> slow or erroring", "what changed since <time>", "users reported errors between X and Y — which service is the single most likely root cause", or any mention of insights, observations, or anomalies (a cause ask, not a single-signal health verdict or a dependency list) → intelligence.md: start from Omni Intelligence insights and observations, then use the context graph and queries to confirm. Its own "Scope and neighbours" section states which asks it hands back to the bullets above.

  • Individual slow or failing spans / traces ("slowest spans for <service>", "which traces failed") are trace SQL, not a metric aggregate → query/sql-logs-traces.md. Open its "Span Duration" and "Finding failed spans" sections and state every item in their must-state callouts — a request about a service's latency or error rate (an aggregate signal) is the PromQL bullet above instead.

  • A failure being investigated from logs ("is this only failing for X?", "how many errors?", "what is the root cause?") → load the aws-investigation skill and read its references/completeness-and-root-cause.md. Read every page and every scope before counting, and check the root cause against every fact before reporting it.

Must-state checklists — the output contract

Four Omni tasks carry a checklist the answer text must carry, not just the plan. Open the reference and surface every item relevant to the request; the reference holds the per-item detail and is the source of truth, so do not restate it here.

TaskOpenSection to surface
Authoring or advising on an Omni alertalerts.md"Facts you MUST surface when authoring an alert"
Scoring traces, choosing an evaluator, reading stored scores, online/continuous evaluation, evaluation datasets, turning scores into agent changesagent-evaluation.mdevery "tell the user ALL of this" callout
Exploring traces — one trace by id, comparing runs, finding traces by their spans, slowest traces, trace fields, agent sessions, token cost, what changed between two windowsquery/trace-exploration.mdevery "state … in the answer" callout
Authoring, saving, reading back, or debugging an Omni dashboarddashboards.md"Facts you MUST surface when building or saving an Omni dashboard"

Routing — CloudWatch (references/cloudwatch/)

User needAction
Enabling/onboarding a service to Application Signals (auto-instrumentation, the amazon-cloudwatch-observability add-on, monitored service), propagating ServiceEvents git/deployment metadata through CI/CD, or the per-platform × per-language enablement stepsSTOP — this is first-time CloudWatch setup and no reference here covers it. Route to the setting-up-cloudwatch-observability skill
Writing Log Insights queries (pipe-delimited syntax: fields, filter, stats, sort, parse, display)Read log-insights.md. If StartQuery rejects the window as before the log group's creation time, read the same window with FilterLogEvents. See Known issues 11 there
Configuring alarms (metric, composite, anomaly)Read alarms.md. For an Omni alert, see the Omni table
Publishing custom metrics or using EMFRead metrics.md
X-Ray / ADOT tracing behaviour — X-Ray-SDK-vs-ADOT choice, trace and segment structure, annotations vs metadata, sampling rules, collector pipeline config, X-Ray→OTel migration trapsRead tracing.md. Onboarding an un-instrumented service is the setup skill's job (see the first row)
Building CloudWatch dashboards (widget mechanics; which signals a given AWS service needs is Step 0.5)Read dashboards.md
Debugging observability issuesRead troubleshooting.md — starts with the 5 most common fixes
Investigating a failure from logs: whether it affects one entity or the whole fleet, counts/totals/"no evidence of X", or deciding and reporting the root causeLoad the aws-investigation skill — completeness and scope first (references/completeness-and-root-cause.md), then root-cause analysis and the closing checklist
Debugging canary failuresRead synthetics.md — see Common failures table
CloudTrail operational auditingRead cloudtrail.md
Setting up Lambda monitoring with CDKUse alarm-template.ts as a starting point
Creating synthetic canariesRead synthetics.md
Configuring ADOT collectorUse otel-config.yaml as a starting point
Debugging a running service with breakpoints/snapshots — Dynamic Instrumentation (modifies live services and captures live data)Read dynamic-instrumentation.md in full before acting. Confirm with the user before any create/delete, and narrate before significant actions: observation → hypothesis → proposed action → expected result. Source inspection alone identifies hypotheses, not confirmed root causes; keep suspected causes tentative until runtime evidence confirms them.

Routing — CloudWatch Omni (references/cloudwatch-omni/)

Rows that act on live Space data assume Step 0 found a Space. Knowledge questions are answered from the file directly.

User needAction
Concepts. What Omni is, what a Domain / Space / Dataset / grant / profile / view / alert / context graph is, whether a feature is Omni or CloudWatch, where setup startsRead concepts.md
Query logs or traces — SQL (SELECT … FROM logs.default / traces.default / default), field access, schema discovery, slowest / failed spans (durationNano, status.code), TABLESAMPLERead query/sql-logs-traces.md. For slowest or failed spans, state every item in its "Span Duration" / "Finding failed spans" must-state callouts, even when the live result is empty
Explore traces — open one trace by id (where the time went, why it failed, span tree, inputs/outputs, tokens), compare two runs, why a trace scored badly, find traces by their spans (tool calls per trace, a repeated tool, failed tool calls), the slowest traces today, what fields a trace carries, list or walk an agent's sessions (a looping session), token cost, guardrail or deploy questions, what changed (agent, model or downstream)Read query/trace-exploration.md for the trace recipes and agent-span attributes, with query/sql-logs-traces.md for the SQL itself
A span, trace, or log record supplied in the prompt — "I have this span open, what errors are in it", a pasted telemetry objectRead the "Reading a span or trace you already have" section of query/sql-logs-traces.md. Answer from the object's own fields; do not probe, query, or ask the user to fetch it
Query metrics — PromQL, which metric answers which symptom per AWS service, why a metric is missing, gauge vs counterRead query/promql-metrics.md. Metrics are PromQL, never SQL; run them directly through the CloudWatch Prometheus-compatible API (monitoring endpoint) or the CloudWatch MCP server's PromQL tools, not through StartTelemetryQuery
Views — create, manage, or query named reusable SQL (FROM view.<name>)Read query/views.md
Dashboards in Omni — compose, ground panel queries, author panels[], lay out the grid, the API save semantics (an unknown root- or panel-level key, a missing type/layout, or a bad variant is REJECTED at save with a 400 ValidationException; a bad enum VALUE, x+w>60, or an unknown key inside config saves 200 and fails or is ignored at render; validate before save), fix an empty or blank panel, the *OmniDashboard APIsRead dashboards.md
Alerts in Omni — any mention of an Omni alert, CreateAlert / GetAlert / ListAlerts / UpdateAlert / DeleteAlert, a profileId, an alert ARN, or how alerts differ from alarms; create, tune, tag, list, delete; notificationsRead alerts.md. The alert API is real and first-class — do NOT redirect to CloudWatch alarms. For CloudWatch alarms when Omni is not enabled, read cloudwatch/alarms.md
Omni Intelligence — is anything wrong right now, status of a service, why is a service slow or erroring, what caused an incident between two times, root cause, past incidents, insights, observations, anomalies, ListInsights, ListObservationsRead intelligence.md; it links to the context graph for cause-vs-impact questions. ListInsights, ListObservations, and GetContextGraph are the public CloudWatch Omni operations it teaches (aws cloudwatchomni list-insights / list-observations / get-context-graph), with the Intelligence console view as a human-readable cross-check. It consults the intelligence layer, localizes on the context graph, confirms with telemetry, and names one root-cause service. For a health verdict or dependency roles with no single-cause ask, use service-health.md; for pure dependency / blast-radius topology and graph traversal, use context-graph.md
Context graph — why is service X slow or failing, what depends on it, upstream/downstream, which direction to walk, edge types CALLS / ACCESSES / RUNS_ON, blast radius, walking from an insight or anomaly to a root cause, GetContextGraphRead context-graph.md and state every applicable item in its "facts you MUST surface" section
Service health & dependency analysis — is <service> healthy, health summary, what does <service> depend on and what ROLE does each play (caller / callee / datastore / runs-on), which services call itRead service-health.md and state every applicable item in its "facts you MUST surface" section. It grounds the verdict in the context graph + RED/USE metrics + alarm state; for the resource-specific signal catalog and query mechanics it defers to query/promql-metrics.md (§5 per-service catalog), query/sql-logs-traces.md, and alerts.md, for traversal and blast radius to context-graph.md. A "what signals / panels does <resource type> need" or fleet-health-view ask goes to promql-metrics.md, not here
Agent evaluation — score traces on demand, choose an evaluator, read back stored gen_ai.evaluation.* scores ("which evaluators are doing worst", "which online evaluators are unhealthy / underperforming"), build datasets from traces, set up online evaluation, author a custom evaluator, audit whether an agent's traces are flowing, monitor quality, root-cause a quality regression, recommend prompt or tool-description changes from scores, verify a change against a baselineRead agent-evaluation.md and state every applicable item in its "tell the user ALL of this" callouts
Programmatic access — "is there an API or SDK for Omni", calling Omni from code, CI, IaC, or an AI coding agentRead programmatic-access.md. Omni has a real public SigV4 API; never answer that it has none, never substitute the CloudWatch or X-Ray CLI/SDK, and answer without probing for a Space. Endpoint cloudwatch-omni.<region>.api.aws, never .amazonaws.com; client cloudwatchomni, no hyphen. Give both authorization classes: a grant-mediated caller needs a matching grant or is denied; a direct IAM caller with none is not denied by the Space — its own IAM policy decides
AWS DevOps Agent — Investigations reports it is not connected, connecting it to a Space, or running, following, or chatting with an investigationConnecting is first-time setup: route to the setting-up-cloudwatch-observability skill. In the Omni web app an investigation starts from a thread, /investigation new <description>, or a firing alert's Investigate action. Driving the DevOps Agent itself (starting, following, or chatting with investigations from a coding agent) belongs to its dedicated aws-agents-for-devsecops plugin; point there and do not reconstruct that workflow or invent aidevops calls
Who has access to a Space, granting or revoking access, access profiles, creating a Space or Domain, ingestion, forwarding, Slack, Azure, instrumenting an app or AI agent — and, on the CloudWatch side, onboarding a service to Application SignalsRoute to the setting-up-cloudwatch-observability skill. If it is not installed locally, load it with the AWS MCP retrieve_skill tool (skill_name: setting-up-cloudwatch-observability; pass file for a reference it cites)
Spans multiple areasRead the most specific reference first, then consult others as needed

Files

references/cloudwatch/
FileContent
alarms.mdMetric, composite, anomaly detection alarms — configuration, constraints, recommended defaults
log-insights.mdComplete query syntax, commands, functions, known issues, reusable query library
metrics.mdCustom metrics, EMF spec, metric filters, high-resolution, retention
tracing.mdX-Ray → ADOT migration, sampling rules, annotations vs metadata, collector config
dashboards.mdWidget types, cross-account/region, dynamic labels, sharing
troubleshooting.mdError → cause → fix for all observability services
cloudtrail.mdOperational auditing, event types, S3+Athena queries
synthetics.mdCanary runtime/blueprint constraints, VPC networking, common failures
dynamic-instrumentation.mdDynamic Instrumentation debugging loop — breakpoints/probes on live code, snapshot capture + correlation analysis, create/delete gating, snapshot PII handling. Runs via scripts/cloudwatch/di_instrumentation.py + scripts/cloudwatch/di_snapshots.py; details in dynamic-instrumentation/
alarm-template.tsBest-practice CDK Lambda monitoring (alarms + dashboard)
otel-config.yamlADOT collector config for X-Ray traces + CloudWatch EMF metrics

Not here, by design: Application Signals onboarding (the enablement procedure, the ServiceEvents CI/CD chain, the 16 per-platform guides) is first-time setup and lives in setting-up-cloudwatch-observability. Do not reconstruct it here from memory; route.

references/cloudwatch-omni/
FileContent
concepts.mdWhat Omni is and is not; glossary (Domain, Space, Dataset, grant, profile, view, alert, dashboard, context graph, evaluator); Omni-vs-CloudWatch feature-equivalence matrix; how to tell which product the customer means; the setup sequence and where it lives
context-graph.mdThe service/resource topology Omni builds from traces and metrics; GetContextGraph request/response and CLI; reading upstream vs downstream and blast radius; walking from an insight or anomaly hop-by-hop to a root cause, then pivoting to queries
intelligence.mdOmni Intelligence — the insight and observation operations and data model, ListInsights / ListObservations inputs and filters, GetContextGraph with insights, answering status, troubleshooting, root-cause and past-incident questions, the 404-vs-403-vs-local error rule (owned by context-graph.md), cost and performance guardrails, and the empty-result/stale-insight gotchas
service-health.mdService health verdict and dependency analysis — dependency map with roles (caller/callee/datastore/runs-on), the multi-signal HEALTHY/DEGRADED/DOWN verdict (RED for services, USE for resources, alarm state), and how to build the checks from a node's includeMetadata selectors. Ties together context-graph, promql-metrics, sql-logs-traces, and alerts rather than duplicating them — defers traversal and blast radius to context-graph and the resource-specific signal catalog to promql-metrics §5
programmatic-access.mdThe public SigV4 API (cloudwatch-omni endpoint prefix, cloudwatch signing name), how access grants authorize a programmatic caller, CLI/SDK access (and why an unsupported-service error is a client-version issue), CloudFormation/CDK, AI coding agents, and the wrong answers to avoid
query/sql-logs-traces.mdSQL over logs and traces — table addressing, required time range, system fields, field access and quoting, schema discovery, supported operations, functions, common patterns (including durationNano span duration), constraints, TABLESAMPLE
query/promql-metrics.mdMetrics in Omni are PromQL — what is queryable (OTLP, span RED, OTel-enriched vended metrics) and what is not, label conventions, __name__ matcher, rate() on counters, per-AWS-service metric catalog with derived formulas and dimension traps, and running queries and discovering names through the Prometheus-compatible HTTP API and MCP tools
query/trace-exploration.mdWorking with whole traces on traces.default — span fields and AI-agent span attributes (span role, tool name, input/output, token usage), fetching one trace in the right window, time breakdown and self-time, failure analysis with exception events, comparing runs, tying a bad evaluation score to spans, tool-call and repeated-tool patterns, trace-level latency and "today", field discovery for traces, reporting, agent sessions, walking a session, token cost, signals the spans may not record, before/after comparison by layer
query/views.mdNamed SQL views: CreateView / UpdateView / DeleteView / ListViews, FROM view.<name>, naming and definition rules, composition patterns
dashboards.mdOmni dashboards — composition recipes, grounding panel queries, the panels[] body and panel types, visualizations, the 60-column grid, the API save semantics (unknown root/panel keys are rejected 400; unknown keys inside config save 200 and are ignored at render; validate before save), troubleshooting empty/blank panels, the Create/Get/List/Update/DeleteOmniDashboard APIs, archetype templates
alerts.mdOmni alerts — alert vs alarm, evaluation (FIELD_VALUE / COUNT_OF_RESULTS, contributors), states and no-data treatment, notification rules, step-by-step create / update / delete / tag / fetch, and the alert APIs
agent-evaluation.mdAgent-quality evaluation on OTel traces — instrumentation health audit, evaluator selection, on-demand scoring, online evaluation, custom evaluators, datasets from traces, reading back stored gen_ai.evaluation.* scores (retrieval plan + SQL mechanics), and turning scores into changes (monitoring, regressions, evaluator drills, golden datasets, change and re-run). Uses scripts/cloudwatch-omni/evaluate_traces.py and scripts/cloudwatch-omni/capture_dataset_from_traces.py

Files

references/cloudwatch-omni/concepts.md

CloudWatch Omni concepts, and Omni vs. CloudWatch

CloudWatch Omni — the product surface behind CloudWatch Application Observability and CloudWatch Agent Observability — is an AI-native observability experience. A customer investigates their systems by asking questions in conversation, over one correlated store of logs, traces, and metrics, rather than by assembling queries and dashboards by hand.

This file is orientation, not procedure. It exists so an agent can (a) understand Omni vocabulary and (b) tell whether a customer's ask is a CloudWatch Omni feature or a CloudWatch feature — the two coexist in the same account, and choosing wrongly sends the agent confidently down the wrong path. Every procedure lives in a sibling reference, linked from each section and indexed at the end.

Always state these, in any answer drawn from this file:

  • Omni is a separate service alongside CloudWatch, not a replacement for it. Log groups, metric namespaces, alarms, and dashboards keep working unchanged.

  • The setup order is Domain, then Space, then grants, then telemetry in, then instrumentation.

  • Access Profiles are conditional, needed only when async workloads (alerts, integrations) are involved. Name that condition, do not omit it.

  • Say, in these words or close to them, that instrumentation or forwarding started before a Space exists appears to succeed while delivering telemetry nowhere the customer can see. Never describe the setup order without this warning.

  • A knowledge question about Omni is answered directly. Only a request that must act on a Space is gated behind the probe in How to tell which one the customer means.

Contents

  • What CloudWatch Omni is

  • Glossary

  • Omni vs. CloudWatch: feature equivalence

  • How to tell which one the customer means

  • Setting Omni up from nothing

  • Files in this folder

What CloudWatch Omni is

A separate service with its own control plane. CloudWatch answers under aws cloudwatch, aws logs, aws xray, and friends. Omni answers under aws cloudwatchomni: endpoint prefix cloudwatch-omni, regional endpoint cloudwatch-omni.<region>.api.aws, SigV4 signing name cloudwatch. The shared signing name is the only thing the two have in common at the wire level — a CloudWatch or X-Ray client cannot reach a Space, an Omni alert, a view, or an Omni dashboard at any version, and aws cloudwatch <omni-operation> always fails. The service model declares Smithy RPC v2 CBOR (rpcv2Cbor) — calls POST to /service/CloudWatchOmniFrontend/operation/<Op> with CBOR bodies — so a caller wants an AWS SDK or CLI that carries the cloudwatchomni model rather than a hand-rolled client, which would have to reproduce the model's encoding and its unpublished request members. The API, CLI/SDK, CloudFormation, and coding-agent paths are covered once, in programmatic-access.md; do not restate them here.

Its own data model. Everything in Omni hangs off a Space, which is the unit of tenancy, access, and querying. The Space stores no telemetry of its own: it reads the account's CloudWatch Dataset — one per account per Region, arn:aws:cloudwatch:<region>:<account>:dataset/default, a CloudWatch resource that exists whether or not a Space does. Through a Space the customer works with:

  • the Dataset — the correlated store that queries run against, owned by CloudWatch and read by the Space;

  • SQL over logs and traces (logs.default, traces.default) and PromQL over metrics — two query languages, one per signal shape, see query/sql-logs-traces.md and query/promql-metrics.md;

  • views (named, reusable SQL), alerts (SQL or PromQL rules with OK/WARNING/CRITICAL/NODATA states), and dashboards (a JSON panels[] body on a fixed grid);

  • a context graph relating the services, resources, and deployments the telemetry describes;

  • for AI agents, evaluation of traces against evaluators, with stored scores that are themselves queryable.

What it is NOT. Omni does not replace CloudWatch Logs log groups, metric namespaces, metric/composite/anomaly alarms, CloudWatch dashboards, Log Insights, X-Ray, Application Signals, Synthetics, or CloudTrail. All of those keep working exactly as before, are configured through their own APIs, and are documented under ../cloudwatch/. In fact a Space's data is CloudWatch data: telemetry lands in CloudWatch first (through the standard per-signal OTLP endpoints, the usual agents and SDKs); OTel metrics land in the Dataset natively, and a dataset integration copies logs and traces into it. Omni is a second way to work with that data, not a migration away from it.

Two experiences, one platform. Application Observability is APM, distributed tracing, and log analysis for services. Agent Observability is the same platform applied to LLM/AI-agent workloads — GenAI spans, sessions, tool calls, and quality evaluation. They share the Space, the Dataset, the SQL dialect, alerts, and dashboards; they differ in what the telemetry contains and in the agent-specific instrumentation and evaluation references.

Glossary

One or two sentences each. The right-hand column is the reference that owns the topic — read it before acting; do not act from this table alone.

TermWhat it isOwning reference
DomainThe identity boundary. Carries the authorization provider (IAM or IAM Identity Center) and owns the endpoint URL customers reach Omni through — the endpoint derives from the Domain's name, so the name is not cosmetic. One per account, or one shared across an AWS Organization.setting-up-cloudwatch-observability → references/cloudwatch-omni/spaces-and-domains.md, setting-up-cloudwatch-observability → references/cloudwatch-omni/org-domains.md
SpaceThe access boundary over the account's Dataset, in exactly one account and one Region, created under a Domain; it holds no telemetry of its own. At most one per account per Region — separate Regions mean separate Spaces and separate grants.setting-up-cloudwatch-observability → references/cloudwatch-omni/spaces-and-domains.md
DatasetThe account's CloudWatch store that queries run against — one per Region, arn:aws:cloudwatch:<region>:<account>:dataset/default, a CloudWatch resource rather than part of a Space. OTel metrics land in it natively (queried with PromQL); logs and traces reach it when a dataset integration copies the account's log groups — including aws/spans — into it. Creating a Space does not make data appear; a Space only reads what is already there.setting-up-cloudwatch-observability → references/cloudwatch-omni/data-forwarding-and-centralization.md
Access grantAttaches one principal — person or group in Identity Center, IAM role or user, or async workload — to one Space at a permission level (READ, READ_WRITE_DELETE, SPACE_ADMIN, CUSTOM). How people and profiles reach data through Omni: an Identity Center user, console session, or Access Profile with no matching grant can read nothing in the Space, including its creator. A direct IAM caller in the owning account is the exception — with no matching grant it falls through to its own IAM policy (see programmatic-access.md). Grants bound the Omni plane only; source log groups stay readable under their own IAM.setting-up-cloudwatch-observability → references/cloudwatch-omni/access-grants.md
Access ProfileA named boundary for async workloads — an alert running an investigation, an integration calling another system — that act with no person in the loop. Carries no permissions of its own; grants supply them (what the profile may do, and who may assume it). An alert's profileId names one.setting-up-cloudwatch-observability → references/cloudwatch-omni/access-profiles.md
ViewA named, stored SQL query referenced as a table — FROM view.<name> — so common query logic is reused instead of repeated.query/views.md
Alert (vs. alarm)Omni's rule-based notification: a SQL or PromQL rule evaluated on a schedule, with OK/WARNING/CRITICAL/NODATA states, contributors, and notification rules. A completely separate resource from a CloudWatch alarm (metric + threshold, OK/ALARM/INSUFFICIENT_DATA, SNS actions). The word the customer uses is the first clue.alerts.md; CloudWatch: ../cloudwatch/alarms.md
Dashboard (Omni)A JSON panels[] body on a fixed 60-column grid, most panels charting Omni SQL or PromQL. Distinct from a CloudWatch dashboard (a widgets[] body managed by PutDashboard).dashboards.md; CloudWatch: ../cloudwatch/dashboards.md
Context graphThe graph Omni builds from a Space's telemetry relating services, resources, deployments, and the signals about them, used to correlate across logs, traces, and metrics during an investigation. The CloudWatch counterpart in spirit is the Application Signals service map.context-graph.md
Insight / anomalyAn automatically detected deviation in a Space's telemetry, surfaced with the signals that contribute to it, for the customer to investigate conversationally. Distinct from a CloudWatch anomaly-detection alarm, which fits a band to one metric and alarms when it leaves the band.intelligence.md (reading and triaging insights, observations, and anomalies, and which operations are callable); context-graph.md (walking the topology from an insight or anomaly); CloudWatch: ../cloudwatch/alarms.md
Evaluator / evaluationAgent Observability's quality mechanism: an evaluator (built-in, third-party, or custom) scores an agent's traces or sessions; an evaluation runs one or more evaluators either on demand or continuously (online). Scores are stored as telemetry and read back with SQL. Evaluation datasets hold versioned examples built from traces.agent-evaluation.md
Agent ObservabilityThe Omni experience for LLM/AI-agent workloads — GenAI spans from ADOT or OpenInference instrumentation, sessions, tool calls, and evaluation — on the same Space and query surface as Application Observability.setting-up-cloudwatch-observability → references/cloudwatch-omni/omni-agents-instrumentation/omni-agents-instrumentation.md, query/sql-logs-traces.md
IntegrationAn account-level connection to an external system (today: Slack) that Spaces are separately granted permission to use, and that alerts can notify through.setting-up-cloudwatch-observability → references/cloudwatch-omni/slack-integration.md

Omni vs. CloudWatch: feature equivalence

Most customer needs have an answer on both sides. Use this table to name the pair, then use the next section to decide which side the customer is on. A dash means the capability exists on one side only — do not improvise an equivalent on the other.

Customer needCloudWatchCloudWatch OmniHow to tell which they mean
Query logsLogs Insights — pipe syntax over log groups — ../cloudwatch/log-insights.mdSQL over logs.default — query/sql-logs-traces.mdfields/filter/stats, a log group name → CloudWatch. SELECT … FROM logs.default, a Space, @timestamp/@record → Omni.
Query tracesX-Ray / Transaction Search, trace IDs and segments — ../cloudwatch/tracing.mdSQL over traces.default — query/sql-logs-traces.md; enabling Transaction Search (account-level, per Region) is a prerequisite for Omni tracesX-Ray console, get-trace-summaries, sampling rules → CloudWatch. traces.default, spans queried in SQL, a Space → Omni.
Query metricsNamespaces, dimensions, GetMetricData, metric math — ../cloudwatch/metrics.mdPromQL over the Space's metrics — query/promql-metrics.mdNamespace/dimension/statistic vocabulary → CloudWatch. PromQL selectors, labels, rate()/histogram_quantile() → Omni. Metrics have no SQL surface in Omni.
Notify on a conditionAlarm — metric, composite, anomaly detection — ../cloudwatch/alarms.mdAlert — SQL or PromQL rule, profileId, contributors — alerts.md"CloudWatch alarm", "metric alarm", "composite alarm", "anomaly alarm", "PromQL alarm", ALARM/INSUFFICIENT_DATA, an SNS alarm action → CloudWatch. WARNING/CRITICAL/NODATA, profileId, an alert ARN, ListAlerts → Omni. A bare "alarm" or "alert" with no other product signal is ambiguous — probe for a Space (step 3 below). Do not redirect an Omni alert question to alarms.
Reusable saved queriesLogs Insights saved queries — ../cloudwatch/log-insights.mdViews (FROM view.<name>) — query/views.md"View" as a table you query from → Omni.
Dashboardswidgets[] body, PutDashboard, cross-account/Region — ../cloudwatch/dashboards.mdpanels[] body on a 60-column grid — dashboards.mdWidgets, metric-widget JSON, sharing → CloudWatch. Panels, a Space, SQL/PromQL panel queries → Omni.
Instrument / onboard a serviceApplication Signals via ADOT + ServiceEvents — setting-up-cloudwatch-observability → references/cloudwatch/application-signals-onboarding.md, per-platform guides under setting-up-cloudwatch-observability → references/cloudwatch/appsignals-guides/Plain ADOT SDK + a collector, exporting toward a Space — setting-up-cloudwatch-observability → references/cloudwatch-omni/instrumentation/instrumentation.md, setting-up-cloudwatch-observability → references/cloudwatch-omni/instrumentation/collector.md, per-platform setting-up-cloudwatch-observability → references/cloudwatch-omni/instrumentation/<platform>-<language>.mdBoth columns are setup, so both live in setting-up-cloudwatch-observability — route the whole request there and let that skill pick the path. Do NOT probe list-spaces yourself to choose a column: this skill has no onboarding procedure on either side, so the probe cannot change what you do. The columns are here to say which product's answer exists, not to be executed from this skill.
Instrument an AI agent— (X-Ray sees generic spans only)ADOT or OpenInference for LangChain, LangGraph, Strands, CrewAI, OpenAI Agents, Vercel AI — setting-up-cloudwatch-observability → references/cloudwatch-omni/omni-agents-instrumentation/omni-agents-instrumentation.mdAny agent-framework instrumentation request is Omni.
Access controlIAM policies on log groups, metric namespaces, X-Ray — no dedicated referenceAccess grants and Access Profiles on a Space — setting-up-cloudwatch-observability → references/cloudwatch-omni/access-grants.md, setting-up-cloudwatch-observability → references/cloudwatch-omni/access-profiles.md"Who can see the Space", a permission level, a profileId → Omni. An IAM policy on logs:*/cloudwatch:* actions → CloudWatch. A grant does not restrict the source log groups.
Debug a live service with breakpoints / snapshotsDynamic Instrumentation — ../cloudwatch/dynamic-instrumentation.md—CloudWatch only. Route there even if the customer is otherwise an Omni user.
Synthetic monitoring / canariesSynthetics — ../cloudwatch/synthetics.md—CloudWatch only.
Who changed what, when (API auditing)CloudTrail — ../cloudwatch/cloudtrail.md—CloudWatch only.
Service topology / dependenciesApplication Signals service map — enabling it is setting-up-cloudwatch-observability → references/cloudwatch/application-signals-onboarding.mdContext graph — context-graph.md"Service map", SLOs, Application Signals → CloudWatch. "Context graph", entity relationships inside a Space → Omni.
Evaluate an AI agent's quality—Evaluators, on-demand and online evaluation, datasets — agent-evaluation.mdOmni only.
Telemetry from AzureCloudWatch agent on an Azure VM / AKS lands it in CloudWatch — setting-up-cloudwatch-observability → references/cloudwatch-omni/azure-ingestion/azure-ingestion.md…then forwarded into the Dataset — setting-up-cloudwatch-observability → references/cloudwatch-omni/data-forwarding-and-centralization.mdThe same path serves both; Omni adds the forwarding step. Azure resource logs (the VPC-flow-log analogue) are not available either way.
Chat notificationsSNS-driven; no dedicated referenceSlack integration — setting-up-cloudwatch-observability → references/cloudwatch-omni/slack-integration.md"Connect Slack to the Space", an alert notifying slack → Omni.
General "it's broken" troubleshooting../cloudwatch/troubleshooting.mdThe sibling reference for the failing piece (ingestion, forwarding, grants, alerts)Decide the side first, then troubleshoot on that side.

How to tell which one the customer means

Natural wording — "set up an alert for high latency", "build a dashboard", "query my logs" — does not say which product the customer has in mind. Decide in this order.

  1. A knowledge or how-to question needs no probe. "What is an Omni alert", "how do I call Omni from code", "does Omni have an SDK", "what is a Space" — answer from the Omni references directly. Do NOT gate the answer behind an account check and do NOT divert it to CloudWatch. Whether a capability exists in the product is not a fact about this account. programmatic-access.md in particular is never gated.

  2. The customer's own words are the strongest signal. "Omni", "Application Observability", "Agent Observability", a spaceId, a profileId, an alert ARN, logs.default, FROM view. — take that as Omni. "CloudWatch alarm", "metric alarm", "composite alarm", "anomaly alarm", "PromQL alarm", "log group", "namespace", "Log Insights", "X-Ray", "Application Signals", "ServiceEvents", "Dynamic Instrumentation", "canary", "CloudTrail" — take that as CloudWatch. A bare "alarm" or "alert" with no other product signal is ambiguous — go to step 3 and probe.

  3. A request that must ACT on a Space is probed first. Creating, reading, or querying an Omni alert, dashboard, or view, or running Omni SQL against live data, requires a Space to exist in the target Region. Check before acting rather than guess:

    aws cloudwatchomni list-domains
    # list-spaces is account-global; filter to the target Region:
    aws cloudwatchomni list-spaces --region <target-region> --query "items[?region=='<target-region>']"
    • A Domain and a Space in the target Region (a non-empty filtered list) → Omni is enabled; use the Omni column of the table above.

    • No Space in that Region (an empty filtered list) → serve the same need from the CloudWatch column instead (alert → ../cloudwatch/alarms.md, dashboard → ../cloudwatch/dashboards.md, query → ../cloudwatch/log-insights.md, metrics → ../cloudwatch/metrics.md). If the customer explicitly asked for Omni, say the Space does not exist yet and offer the setup sequence rather than silently switching products.

    • The probe itself errors with "not yet supported", an unknown service, or an endpoint that does not resolve → the CLI/SDK in use predates Omni's service model. That is not evidence that Omni is disabled or that no Space exists, and must not be reported as "Omni is unavailable". Fall back to the customer's own signal (step 2) and read programmatic-access.md for the client-version explanation.

  4. Only if all of that is inconclusive, ask — and frame the choice as CloudWatch Omni (a Space, SQL/PromQL, alerts) versus CloudWatch (log groups, metric alarms, Log Insights), not as a difference in interaction style. Having asked, stop and wait. Do not also give the Omni setup sequence in the same reply; that is the same as assuming Omni and wastes the question.

Constraints:

  • A Space is one per account per Region, and list-spaces is account-global (the --region flag only selects the endpoint; the response lists every account Space with its own region), so filter the list to the Region the request targets rather than reading a non-empty list as proof of a Space there. An Omni query against the wrong Region returns an empty result that is easily misread as "no data".

  • If the customer already has a working Space and is asking about queries, dashboards, or alerts, you MUST NOT restart setup — go to the reference for that task.

  • If the request names Application Signals, ServiceEvents, Dynamic Instrumentation, Synthetics, or CloudTrail, you MUST route to the CloudWatch reference. Those are CloudWatch-only and have no Omni equivalent to substitute.

  • You MUST NOT answer an Omni programmatic question with the CloudWatch or X-Ray CLI/SDK, and you MUST NOT conclude from a failed probe that Omni has no API.

Setting Omni up from nothing

How the pieces connect

The relationships matter more than the definitions, because each determines something a customer will otherwise get wrong.

  • A Domain contains Spaces. The Domain decides who can authenticate; the Space decides who reads the account's Dataset in its Region. Deleting a Domain requires deleting its Spaces first.

  • A Space is per account and per Region. This is the single most common source of surprise: access that works in one Region appears broken in another, because a different Region means a different Space and therefore different grants.

  • Grants attach principals to a Space, not to a Domain. Domain-wide administration exists only for organization Domains, and it is ADMIN over every Space in the Domain.

  • An Access Profile sits between a workload and a Space. The workload gets a grant that lets it assume the profile; the profile gets grants describing what it may do. Both are required, and missing either produces a different failure.

  • Telemetry reaches the Dataset, not the Space directly, and it reaches the Dataset by way of CloudWatch. Setting up a Space does not make data appear; ingestion and forwarding are separate steps. The Dataset is CloudWatch's, so both work with no Space in the account — but nothing in Omni can read the result until a Space exists.

Setup order

Working from nothing, the sequence is (first-time setup is owned by the setting-up-cloudwatch-observability skill):

  1. Domain — account-scoped (setting-up-cloudwatch-observability → references/cloudwatch-omni/spaces-and-domains.md) or shared across an AWS Organization (setting-up-cloudwatch-observability → references/cloudwatch-omni/org-domains.md).

  2. Space — under the Domain, in the Region the customer wants. Same two files.

  3. Access grants — so people can reach the Space. setting-up-cloudwatch-observability → references/cloudwatch-omni/access-grants.md.

  4. Telemetry in — two halves, and most customers starting from nothing need both:

    • Getting telemetry into CloudWatch. Deploy a collector so an instrumented workload has somewhere to export to (setting-up-cloudwatch-observability → references/cloudwatch-omni/instrumentation/collector.md and the per-platform collector-*.md). The collector exports straight to CloudWatch's own per-signal OTLP endpoints. For traces, enabling Transaction Search (account-level, per Region) is a prerequisite before they reach Omni.

    • Getting it from CloudWatch into the Dataset. Create the dataset integration so logs and traces (including aws/spans) are copied into the Dataset the Space reads, including any log groups the customer already had (setting-up-cloudwatch-observability → references/cloudwatch-omni/data-forwarding-and-centralization.md). Metrics are not forwarded: customer OTel metrics land in the Dataset natively, and AWS-vended CloudWatch metrics get there through OTel enrichment (aws observabilityadmin start-telemetry-enrichment, then aws cloudwatch start-otel-enrichment).

  5. Instrumentation — so applications and agents emit telemetry in the first place. setting-up-cloudwatch-observability → references/cloudwatch-omni/instrumentation/instrumentation.md for services (per-platform × language files alongside it); setting-up-cloudwatch-observability → references/cloudwatch-omni/omni-agents-instrumentation/omni-agents-instrumentation.md for AI agents.

Two things are conditional rather than sequential:

  • Access Profiles — only when async workloads are involved: an alert (every alert runs under a profileId) or an integration. setting-up-cloudwatch-observability → references/cloudwatch-omni/access-profiles.md.

  • Slack — only if the customer wants alerts or investigations to reach a Slack workspace. setting-up-cloudwatch-observability → references/cloudwatch-omni/slack-integration.md.

  • AWS DevOps Agent — only if the customer wants Omni to hand root-cause investigations to it. The Omni-side connection is setting-up-cloudwatch-observability → references/cloudwatch-omni/devops-agent-integration.md; the agent itself is covered by its dedicated aws-agents-for-devsecops plugin.

Constraints:

  • You MUST establish where in this sequence the customer already is before starting anything. Most requests join partway through, and re-running an earlier step conflicts rather than being idempotent (one Domain per account; one Space per account per Region).

  • You SHOULD create the Space before instrumentation or forwarding. Neither technically requires one — both write to the account's CloudWatch Dataset and succeed without a Space — but nothing in Omni can read the result until a Space exists, so a customer who checks Omni first sees an empty product and reads it as a failure.

  • You SHOULD tell the customer the whole sequence when they are starting from nothing, so a working Space with no telemetry in it does not read as a failure.

  • You MUST NOT confuse Omni instrumentation with Application Signals onboarding. Omni instrumentation is the plain ADOT SDK plus a collector; the amazon-cloudwatch-observability add-on, ServiceEvents, and port 4316 belong to the CloudWatch path under ../cloudwatch/.

Files in this folder

FileOne line
concepts.mdThis file — vocabulary, Omni vs. CloudWatch, how to tell them apart, the setup arc
programmatic-access.mdThe public SigV4 API, CLI/SDK (and why an unsupported-service error is a client-version issue), CloudFormation/CDK, coding-agent skills; never gated by a Space probe
alerts.mdOmni alerts — SQL/PromQL rules, profileId, FIELD_VALUE vs. COUNT_OF_RESULTS, OK/WARNING/CRITICAL/NODATA, notification rules, the alert APIs
dashboards.mdOmni dashboards — the panels[] JSON body, panel types, visualizations, the 60-column grid, archetype templates
context-graph.mdThe context graph — entities and relationships Omni builds from a Space's telemetry
agent-evaluation.mdAgent quality — evaluator discovery, on-demand and online evaluation, custom evaluators, reading stored scores back
query/sql-logs-traces.mdThe SQL dialect over logs.default / traces.default — addressing, system fields, schema discovery, functions, TABLESAMPLE
query/promql-metrics.mdPromQL over a Space's metrics — SQL vs. PromQL decision, discovering names and labels, Omni's @-labels and __name__ matcher, per-service metric catalog, reading an empty result
query/views.mdViews — named SQL referenced as FROM view.<name>; create/update/delete/list, naming rules, composition
setting-up-cloudwatch-observability skillFirst-time setup lives there, not here: Domains and Spaces, org-wide Domains, access grants and Access Profiles, forwarding into the Dataset, Slack, Azure ingestion, and instrumenting applications (setting-up-cloudwatch-observability → references/cloudwatch-omni/instrumentation/) and AI agents (setting-up-cloudwatch-observability → references/cloudwatch-omni/omni-agents-instrumentation/).

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs an MCP server, Needs a command-line tool, Needs Python, Needs Node.js

Security

What our scanner noticed· Low risk

  • Phrasing that asks for actions without confirmation
  • Instructions that use the network
  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
AWS
Publisher
AWS (Official)
Source
aws/agent-toolkit-for-aws · skills/core-skills/aws-observability · commit 0a218f8
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • NOTICE (added by AutoGineer from NOTICE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Also distributed in
aws/agent-toolkit-for-aws

AutoGineer is not affiliated with or endorsed by AWS.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download aws-observability.zip