﻿---
title: AWS CloudWatch (OpenTelemetry)
description: The AWS CloudWatch OpenTelemetry Input collects Amazon CloudWatch metrics for selected AWS services using the AWS CloudWatch receiver from the OpenTelemetry...
url: https://docs-v3-preview.elastic.dev/elastic/integration-docs/tree/main/reference/aws_cloudwatch_input_otel
products:
  - Elastic integrations
applies_to:
  - Serverless Observability projects: Preview
  - Serverless Security projects: Preview
  - Elastic Stack: Preview since 9.5
---

# AWS CloudWatch (OpenTelemetry)
|                                                                                                                               |                                                                   |
|-------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------|
| **Version**                                                                                                                   | 0.6.0 <applies-to>: Preview</applies-to> ([View all](#changelog)) |
| **Subscription level**[What's this?](https://www.elastic.co/subscriptions)                                                    | Basic                                                             |
| **Developed by**[What's this?](https://docs-v3-preview.elastic.dev/elastic/integration-docs/tree/main/reference/developed-by) | Elastic                                                           |
| **Minimum Kibana version(s)**                                                                                                 | 9.5.0                                                             |

<admonition title="The AWS CloudWatch (OpenTelemetry) integration v0.6.0 is in technical preview">
  To use pre-release integrations, go to the **Integrations** page in Kibana, scroll down, and toggle on the _Display beta integrations_ option.
</admonition>


## Overview

The AWS CloudWatch OpenTelemetry Input collects Amazon CloudWatch metrics for selected AWS services using the [AWS CloudWatch receiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/awscloudwatchreceiver) from the OpenTelemetry Collector.
Instead of listing individual metrics, the integration automatically discovers the metrics published in each service's CloudWatch namespace, so newly available metrics are picked up without any configuration changes. This makes it a low-maintenance way to bring AWS infrastructure metrics into Elastic for dashboards, alerting, and analysis.

## How it works

This integration configures the AWS CloudWatch receiver in the EDOT (Elastic Distribution of OpenTelemetry) Collector, which:
1. Authenticates to AWS using the credentials you provide.
2. Discovers the metrics available in the selected service's CloudWatch namespace.
3. Polls CloudWatch on a regular interval and retrieves the configured statistics (such as Average, Sum, and Maximum) for each metric.
4. Forwards the metrics to Elastic Agent, which ships them to Elasticsearch for indexing and visualization.

You add the integration once for each AWS service you want to monitor.

## Deployment modes

This integration can be deployed in two ways:
- **Elastic Managed** (default): Elastic manages the collector for you, with no infrastructure to run. This is the recommended option for most users.
- **Elastic Agent**: Run the collector on your own Elastic Agent.


## Supported services

Each AWS service is available as a separate option when you add the integration.

| Service             | CloudWatch namespace |
|---------------------|----------------------|
| AWS EC2             | `AWS/EC2`            |
| AWS Lambda          | `AWS/Lambda`         |
| AWS RDS             | `AWS/RDS`            |
| AWS SQS             | `AWS/SQS`            |
| AWS Application ELB | `AWS/ApplicationELB` |
| AWS ECS / Fargate   | `AWS/ECS`            |

Each service collects a set of statistics chosen to suit that service's metrics (for example, averages for utilization metrics and sums for counters). These defaults work well out of the box and require no configuration.

## Requirements

- An AWS account with the services you want to monitor.
- AWS credentials with permission to read CloudWatch metrics. At minimum, the credentials must allow:
  - `cloudwatch:ListMetrics`
- `cloudwatch:GetMetricData`
- The AWS region your resources run in.


## Configuration


### Core settings


| Setting               | Description                                                        |
|-----------------------|--------------------------------------------------------------------|
| AWS Region            | The AWS region to collect metrics from (for example, `us-east-1`). |
| AWS Access Key ID     | The access key used to authenticate to AWS.                        |
| AWS Secret Access Key | The secret key paired with the access key.                         |
| AWS Session Token     | Required only when using temporary (STS) credentials.              |


### Collection settings

Each service template exposes two settings that control how metrics are polled from CloudWatch:

| Setting                 | Description                                                                                                                                                                       |
|-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Collection Interval** | How often the integration polls CloudWatch (one `GetMetricData` cycle). Shorter intervals give fresher data but increase the number of API calls.                                 |
| **Period**              | The CloudWatch aggregation window for each data point. It must match the resolution at which the AWS service publishes the metric, otherwise you may see gaps or repeated values. |

Guidance:
- Set **Period** to the metric's native publishing resolution — typically **5 minutes** for services on 5-minute resolution (for example, EC2 basic monitoring) and **1 minute** for services that publish at 1-minute resolution (for example, RDS and Application ELB).
- In most cases, set **Collection Interval** equal to **Period**. Polling more frequently than the period just re-reads the same data point; polling less frequently can miss points.
- The defaults below are pre-tuned per service, so you typically don't need to change them.


| Service             | Collection Interval | Period |
|---------------------|---------------------|--------|
| AWS EC2             | 5m                  | 5m     |
| AWS Lambda          | 1m                  | 1m     |
| AWS RDS             | 1m                  | 1m     |
| AWS SQS             | 1m                  | 1m     |
| AWS Application ELB | 1m                  | 1m     |
| AWS ECS             | 1m                  | 1m     |


## Authentication

The integration supports the following ways to authenticate to AWS:
- **Access keys**: Provide an access key ID and secret access key.
- **Temporary credentials**: Provide an access key ID, secret access key, and session token.
- **IAM role assumption**: Provide a Role ARN (and optionally an External ID) under the advanced settings to assume a role.

Use credentials scoped to read-only CloudWatch access wherever possible.

## Metrics reference

For the complete list of metrics available in each namespace, see the [Amazon CloudWatch metrics and dimensions reference](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html).

## Troubleshooting


### No metrics appear

1. Confirm the AWS Region matches where your resources are running.
2. Verify the credentials are valid and not expired (temporary credentials require a session token).
3. Ensure the credentials have `cloudwatch:ListMetrics` and `cloudwatch:GetMetricData` permissions.
4. Allow time for the first collection cycle to complete, and remember that CloudWatch publishes metrics with a short delay.


### Authentication errors

1. Double-check the access key ID and secret access key.
2. If using temporary credentials, make sure the session token is set and current.
3. If assuming a role, verify the Role ARN and, if required, the External ID.


## Further reading

- [Amazon CloudWatch documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)
- [AWS CloudWatch receiver documentation](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/awscloudwatchreceiver)
- [OpenTelemetry Collector documentation](https://opentelemetry.io/docs/collector/)


## Changelog

<dropdown title="Changelog">
  | Version   | Details                                                                                                                                                                                                                                                                                                                                                         | Minimum Kibana version |
  |-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|
  | **0.6.0** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/20182))Publish Agentless to Elastic Managed integrations name change.                                                                                                                                                                                                         | 9.5.0                  |
  | **0.5.0** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19988))Add policy templates for Classic Load Balancer, Network Load Balancer and Gateway Load Balancer. The existing `aws.elb` template now covers Application Load Balancers only.                                                                                           | 9.5.0                  |
  | **0.4.0** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19790))Add `recently_active` option to restrict metric discovery to metrics active in the last three hours.                                                                                                                                                                   | 9.5.0                  |
  | **0.3.2** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19624))Update the integration documentation.                                                                                                                                                                                                                                  | 9.5.0                  |
  | **0.3.1** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19665))Update default collection period and stats.                                                                                                                                                                                                                            | 9.5.0                  |
  | **0.3.0** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19563))Add support for region specific to a service.**Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19563))Authenticate via the `awscredentialsprovider` extension (bundled in EDOT through elastic-agent#14933).                           | 9.5.0                  |
  | **0.2.2** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19570))Move configs to per service**Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19570))Allow selecting multiple CloudWatch statistics per service (Aggregation Statistics is now a multi-select rendered as the receiver's `stats` list). | 9.5.0                  |
  | **0.2.1** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19551))Add a per-service `delay` variable on each policy template (`aws_ec2`, `lambda`, `rds`, `sqs`, `elb`, `ecs`), with a default reflecting the typical CloudWatch publish latency for that AWS service. The receiver uses this value as `metrics.delay`.                  | 9.5.0                  |
  | **0.2.0** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19547))Make agentless the default deployment mode (`is_default: true`) while keeping the standard agent mode enabled. Add `release: beta` to the agentless block.                                                                                                             | 9.5.0                  |
  | **0.1.1** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19532))Rename `aws_ec2` policy template to `aws.ec2` so it matches the bare-service-name convention used by the other templates (`lambda`, `rds`, `sqs`, `elb`, `fargate`). Update titles from "AWS X Metrics (OpenTelemetry)" to "AWS X OpenTelemetry Metrics".              | 9.5.0                  |
  | **0.1.0** | **Enhancement** ([View pull request](https://github.com/elastic/integrations/pull/19468))Initial release of AWS CloudWatch OpenTelemetry input package.                                                                                                                                                                                                         | 9.5.0                  |
</dropdown>