Generated banner for Setting Up Cloudwatch Observability
Generated logo for Setting Up Cloudwatch Observability

Setting Up Cloudwatch Observability

AWSOfficialPublished by AWS

  • Skill
  • Tool integration
  • Cloud and DevOps
  • Apache-2.0
  • Medium risk

From the author

Sets up CloudWatch observability for the first time - Omni (CloudWatch Application Observability) and classic CloudWatch. Omni: creating a Space or Domain; access grants (who has access, at what level), access profiles bounding alerts, integrations, agents; instrumenting an app or AI agent with the plain ADOT SDK so traces reach Omni (Python/Node/Java/.NET on EC2/ECS/EKS/Lambda), incl. no-image-rebuild, CoreCLR vars; ingesting Azure or Google Cloud telemetry via the CloudWatch agent (VM/AKS, GCE/GKE); connecting Slack or the AWS DevOps Agent to a Space; whether GitHub or a custom MCP tool server (HTTP/stdio) can connect. CloudWatch: onboarding a service to Application Signals: ADOT auto-instrumentation, amazon-cloudwatch-observability add-on, monitored service, ServiceEvents, CI/CD metadata, Terraform. For using what is set up - queries, dashboards, alarms, Omni alerts, X-Ray, synthetics, Dynamic Instrumentation, AI agent evaluation, detecting Omni vs classic - use aws-observability.
— the description by AWS

AutoGineer summary

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

This skill provides the end-to-end setup procedures for two distinct CloudWatch observability products: CloudWatch Application Observability (Omni) and classic CloudWatch Application Signals. It acts as a central routing hub, helping users identify the correct product based on their requirements and guiding them through the specific onboarding, instrumentation, and configuration steps for each. It covers resource creation, access management, and telemetry ingestion, while clearly delineating the boundaries between the two products to ensure correct implementation.

What it does

  • Routes setup requests to the correct product path based on user intent and environment.
  • Guides users through CloudWatch Omni Domain and Space creation, access grants, and profile configuration.
  • Provides instructions for instrumenting applications and AI agents with the ADOT SDK for Omni.
  • Details the onboarding process for classic CloudWatch Application Signals, including auto-instrumentation and add-ons.
  • Supports telemetry ingestion configuration for Azure and Google Cloud environments.
  • Manages integration setups for Slack and the AWS DevOps Agent.

When to use it

  • When you need to set up CloudWatch Application Observability (Omni) for the first time.
  • When you need to onboard a service to classic CloudWatch Application Signals.
  • When you are unsure which CloudWatch observability product is appropriate for your workload.
  • When you need to configure access grants, profiles, or integrations for an existing Space.
  • When you need to instrument an application or AI agent to export telemetry to CloudWatch.

Advantages

  • Prevents configuration conflicts by enforcing mutually exclusive setup paths for Omni and Application Signals.
  • Provides a structured, step-by-step sequence for complex resource hierarchies like Domains and Spaces.
  • Clarifies the distinction between setup tasks and day-to-day operational tasks.
  • Ensures correct principal resolution and permission scoping for access grants and profiles.

Usage examples

“How do I start setting up CloudWatch Application Observability?”
The agent will explain the setup order (Domain, Space, grants, telemetry) and direct you to the app-basics reference to begin.
“I need to onboard my EKS service to Application Signals.”
The agent will route you to the Application Signals onboarding guide and the specific EKS-language instrumentation steps.
“How do I give a team access to my CloudWatch Omni Space?”
The agent will guide you through resolving the principal and using the access-grants reference to configure the appropriate permission level.
“Can I connect my GitHub repository to CloudWatch Omni?”
The agent will clarify that Omni does not support GitHub integration and stop the setup process.

Install

  1. Download the skill as a ZIP:

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

    mkdir -p .agents/skills && unzip setting-up-cloudwatch-observability.zip -d .agents/skills

Documentation by AWS

Setting Up CloudWatch Observability

Scope: First-time CloudWatch observability setup, for both products — a CloudWatch Application Observability (Omni) Space from creation through first traces flowing, and onboarding a service to classic CloudWatch Application Signals. For using what is already set up (queries, dashboards, alarms, Omni alerts, evaluations, live debugging), route to aws-observability.

Two products, two reference folders

This skill owns setup for two products that share the CloudWatch name but are separate services. The folder a reference lives in is the signal for which product it belongs to — the same convention aws-observability uses:

FolderProductWhat setup means there
references/cloudwatch-omni/CloudWatch Omni (Application / Agent Observability)Domain → Space → grants → telemetry in → plain ADOT SDK instrumentation. No add-on, no CloudWatch Agent application_signals config, no port 4316.
references/cloudwatch/Classic CloudWatchOnboarding a service to Application Signals: ADOT auto-instrumentation, the amazon-cloudwatch-observability EKS add-on, the CloudWatch Agent, monitored service, ServiceEvents, CI/CD git/deployment metadata, port 4316.

The two instrumentation paths are mutually exclusive on a given workload — the Omni path explicitly forbids the Application Signals env vars and the add-on, and vice versa. Decide the product first (Routing Rules 1–4 below), then stay inside that folder. Enabling one does not replace the other; an account may run both, on different services.

Works best with the AWS MCP server — enables running AWS CLI commands directly. All guidance also works with standard AWS CLI access (aws cloudwatchomni ... on the Omni path; aws eks, aws iam, and aws application-signals on the Application Signals path).

Concepts — Omni (references/cloudwatch-omni/)

These are Omni's resources. None of them exist on the Application Signals path — that one has no Domain, Space, grant, or Dataset; its unit is a monitored service, and access is plain IAM. Do not ask an Application Signals onboarding customer for a spaceId.

TermWhat it is
DomainThe identity boundary. Carries the authorization provider (IAM or Identity Center) and owns the endpoint URL customers reach Omni through. One per account, or one shared across an AWS Organization.
SpaceA workspace holding telemetry, in exactly one account and one Region. Created under a Domain. At most one per account per Region. Region rule: under an IAM-only Domain a Space may sit in a Region other than the Domain's; under an account-scoped Identity Center Domain the Space must be in the Domain's own Region; under an org-scoped Identity Center Domain it must be in a Region the instance is replicated to.
Access grantAttaches a principal — person, group, IAM identity, or async workload — to one Space at a permission level. The only way anyone reaches data through a Space — it does not restrict the source CloudWatch log groups, which stay readable under their own IAM.
Access ProfileA named boundary for async workloads (alerts, integrations, agents) that act without a person in the loop. It is only a named container: create-access-profile takes a Space, a name, and a description and nothing else — no permission, action, or scope input. It does something only once two separate sets of grants exist (what the profile may do; which workloads may assume it) and a workload names it.
DatasetWhat queries run against. Telemetry arrives through the CloudWatch OTLP endpoints, or by forwarding what is already in CloudWatch log groups.

Omni setup order from nothing: Domain → Space → grants → telemetry in → instrumentation. (The Application Signals equivalent is much shorter and has no prerequisite resources — add-on/agent, IAM, then the per-platform enablement change; see references/cloudwatch/application-signals-onboarding.md.) "Telemetry in" (a collector exporting to CloudWatch's OTLP endpoints, plus dataset forwarding for what is already in CloudWatch) is its own step, separate from instrumenting the workloads. Access Profiles are conditional, not a step in the sequence — only when async workloads (alerts, integrations, agents) are involved. Whenever you give this sequence, also say that instrumentation or forwarding started before a Space exists appears to succeed while delivering telemetry nowhere the customer can see — a customer who checks Omni first reads a working, empty Space as a failure. For the concept relationships and the full arc, see references/cloudwatch-omni/app-basics.md.

This is a routing skill. Classify the user's setup request and delegate to the correct reference. Omni references live under references/cloudwatch-omni/; classic-CloudWatch (Application Signals) references live under references/cloudwatch/.

User intentReference
Onboard a service to Application Signals (auto-instrumentation, the amazon-cloudwatch-observability EKS add-on, CloudWatch Agent IAM for Application Signals, monitored service, reporting telemetry to Application Signals, ServiceEvents, the two onboarding tiers)references/cloudwatch/application-signals-onboarding.md
Propagate ServiceEvents git/deployment metadata through CI/CD (the 5 OTEL_AWS_SERVICE_EVENTS_* vars, per-provider patterns)references/cloudwatch/application-signals-cicd-metadata.md
Per-platform × per-language Application Signals enablement steps once platform and language are knownThe matching references/cloudwatch/appsignals-guides/<platform>-<language>.md (e.g. references/cloudwatch/appsignals-guides/eks-python.md)
Turn on Dynamic Instrumentation for a service at onboarding time (the OTEL_AWS_DYNAMIC_INSTRUMENTATION_* vars and their IAM)references/cloudwatch/application-signals-onboarding.md (Step 5d). Using it to debug is aws-observability
Understand what Omni is, its concepts, or where to startreferences/cloudwatch-omni/app-basics.md
Instrument an AI agent (ADOT, OpenInference, framework detection, trace verification), or deploy an agent to production and get traces flowing to CloudWatch — env vars per platform (AgentCore, Lambda, or other platforms such as ECS/EC2/EKS), routing spans to a custom trace log group, IAM permissions needed, how the export authenticates (AWS credentials, no API token), ADOT version requirementsreferences/cloudwatch-omni/omni-agents-instrumentation/omni-agents-instrumentation.md (§ Production deployment for the deploy case)
Per-framework OpenInference guide (LangChain, LangGraph, Strands, CrewAI, OpenAI Agents, Vercel AI) once the agent framework is knownreferences/cloudwatch-omni/omni-agents-instrumentation/openinference-framework-guide.md, then the matching references/cloudwatch-omni/omni-agents-instrumentation/instrument-<framework>.md
Instrument an application (ADOT SDK on EC2/ECS/EKS/Lambda — Python, Node.js, Java, .NET)references/cloudwatch-omni/instrumentation/instrumentation.md
Emit a custom application or agent metric so it is queryable in Omni (why OTLP and not PutMetricData/EMF)references/cloudwatch-omni/instrumentation/instrumentation.md (§ Custom metrics)
Create an account-scoped Space or Domainreferences/cloudwatch-omni/spaces-and-domains.md
Whether a Space can be in a different Region from its Domainreferences/cloudwatch-omni/spaces-and-domains.md (Prerequisites → Region rules)
The AgentCore evaluation role that create-space asks for — what it is, whether to create onereferences/cloudwatch-omni/spaces-and-domains.md (Step 3 → Also resolve the AgentCore evaluation role)
Let Omni run Bedrock models for a Space (Agent Playground, evaluations run from Omni), or a Bedrock AccessDeniedException from those featuresreferences/cloudwatch-omni/spaces-and-domains.md (Step 3 → Optional: let Omni invoke Bedrock models)
A Space that was created successfully but returns an authorization error when usedreferences/cloudwatch-omni/spaces-and-domains.md (Troubleshooting → If the Space was created but cannot be used) — a space access role trust-policy problem, not a grant problem
Create a Domain shared across an AWS Organizationreferences/cloudwatch-omni/org-domains.md
Configure access grants for people or IAM identities or alertsreferences/cloudwatch-omni/access-grants.md
An aws cloudwatchomni command reporting that the service is not supported, or a request to repair the customer's CLI or SDK so Omni commands workNot a setup task — a local client-version problem. STOP and route to aws-observability
A programmatic caller denied on a Space it already had working — a CI role, SDK client, CloudFormation role, coding agent, or a workload under an Access Profilereferences/cloudwatch-omni/access-grants.md (Grants, IAM, and Access Profiles), and aws-observability for the API-side view
Bound an alert, integration, or agent with an Access Profilereferences/cloudwatch-omni/access-profiles.md
Deploy an OTel Collector so an instrumented app has somewhere to export to (EC2/ECS/EKS) — it exports to CloudWatch's own per-signal OTLP endpointsreferences/cloudwatch-omni/instrumentation/collector.md
An OTLP collector already running (a CloudWatch Agent with an opentelemetry section or OTLP on 4317/4318, or otelcol-contrib) whose telemetry does not arrive, in whole or for one signal such as tracesreferences/cloudwatch-omni/instrumentation/collector.md (Verify), then the platform collector guide it links for the troubleshooting table
Enable Transaction Search so traces reach a Space (spans land in aws/spans only once it is on — per account, per Region)references/cloudwatch-omni/instrumentation/collector.md (Step 1)
Forward telemetry already in CloudWatch into the Datasetreferences/cloudwatch-omni/data-forwarding-and-centralization.md
Send your application's own telemetry from Azure (the logs/metrics/traces your service emits, via the CloudWatch agent on an Azure VM/AKS)references/cloudwatch-omni/azure-ingestion/azure-ingestion.md (intent triage), then references/cloudwatch-omni/azure-ingestion/custom-telemetry.md (the CloudWatch-agent-on-VM/AKS procedure)
Send your application's own telemetry from Google Cloud (the logs/metrics/traces your service emits, via the CloudWatch agent on a GCE instance/GKE cluster)references/cloudwatch-omni/gcp-ingestion/gcp-ingestion.md (intent triage), then references/cloudwatch-omni/gcp-ingestion/custom-telemetry.md (the CloudWatch-agent-on-GCE/GKE procedure)
Connect Slack to a Space for the first timereferences/cloudwatch-omni/slack-integration.md
Connect the AWS DevOps Agent to a Space (Settings → Integrations → AWS DevOps Agent), an empty agent-space picker, or Investigations reporting the AWS DevOps Agent is not connectedreferences/cloudwatch-omni/devops-agent-integration.md. Creating the DevOps Agent space itself and running or chatting with investigations belong to the aws-agents-for-devsecops plugin
Whether a custom MCP tool server can be registered (Omni has none)references/cloudwatch-omni/custom-mcp-integration.md
Enable or configure CloudWatch Omni Intelligence for a Space — attach an optional customer-managed KMS key (put-intelligence-configuration), connect an intelligence integration (AWS_INTEGRATION, AWS_CONFIG_SLREC, EXTERNAL_AGENT), check current config, or troubleshoot enablement (404, AccessDenied, empty graph)references/cloudwatch-omni/intelligence-setup.md

Routing Rules

  1. If the user is asking what Omni is, what a Domain or Space or grant means, where to start, or the end-to-end order of steps from nothing — rather than asking to perform one setup step — route to references/cloudwatch-omni/app-basics.md and answer the sequence from its "Setup order" section (not from a single procedure file such as collector.md, which covers one step). It also carries the boundary against aws-observability. A question about one concept's rules — a Space's Region relative to its Domain, the roles create-space needs — belongs to the procedure file for that concept (spaces-and-domains.md), which the routing table names.

  2. If the request is about instrumenting an AI agent project (adding OTel to a framework such as LangChain, LangGraph, Strands, CrewAI, OpenAI Agents, or Vercel AI), it is Omni — route to references/cloudwatch-omni/omni-agents-instrumentation/omni-agents-instrumentation.md. There is no Application Signals path for an agent framework.

  3. If the request is about instrumenting a general application (a service on EC2, ECS, EKS, or Lambda in Python, Node.js, Java, or .NET — not an AI-agent framework), decide the product before opening any procedure file — the two paths are mutually exclusive on a workload:

    • Names Application Signals, ServiceEvents, a "monitored service", the service map, the amazon-cloudwatch-observability add-on, the CloudWatch Agent's application_signals configuration, or port 4316 → the CloudWatch path: references/cloudwatch/application-signals-onboarding.md, then the matching references/cloudwatch/appsignals-guides/<platform>-<language>.md.

    • Names Omni, Application Observability, a Space, a Domain, or a Dataset — or explicitly rules Application Signals out ("plain OTel", "no add-on", "no agent sidecar") → the Omni path: references/cloudwatch-omni/instrumentation/instrumentation.md.

    • Naming the CloudWatch Agent alone decides nothing: it is also the Omni path's default collector. An agent with an opentelemetry section or OTLP receivers on 4317/4318 is the Omni collector, and its delivery problems belong to rule 6.

    • Names neither → rule 4.

  4. If an instrumentation, ADOT, or collector request names neither product (neither Omni or a Space, nor Application Signals, ServiceEvents, or the amazon-cloudwatch-observability add-on), probe for a Space in the target Region before choosing. list-spaces is account-global: the --region flag only selects the endpoint, and the response lists every Space in the account, each with its own region, so filter to the target Region rather than trusting a non-empty list: aws cloudwatchomni list-spaces --region <region> --query "items[?region=='<region>']". A Space in that Region → the Omni path, references/cloudwatch-omni/instrumentation/instrumentation.md. An empty filtered list → the customer has not adopted Omni in that Region, so Application Signals is the live product for them: references/cloudwatch/application-signals-onboarding.md. Either way the request stays in this skill — the probe picks the folder, not the skill. If the probe errors with an unknown service, that is the CLI model, not evidence Omni is absent — fall back to the customer's wording and ask only if still inconclusive.

  5. If the request is about Space/Domain creation or configuration, route to the matching setup reference. An authorization error that appears the moment a just-created Space is used is part of this — it is a space access role trust-policy problem (create-space never verifies the role can be assumed), so route to references/cloudwatch-omni/spaces-and-domains.md → "If the Space was created but cannot be used", not to the access-grants reference.

  6. If the user asks about getting telemetry to a destination — telemetry not yet reaching CloudWatch — deploy an OTel Collector on EC2/ECS/EKS so an instrumented workload has somewhere to send OTLP, and wire the app's OTEL_EXPORTER_OTLP_ENDPOINT to it: references/cloudwatch-omni/instrumentation/collector.md. The same file covers an OTLP collector that is already deployed but whose telemetry does not arrive, in whole or for one signal (its Verify section and the platform guide's troubleshooting table). The collector exports straight to CloudWatch's own per-signal OTLP endpoints. If instead the telemetry is already in CloudWatch log groups and needs forwarding into the Dataset, route to references/cloudwatch-omni/data-forwarding-and-centralization.md. Both the collector's OTLP export and CloudWatch's OTLP endpoints authenticate with SigV4 (AWS credentials), including OIDC-federated credentials for a workload outside AWS (see references/cloudwatch-omni/azure-ingestion/custom-telemetry.md or references/cloudwatch-omni/gcp-ingestion/custom-telemetry.md). A purely token-based ingestion path for a sender that cannot obtain AWS credentials at all is not covered by these skills; do not improvise one, and say so plainly.

  7. If the request is about getting Azure or Google Cloud telemetry into CloudWatch, route by cloud — references/cloudwatch-omni/azure-ingestion/azure-ingestion.md for Azure, references/cloudwatch-omni/gcp-ingestion/gcp-ingestion.md for Google Cloud — and decide by intent. If the customer wants the telemetry their own application produces (the logs/metrics/traces from their code), that is supported via the CloudWatch agent on an Azure VM or AKS cluster, or on a GCE instance or GKE cluster — follow the reference. If they want telemetry their cloud's resources emit on their own (the equivalent of AWS VPC flow logs / Route 53 logs: Azure resource and platform logs, or Google Cloud Audit Logs), that is not supported — say so and do not attempt a setup. If the request names no cloud, ask which one before giving any steps.

  8. If the user asks to connect, enable, or authorize Slack for a Space for the first time (including granting the operator permission to use it), route to references/cloudwatch-omni/slack-integration.md. Using Slack after it is connected (posting findings to a channel, mentioning the assistant, or searching Slack) happens in Slack and the console and is not covered by these skills; Slack as an alert notification target is covered by aws-observability's Omni alerts reference.

  9. Application Signals, ServiceEvents, and Dynamic Instrumentation are CloudWatch features, and they split by setup versus use — not by skill. Enabling them on a service that does not have them yet is setup and belongs here, under references/cloudwatch/: Application Signals onboarding and ServiceEvents in references/cloudwatch/application-signals-onboarding.md (with the CI/CD metadata chain in references/cloudwatch/application-signals-cicd-metadata.md), and switching Dynamic Instrumentation on at instrumentation time in that same file's Step 5d. They must never appear in an Omni instrumentation change — for that they remain out of scope, and rule 3 is how you tell the two paths apart. Using them once the service reports — reading the service map, alarming on Application Signals metrics, or placing breakpoints and reading snapshots with Dynamic Instrumentation — is day-to-day work: STOP and route to aws-observability.

  10. If the user already has a working Space, or a service already reporting to Application Signals, and is asking about queries/dashboards/alarms/alerts/investigation, STOP and route to aws-observability.

  11. If the user asks to register their own MCP tool server, connect a custom MCP server, or set up MCP authentication: CloudWatch Omni does not let customers add a custom MCP server. There is no console screen for it and the integration type is not enabled for customer use, so the attempt is refused. Say so plainly and stop; do not describe a setup flow, and do not offer a substitute. See references/cloudwatch-omni/custom-mcp-integration.md.

  12. If the user asks to connect GitHub, link a GitHub organization or repositories, or enrich the application map from source code: CloudWatch Omni has no GitHub integration. Say so plainly and stop — do not walk through a setup. Do not offer a substitute: the Application Signals GitHub Action and the CloudWatch Logs GitHub audit-log source are separate CloudWatch features, not a way to connect GitHub to Omni, and a custom MCP server is not a GitHub integration. A GitHub-related feature found in public documentation is not evidence of an Omni GitHub integration.

  13. If the user asks to enable or configure CloudWatch Omni Intelligence — attach or remove a customer-managed KMS key for intelligence data, add an intelligence integration (AWS_INTEGRATION, AWS_CONFIG_SLREC, or EXTERNAL_AGENT), read the current intelligence configuration, or troubleshoot why it will not turn on (a 404 UnknownOperationException, an AccessDeniedException, or an empty context graph) — route to references/cloudwatch-omni/intelligence-setup.md. That reference is the source of truth for the KMS ARN rules (full key ARN only, kms:Decrypt/kms:GenerateDataKey, exactly one of --kms-key-arn/--remove-kms-key, and that revoking the key makes intelligence data unrecoverable), the per-integration extra IAM, the two AccessDenied causes, and why "not enabled" is a 404 rather than an AccessDenied. Reading or interpreting the intelligence data once it is on is day-to-day use: STOP and route to the aws-observability skill — triaging insights, observations, or anomalies goes to its intelligence.md reference, which covers the ListInsights / ListObservations / GetContextGraph operations and the 404-vs-403-vs-local error rule; a pure topology or blast-radius question goes to its context-graph.md reference. For Slack specifically, route to references/cloudwatch-omni/slack-integration.md; for a custom MCP server, route to references/cloudwatch-omni/custom-mcp-integration.md (not supported). Do not offer GitHub, PagerDuty, Teams, MODEL_PROVIDER, or CUSTOM_MCP as intelligence integration types.

  14. If the request names neither product — "add observability to my API", "how should I begin monitoring my workload", with no mention of Omni, a Space, a Domain, or of a CloudWatch feature — do not assume either one. Which product a customer wants to set up is their intent, not something the account's current state tells you, so ask, framed product versus product: CloudWatch Omni (Application/Agent Observability — Domains, Spaces, grants, a Dataset) or CloudWatch (log groups, alarms, Log Insights, Application Signals). Both answers are served here, from different reference folders, so this is a question about which product to set up — not about which skill to use, and not a reason to hand the request to aws-observability. In the same message, explain the boundary so they can choose — it is setup versus use: creating or configuring a Domain, Space, grant, or Access Profile, getting telemetry flowing for the first time, instrumenting an application or agent for Omni, and onboarding a service to Application Signals are all first-time setup and belong here; querying telemetry, building dashboards, configuring alarms or Omni alerts, investigating a live problem, and debugging with Dynamic Instrumentation are day-to-day use and belong to aws-observability. Do not start walking through Domain/Space creation or Application Signals onboarding until they confirm which product; having asked, stop and wait.

  15. If the user asks to connect the AWS DevOps Agent to a Space, or the connect card or Investigations shows it is not connected, route to references/cloudwatch-omni/devops-agent-integration.md. These skills cover only that Omni-side connection. Creating or configuring the DevOps Agent space, and running, following, or chatting with its investigations from a coding agent, belong to the agent's dedicated aws-agents-for-devsecops plugin; point the customer there rather than reconstructing that workflow.

Files

references/cloudwatch-omni/org-domains.md

Setting up a Domain for an AWS Organization

An org-scoped Domain is created once from the organization's management account and shared by every member account. Spaces are then created in member accounts under it. It is a separate operation family from the account-scoped Domain, with a different required role, a different deletion operation, and a prerequisite that lives in AWS Organizations rather than in Omni.

Not here yet if the customer already has an account-scoped Domain and only wants a Space somewhere it does not allow (for example another Region under Identity Center). Moving to an org Domain is then one option among several, and it starts by deleting their Domain. Lay out the options from spaces-and-domains.md (Region rules) first, and use this file only after they choose the org Domain.

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

  • Trusted access for observabilityadmin.amazonaws.com must be enabled in AWS Organizations first, and because that is an organization-wide change you MUST ask the customer before enabling it — even if they already said to proceed.

  • create-domain-for-organization is management account only; a registered delegated administrator can do everything else but not that. An account-scoped Domain on the management account blocks an org Domain and must be deleted first, which is the customer's decision.

  • A Domain grant is ADMIN only and reaches every Space in the Domain, including future ones. Prefer IDC_GROUP; do not use IAM_ROOT unless asked.

  • Teardown order: every Space first, then the Domain, from its home Region, using delete-domain-for-organization (delete-domain rejects an org Domain). Deleting the Domain removes its grants, so do not revoke them first.

Contents

  • Which path

  • What you get when setup completes

  • Prerequisites

  • Step 1 — Interview the customer first

  • Step 2 — Enable trusted access

  • Step 3 — Create the domain access role

  • Step 4 — Create the Domain

  • Step 5 — Create the Spaces

  • Step 6 — Grant Domain access

  • Verifying the setup

  • Cleanup

  • Troubleshooting

  • Security considerations

  • Additional resources

Which path

The customer wantsPath
A Domain shared across an AWS OrganizationOrg-scoped — this file
A Domain for a single accountAccount-scoped — see references/cloudwatch-omni/spaces-and-domains.md

The two are mutually exclusive on the same account. A Domain of either scope already on the management account blocks creating the other.

Who may call what differs across the org operations. Establish the caller's account up front and match it against this table before calling anything:

OperationEligible caller
enable-aws-service-access on organizationsManagement account only
create-domain-for-organizationManagement account only
Every other *-for-organization operationManagement account, or a registered delegated administrator
create-spaceThe member account that will own the Space, or the management account using credentials vended for that account

Constraints:

  • You MUST confirm the caller is in the management account before attempting trusted access or create-domain-for-organization. A delegated administrator can do everything else but neither of those.

  • You MUST NOT use create-domain or delete-domain on an org Domain. Those are the account-scoped operations and the service rejects the mismatch.

What you get when setup completes

  • A domain ID shaped d- followed by up to 25 lowercase alphanumerics, a domain ARN, and a domain endpoint URL derived from the domain name.

  • The Domain also reports the organization ID and the owner account ID, which is the management account.

  • A Space per member account per Region.

  • One or more domain access grants, each with a grant ID (a UUID), naming the principals who administer the Domain.

An org Domain ARN uses the resource type organization-domain, where an account-scoped Domain uses domain. That difference is how you tell them apart in a listing.

Quotas and scope rules to state up front:

  • One Domain per organization, keyed on the management account.

  • One Space per account per Region, unchanged from the account-scoped path.

  • A domain access grant applies to the whole Domain. It conveys access to every Space in the Domain, present and future — it is not scoped to one Space or one account.

  • Domain access grants carry exactly one permission and it is always ADMIN. There is no read-only or scoped variant at the Domain level; narrower access is granted per Space.

Constraints:

  • You MUST tell the customer the domain name becomes part of the endpoint URL before they choose it.

  • You MUST tell the customer that a Domain-level grant reaches every Space in the organization's Domain and is ADMIN-only. A customer who expects it to be limited to one account or one Space has misunderstood the blast radius.

Prerequisites

  • Trusted access for CloudWatch Observability Admin enabled in AWS Organizations. Step 2 checks and enables it. Without it every org operation fails authorization, and the failure does not name the missing prerequisite clearly.

  • A caller in the management account for trusted access and Domain creation.

  • An IAM role in the management account to pass as domainAccessRoleArn. See Step 3.

  • For an Identity Center Domain, the instance ARN. The Domain must be created in the instance's primary Region; the service verifies this.

Region rules:

  • An org Domain supports Spaces in Regions other than the Domain's own.

  • If the Domain uses Identity Center, a Space's Region must also be one the Identity Center instance is replicated to, with that Region's replication status ACTIVE. aws sso-admin list-regions --instance-arn <idc-instance-arn> shows each Region and its status; a Region still ADDING is rejected the same as one never added. Adding a Region (aws sso-admin add-region) changes the organization's Identity Center instance, so it is the customer's call: offer it alongside an already-replicated Region, and do not run it yourself.

  • Not every Region is available for Spaces under a given org Domain. Confirm rather than assume, and read the rejection message when one comes back.

Constraints:

  • You MUST resolve trusted access before doing anything else. Every other failure mode in this document is easier to diagnose once it is ruled out.

  • You MUST NOT promise a Space in a given Region under an Identity Center org Domain without confirming Identity Center is replicated there.

Operations you will call

Every operation is an aws <service> <operation> CLI command, with the operation's inputs passed as CLI flags (--kebab-key). Run it through the aws___call_aws tool when that tool is available; otherwise run the same command in a shell. Policy documents appear below as standalone JSON blocks — pass each as the corresponding flag value (--assume-role-policy-document).

aws organizations operations:

IntentCommand
Check whether trusted access is enabledaws organizations list-aws-service-access-for-organization
Enable trusted accessaws organizations enable-aws-service-access

aws cloudwatchomni operations:

IntentCommand
Discover which Domains exist, and of which scopeaws cloudwatchomni list-domains
Create the Domainaws cloudwatchomni create-domain-for-organization
Read the Domain backaws cloudwatchomni get-domain-for-organization
Change the Domain's name or providersaws cloudwatchomni update-domain-for-organization
Delete the Domainaws cloudwatchomni delete-domain-for-organization
List every Space across the organizationaws cloudwatchomni list-spaces-for-organization
Vend credentials for a member accountaws cloudwatchomni get-space-credentials-for-organization
Create a Spaceaws cloudwatchomni create-space — requires BOTH --data-access-role-arn and --agent-core-evaluation-role-arn; see references/cloudwatch-omni/spaces-and-domains.md
Grant a principal Domain administrationaws cloudwatchomni create-domain-access-grant-for-organization
List Domain grantsaws cloudwatchomni list-domain-access-grants-for-organization
Read one Domain grantaws cloudwatchomni get-domain-access-grant-for-organization
Revoke one Domain grantaws cloudwatchomni delete-domain-access-grant-for-organization

aws iam operations:

IntentCommand
Create the domain access roleaws iam create-role
Attach a managed policyaws iam attach-role-policy
Detach a managed policyaws iam detach-role-policy
Delete the roleaws iam delete-role

aws sso-admin operations:

IntentCommand
Find the customer's Identity Center instancesaws sso-admin list-instances

aws sts operations:

IntentCommand
Confirm the calling identity and accountaws sts get-caller-identity

Report the caller identity before starting, and confirm the account is the management account:

aws sts get-caller-identity

Step 1 — Interview the customer first

Ask these in one message and wait for answers. Do not ask piecemeal, and do not default silently.

  1. Region for the Domain?

  2. Domain name? It becomes part of the endpoint URL. Lowercase letters, digits, and single hyphens between them; 3–63 characters.

  3. Authorization provider — IAM, Identity Center, or both?

  4. If Identity Center: the instance ARN. Also ask which Regions Spaces will be needed in, so replication can be checked before promises are made.

  5. Domain access role — should the agent create a new role in the management account, or will the customer supply an existing role ARN? Recommend creating one.

  6. Which member accounts need Spaces, and in which Regions? Also ask whether those accounts will create their own Spaces, or whether the management account should create them on their behalf.

  7. Who administers the Domain? The principals to grant ADMIN to in Step 6.

Confirm the choices back in one line, then execute.

If the customer does not know their Identity Center instance ARN, look it up for them rather than sending them away to find it:

aws sso-admin list-instances

Each entry carries the instance ARN and its identity store ID. The public reference for this operation is sso-admin list-instances.

Constraints:

  • You SHOULD recommend creating the role rather than reusing one. Unlike the account-scoped path, the service actually attempts to assume this role at create time, so a role with the wrong trust policy fails the create outright.

  • You MUST ask which Regions Spaces are needed in when the Domain uses Identity Center. Discovering a Region is unavailable after the Domain exists means the Domain has to be recreated elsewhere or the Region abandoned.

  • You MUST tell the customer in this same message that a Domain-level grant reaches every Space in the Domain, so they choose the Step 6 principals accordingly.

Step 2 — Enable trusted access

Omni's organization operations depend on CloudWatch Observability Admin having trusted access in AWS Organizations. The service principal is observabilityadmin.amazonaws.com.

Check first
aws organizations list-aws-service-access-for-organization

The response carries EnabledServicePrincipals, a list of entries each with a ServicePrincipal and a DateEnabled. Look for observabilityadmin.amazonaws.com among them. This call works from the management account or a registered delegated administrator. The public reference is organizations list-aws-service-access-for-organization.

Enable it if absent

Ask the customer before enabling — this changes an organization-wide setting. Present the enable-aws-service-access command and get the customer's explicit confirmation before running it; do not enable trusted access as an implied step of the overall setup, because it affects every account in the organization.

aws organizations enable-aws-service-access --service-principal observabilityadmin.amazonaws.com

This call is management account only and returns no body. Re-run the check to confirm the principal now appears.

Constraints:

  • You MUST ask before enabling, and you MUST ask even when the customer has already told you to proceed. It is an organization-wide change affecting every account in the organization, their administrator may need to authorize it, and "go ahead" on the overall task is not consent for this specific change. Surface the command and wait.

  • You MUST use exactly observabilityadmin.amazonaws.com. Do NOT use telemetry-pipelines.observabilityadmin.amazonaws.com — that is a different principal for a different purpose and enabling it does not grant trusted access.

  • If the check cannot be completed — access denied, or an ambiguous response — you MUST treat the result as inconclusive, not negative. Report that and stop. You MUST NOT enable trusted access on that basis.

  • If the enable call is denied, you MUST report that the caller is not in the management account and stop. A delegated administrator can read the setting but cannot change it.

Step 3 — Create the domain access role

This is the role the service assumes to operate on Spaces across the organization. It MUST live in the management account, and unlike the account-scoped Space role it is verified at create time — the service performs a real sts:AssumeRole against it while handling create-domain-for-organization, and the create fails if that does not succeed.

The ARN must match arn: followed by the partition, then :iam::<management-account-id>:role/<role-name>, and be 20–2048 characters.

Create the role

Call create-role with AssumeRolePolicyDocument set to this trust policy. The aws:SourceAccount and aws:SourceArn conditions are confused-deputy protection — keep both. Note the resource type is organization-domain, not domain.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudwatch.amazonaws.com"
      },
      "Action": ["sts:AssumeRole", "sts:TagSession", "sts:SetContext"],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "<management-account-id>"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudwatch:*:<management-account-id>:organization-domain/*"
        }
      }
    }
  ]
}
aws iam create-role --role-name <role-name> --assume-role-policy-document <trust-policy-json>
Attach the managed policy
aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/CloudWatchOmniDomainAccessPolicy

Constraints:

  • The role MUST be in the management account. A role in any other account is rejected, and the message names the management account requirement.

  • The aws:SourceArn pattern MUST use the organization-domain resource type and MUST stay wildcarded across Region and domain ID. The domain ID does not exist yet when the role is created, so a narrower pattern cannot match.

  • You MUST NOT substitute a *FullAccess policy or hand-write a broad inline policy. The Domain's permissions are defined by the managed policy above.

  • You MUST NOT skip creating the role and hope create-domain-for-organization provisions one. The role ARN is a required input.

  • If the create-time assume check fails, you MUST report the trust policy as the cause and stop. Do NOT retry the Domain create — it will fail identically until the trust policy is fixed.

  • You MUST NOT attach the managed policy to a role the customer supplied without asking. They may be reusing it, and widening someone else's role is not yours to do.

Step 4 — Create the Domain

Check what already exists first

list-domains reports the Domains visible to the caller, of both scopes, and each entry carries its ARN. Use the ARN's resource type to tell them apart — organization-domain for an org Domain, domain for an account-scoped one. This is the check to run when the customer has no domain ID yet.

aws cloudwatchomni list-domains

Read the result before creating anything:

  • An organization-domain entry exists — the org Domain is already set up. Report its name and ID from the summary and its endpoint URL from get-domain-for-organization (summaries do not carry it), confirm the customer wants to use it, and continue from Step 5 with its domainId.

  • Only a domain entry exists — an account-scoped Domain occupies the management account, and it blocks the org Domain. Tell the customer it must be deleted before an org Domain can be created, and that deleting it is their decision. Then stop. Do not create anything, and do not describe the situation merely as blocking.

  • Nothing comes back — proceed.

Constraints:

  • You MUST run this check before create-domain-for-organization.

  • If an account-scoped Domain occupies the management account, you MUST say plainly that it has to be deleted before an org Domain can be created, and that deleting it is the customer's decision. Do NOT describe it vaguely as blocking.

  • You MUST distinguish the two ARN resource types rather than treating any returned Domain as the org Domain. Acting on an account-scoped Domain as though it were org-scoped produces confusing failures several steps later.

  • If the check cannot be completed — access denied, or an ambiguous response — you MUST treat the result as inconclusive, not negative. Report that and stop. You MUST NOT create a Domain on that basis.

Create it

For an IAM-only Domain:

aws cloudwatchomni create-domain-for-organization \
  --name <domain-name> --identity-providers IAM \
  --domain-access-role-arn arn:aws:iam::<management-account-id>:role/<role-name>

For an Identity Center Domain, identityProviderConfiguration becomes required and carries the instance ARN:

aws cloudwatchomni create-domain-for-organization \
  --name <domain-name> --identity-providers IAM IDC \
  --domain-access-role-arn arn:aws:iam::<management-account-id>:role/<role-name> \
  --identity-provider-configuration '{"identityCenterConfiguration": {"identityCenterInstanceArn": "<idc-instance-arn>"}}'

Capture domainId, domainArn, domainEndpointUrl, organizationId, and ownerAccountId from the organizationDomain object in the response (the same object get-domain-for-organization and update-domain-for-organization return).

Constraints:

  • You MUST create an Identity Center Domain in the instance's primary Region. The service verifies this; the rejection names the primary Region and the current Region, so read it rather than guessing.

  • You MUST capture domainEndpointUrl and give it to the customer. Every member account reaches Omni through it.

Step 5 — Create the Spaces

A Space lives in a member account. There are two ways to create one, and the choice was made in Step 1.

The Space itself — its name, its space access role, its encryption — works exactly as it does under an account-scoped Domain. See references/cloudwatch-omni/spaces-and-domains.md, picking up at its Space steps. The space access role is still required and still belongs in the account that will own the Space.

Path A — the member account creates its own Space

The member account calls create-space directly, passing the shared domainId. Nothing about the call differs from the account-scoped path except that the Domain was not created by that account.

Path B — the management account creates it on the member's behalf

The management account, or a registered delegated administrator, vends credentials for the target account and uses them to create the Space:

aws cloudwatchomni get-space-credentials-for-organization \
  --context '{"domainId": "<domain-id>", "targetAccountId": "<target-account-id>"}' \
  --credential-type SPACE_OPERATION

--credential-type is required, and SPACE_OPERATION is its only value — always pass it, and do not treat it as a choice to put to the customer. Omitting it is rejected by the client before the request is sent.

The response carries temporary credentials for the target account. Use them to call create-space against that account. Once a Space exists, credentials can be vended for it directly by passing spaceId in the context instead of the domainId/targetAccountId pair.

Enumerate what exists across the organization at any point:

aws cloudwatchomni list-spaces-for-organization

Constraints:

  • You MUST NOT tell a member account to call create-domain first. The org Domain already exists and a second Domain in the member account is neither needed nor permitted alongside it.

  • On Path B you MUST use the vended credentials for the create-space call itself. Calling create-space with the management account's own credentials creates a Space in the management account, not the target account.

  • Region availability is narrower than it looks. A Space may live in a Region other than the Domain's, but not every Region is available, and under an Identity Center Domain the Region must also be one Identity Center is replicated to.

Step 6 — Grant Domain access

A Domain with no grants has no administrators. Grant the principals the customer named in Step 1.

A grant applies to the entire Domain. It conveys administration of every Space in the Domain, including Spaces created later. There is no way to scope a Domain-level grant to one account or one Space — that is what per-Space grants are for.

aws cloudwatchomni create-domain-access-grant-for-organization \
  --domain-id <domain-id> \
  --name <grant-name> \
  --principal '{"principalType": "<principal-type>", "principalId": "<principal-id>"}' \
  --permission ADMIN

name is required: 1–64 characters matching ^[a-zA-Z0-9_-]+$. permission takes the single value ADMIN. principalType is one of IDC_USER, IDC_GROUP, IAM_USER, IAM_ROLE, or IAM_ROOT.

Capture the grant ID from the accessGrant object; it is what delete-domain-access-grant-for-organization takes if a single grant needs revoking later.

Review the grants with:

aws cloudwatchomni list-domain-access-grants-for-organization --domain-id <domain-id>

Constraints:

  • permission is a single value and it must be ADMIN. The account-scoped permission values — READ, READ_WRITE_DELETE, SPACE_ADMIN, and CUSTOM — are not valid at the Domain level.

  • You MUST state the blast radius when confirming a grant: the principal will administer every Space in the organization's Domain.

  • For an Identity Center Domain you SHOULD prefer IDC_GROUP over IDC_USER. Group membership changes without touching grants.

  • You MUST NOT grant IAM_ROOT unless the customer explicitly asks. It is the broadest principal available and rarely what they mean.

Verifying the setup

Read the Domain back rather than trusting the create response, and confirm the Spaces and grants landed:

aws cloudwatchomni get-domain-for-organization --domain-id <domain-id>

aws cloudwatchomni list-spaces-for-organization

aws cloudwatchomni list-domain-access-grants-for-organization --domain-id <domain-id>

Then report to the customer, in one line: the domain endpoint URL, the domain ID, the organization ID, how many Spaces exist, and how many administrators were granted.

Constraints:

  • You MUST confirm at least one ADMIN grant exists before declaring setup complete. A Domain nobody administers is not a working setup.

Cleanup

Order matters, and it spans accounts.

  1. Every Space is deleted. The Domain cannot be deleted while any Space is associated with it. Use list-spaces-for-organization to enumerate what remains. A Space is deleted by its owning account, or by the management account using credentials vended through get-space-credentials-for-organization.

  2. Delete the Domain, from its home Region — the Region it was created in:

    aws cloudwatchomni delete-domain-for-organization --domain-id <domain-id>

    Use delete-domain-for-organization, not delete-domain — the account-scoped operation rejects an org Domain and tells you to use this one instead.

    Deleting the Domain removes its access grants. Do not revoke them first as hygiene; it is unnecessary work. delete-domain-access-grant-for-organization is for revoking one principal's access while the Domain stays in use.

  3. The domain access role — branch on who created it:

    • The agent created it in Step 3: detach the managed policy with detach-role-policy, then delete-role. A role with policies attached cannot be deleted.

    • The customer supplied it: do NOT delete or modify it.

  4. Trusted access can be left enabled. If the customer wants it off, that is an organization-wide change made through CloudWatch's own telemetry configuration controls rather than by disabling the Organizations integration directly.

Constraints:

  • You MUST delete every Space before the Domain, and you MUST say plainly which accounts are involved. Spaces in member accounts need either that account's credentials or credentials vended for it.

  • You MUST delete the Domain from its home Region. A delete from anywhere else is rejected and the message names the home Region.

  • You MUST use delete-domain-for-organization. delete-domain rejects an org Domain and tells you to use this operation instead.

  • Deleting Spaces is destructive. You MUST confirm with the customer first and say plainly that each Space's telemetry goes with it.

  • You SHOULD NOT disable trusted access as part of cleaning up a Domain. It is organization-wide and other CloudWatch features depend on it.

Troubleshooting

Rule: When a call returns an error, surface the error code and message verbatim, then map to the mitigation below. Do NOT invent error text, do NOT paraphrase what the service returned, and do NOT synthesize a mitigation for an error that is not listed.

Error signalCauseMitigation to surface
Authorization error stating trusted access is disabledCloudWatch Observability Admin trusted access is not enabled for the organizationRun Step 2 — check with list-aws-service-access-for-organization and enable observabilityadmin.amazonaws.com. Nothing else works until it is on
AccessDeniedException on enable-aws-service-accessCaller is not in the management accountOnly the management account can enable trusted access. A delegated administrator can read the setting but not change it
Authorization error stating only the management account can create an organization domainCaller is a member account or a delegated administratorDomain creation must run from the management account. A delegated administrator can perform every other org operation
ParamValidationError naming a missing required parameter on get-space-credentials-for-organizationcredentialType was omitted — it is required, and the client rejects the call before sending itResend with --credential-type SPACE_OPERATION
ValidationException that the management account ID could not be resolvedCaller is not in an organization, or trusted access is offConfirm the account belongs to an organization and that trusted access is enabled
ValidationException that domainAccessRoleArn must be a role in the management accountRole lives in a member accountCreate the role in the management account. A member-account role cannot be used
An error stating the data access role could not be assumed, naming the trust policyThe create-time assume check failedFix the role's trust policy so the CloudWatch service can assume it, and confirm the aws:SourceArn uses the organization-domain resource type. Do NOT retry unchanged — it fails identically
ConflictException naming a management account that already has a DomainThe management account already has a Domain. This fires whether that Domain is org-scoped or account-scoped — the two are mutually exclusive on one accountRun list-domains and read the ARN resource type. If it is organization-domain, use it. If it is domain, the account-scoped Domain must be deleted before an org Domain can be created. Do NOT retry the create
ValidationException naming the Identity Center primary RegionDomain not being created in the instance's primary RegionCreate the Domain in the primary Region the message names. list-instances on sso-admin shows the instances the caller can reach
ValidationException that Identity Center is not replicated to a RegionA Space was requested in a Region where the Identity Center instance is not replicatedNothing about the Domain or the request is wrong. Offer both and let the customer choose: create the Space in a Region already ACTIVE in sso-admin list-regions, or have the customer add that Region to the instance and retry once it reaches ACTIVE (see Region rules)
Error stating Spaces for organization domains must be created in the same Region as the organization domainThe target Region is not available for Spaces under this DomainCreate the Space in the Domain's Region, or ask the customer which Regions are enabled for Spaces in their organization
Error stating cross-account access requires management account or registered delegated administratorCaller is an ordinary member accountRun the operation from the management account, or register the account as a delegated administrator
A Space appears in the management account instead of the target accountcreate-space was called with the management account's own credentials rather than the vended onesDelete that Space, re-vend credentials with get-space-credentials-for-organization, and call create-space with those
ResourceNotFoundException that the Domain is not an organization-scoped domaindelete-domain-for-organization was called on an account-scoped DomainUse delete-domain for that Domain
ValidationException that an organization-scoped domain cannot be deleted via DeleteDomainWrong deletion operationUse delete-domain-for-organization
Error stating the Domain must be deleted from its home RegionDelete attempted from another RegionRetry from the Region named in the message
ConflictException stating Spaces are still associated with the DomainSpaces still exist under the DomainEnumerate them with list-spaces-for-organization and delete each, then retry

If the error does not match a row above, quote it verbatim, say it is unmapped, and ask the customer how to proceed.

Expectations that look like faults
  • Every org operation fails authorization at once. That is trusted access being off, not a permissions problem on the caller.

  • A Domain-level grant cannot be made read-only, or scoped to one account. ADMIN over the whole Domain is the only shape. Narrower access is granted per Space.

  • A Space cannot be created in some Region. Region availability under an org Domain is narrower than it appears, and under an Identity Center Domain the Region must also have Identity Center replicated. Nothing about the Domain or the Space request is wrong.

  • Grants disappear when the Domain is deleted. That is expected — the service removes them with the Domain.

Security considerations

  • The domain access role is assumed for callers across the whole organization. It is the broadest role in this setup — keep both aws:SourceAccount and aws:SourceArn conditions on its trust policy, keep the organization-domain resource type pinned, and keep the role out of any workflow that does not need it.

  • Keep the domain access role in the management account and nowhere else. The service requires this, and it keeps organization-wide capability from sitting in a member account.

  • A Domain access grant reaches every Space in the Domain. Treat it as an organization-wide grant, not an account-level one, and keep the list short.

  • Prefer IDC_GROUP over IDC_USER for Domain administrators so that offboarding a person does not require finding and revoking their grant.

  • Avoid IAM_ROOT as a grant principal. Root has no session identity to attribute actions to.

  • Credentials from get-space-credentials-for-organization are temporary and act in another account. Do not persist or log them, and do not reuse them beyond the operation they were vended for.

  • Enumerate grants with list-domain-access-grants-for-organization periodically.

  • Delegated administrator is a standing organization-wide capability. Register only accounts the customer intends to keep in that role.

  • Trusted access is organization-wide and shared with other CloudWatch features. Enabling it is a deliberate decision for the organization administrator, not a side effect of setting up one Domain.

Additional resources

  • references/cloudwatch-omni/spaces-and-domains.md — account-scoped Domains, and the Space steps used under an org Domain

  • references/cloudwatch-omni/instrumentation/collector.md — deploying a collector that exports to CloudWatch's OTLP endpoints, for telemetry not yet reaching CloudWatch

  • references/cloudwatch-omni/data-forwarding-and-centralization.md — forwarding telemetry that is already in CloudWatch log groups into the Dataset

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 Python

Security

What our scanner noticed· Medium risk

  • References to credential files
  • Instructions that use the network

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/specialized-skills/operations-skills/setting-up-cloudwatch-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

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 setting-up-cloudwatch-observability.zip