> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# AWS CloudWatch-Metriken mit CloudFormation streamen

Verwenden Sie eine AWS CloudFormation-Vorlage, um das Streaming von CloudWatch-Metriken zu AppSignal einzurichten. Die Vorlage erstellt alle erforderlichen Ressourcen in einer einzigen Bereitstellung, anstatt jede einzelne manuell über die AWS-Konsole zu konfigurieren.

Eine Übersicht über CloudWatch-Metriken in AppSignal, einschließlich Magic Dashboards und Metrikbenennung, finden Sie unter [AWS CloudWatch-Metriken](/metrics/cloudwatch-overview). Wenn Sie jede Ressource lieber manuell einrichten möchten, lesen Sie den [Leitfaden zur Konsolen-Einrichtung](/metrics/cloudwatch).

## Bevor Sie beginnen

Halten Sie die folgenden Informationen bereit:

* Den App-level Push API-Schlüssel Ihrer App. Um ihn zu finden, öffnen Sie die [API-Schlüssel-Einstellungsseite](https://appsignal.com/redirect-to/app?to=api_keys\&key_tab=app) oder navigieren Sie zu Ihren Organisationseinstellungen und wählen Sie **Dev zone > API keys**.
* Die AWS-Region, in der Sie den Stack bereitstellen möchten.

## Was die Vorlage erstellt

Die CloudFormation-Vorlage erstellt die folgenden Ressourcen:

1. Ein **S3-Bucket** zum Speichern von Datensätzen, deren Zustellung fehlschlägt, mit einer 30-tägigen Lifecycle-Expiration und einer Retain-on-Delete-Richtlinie.
2. Eine **IAM-Rolle**, die es Amazon Data Firehose ermöglicht, fehlgeschlagene Datensätze in den S3-Bucket zu schreiben.
3. Einen **Firehose Delivery Stream**, der Metriken über HTTPS an den AppSignal-Endpunkt sendet.
4. Eine **IAM-Rolle**, die es CloudWatch Metric Streams ermöglicht, in den Firehose Delivery Stream zu schreiben.
5. Einen **CloudWatch Metric Stream**, der Metriken im OpenTelemetry 1.0-Format exportiert.

## CloudFormation-Vorlage

Kopieren Sie die folgende Vorlage und speichern Sie sie als `appsignal-cloudwatch-metrics.yaml`:

```yaml YAML theme={null}
AWSTemplateFormatVersion: "2010-09-09"
Description: >
  Stream CloudWatch metrics to AppSignal using Amazon Data Firehose.

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: AppSignal Configuration
        Parameters:
          - AppLevelPushApiKey
    ParameterLabels:
      AppLevelPushApiKey:
        default: "App-level Push API Key (find at https://appsignal.com/redirect-to/app?to=api_keys&key_tab=app)"

Parameters:
  AppLevelPushApiKey:
    Type: String
    NoEcho: true
    Description: >
      Your App-level Push API key from AppSignal.

Resources:
  # 1. S3 bucket for failed deliveries
  FailedDeliveryBucket:
    Type: AWS::S3::Bucket
    DeletionPolicy: Retain
    Properties:
      BucketName: !Sub "appsignal-firehose-${AWS::StackName}-${AWS::AccountId}-${AWS::Region}"
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      LifecycleConfiguration:
        Rules:
          - Id: ExpireFailedDeliveries
            Status: Enabled
            ExpirationInDays: 30

  # 2. IAM role for Firehose to write to S3
  FirehoseS3Role:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: firehose.amazonaws.com
            Action: "sts:AssumeRole"
      Policies:
        - PolicyName: FirehoseS3Access
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - "s3:AbortMultipartUpload"
                  - "s3:GetBucketLocation"
                  - "s3:GetObject"
                  - "s3:ListBucket"
                  - "s3:ListBucketMultipartUploads"
                  - "s3:PutObject"
                Resource:
                  - !GetAtt FailedDeliveryBucket.Arn
                  - !Sub "${FailedDeliveryBucket.Arn}/*"

  # 3. Firehose delivery stream
  MetricsDeliveryStream:
    Type: AWS::KinesisFirehose::DeliveryStream
    Properties:
      DeliveryStreamType: DirectPut
      HttpEndpointDestinationConfiguration:
        EndpointConfiguration:
          Url: "https://appsignal-endpoint.net/metrics/aws-cloudwatch"
          AccessKey: !Ref AppLevelPushApiKey
          Name: AppSignal
        RequestConfiguration:
          ContentEncoding: GZIP
        BufferingHints:
          IntervalInSeconds: 60
          SizeInMBs: 1
        S3BackupMode: FailedDataOnly
        S3Configuration:
          BucketARN: !GetAtt FailedDeliveryBucket.Arn
          RoleARN: !GetAtt FirehoseS3Role.Arn
        RoleARN: !GetAtt FirehoseS3Role.Arn

  # 4. IAM role for CloudWatch Metric Streams to write to Firehose
  MetricStreamRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: streams.metrics.cloudwatch.amazonaws.com
            Action: "sts:AssumeRole"
      Policies:
        - PolicyName: MetricStreamFirehoseAccess
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - "firehose:PutRecord"
                  - "firehose:PutRecordBatch"
                Resource: !GetAtt MetricsDeliveryStream.Arn

  # 5. CloudWatch metric stream
  CloudWatchMetricStream:
    Type: AWS::CloudWatch::MetricStream
    Properties:
      FirehoseArn: !GetAtt MetricsDeliveryStream.Arn
      RoleArn: !GetAtt MetricStreamRole.Arn
      OutputFormat: "opentelemetry1.0"

Outputs:
  DeliveryStreamName:
    Description: Name of the Firehose delivery stream.
    Value: !Ref MetricsDeliveryStream

  MetricStreamName:
    Description: Name of the CloudWatch metric stream.
    Value: !Ref CloudWatchMetricStream

  FailedDeliveryBucketName:
    Description: S3 bucket for failed delivery records.
    Value: !Ref FailedDeliveryBucket
```

## Stack bereitstellen

1. Öffnen Sie die [AWS CloudFormation-Konsole](https://console.aws.amazon.com/cloudformation/).
2. Wählen Sie **Create stack** und wählen Sie **With new resources (standard)**.
3. Wählen Sie unter **Specify template** **Upload a template file** und laden Sie `appsignal-cloudwatch-metrics.yaml` hoch.
4. Wählen Sie **Next**.
5. Geben Sie einen Stack-Namen ein, z. B. `appsignal-cloudwatch-metrics`.
6. Geben Sie für **AppLevelPushApiKey** den App-level Push API-Schlüssel Ihrer App ein.
7. Wählen Sie zweimal **Next**, markieren Sie dann **I acknowledge that AWS CloudFormation might create IAM resources** und wählen Sie **Submit**.

Die Erstellung des Stacks dauert einige Minuten. Sobald der Status **CREATE\_COMPLETE** anzeigt, beginnt CloudWatch mit dem Streamen von Metriken zu AppSignal.

## Bestimmte AWS-Dienste filtern

Standardmäßig streamt die Vorlage Metriken von allen AWS-Diensten im Konto. Um nur bestimmte Dienste zu streamen, fügen Sie `IncludeFilters` zur `CloudWatchMetricStream`-Ressource hinzu:

```yaml YAML theme={null}
CloudWatchMetricStream:
  Type: AWS::CloudWatch::MetricStream
  Properties:
    FirehoseArn: !GetAtt MetricsDeliveryStream.Arn
    RoleArn: !GetAtt MetricStreamRole.Arn
    OutputFormat: "opentelemetry1.0"
    IncludeFilters:
      - Namespace: AWS/EC2
      - Namespace: AWS/RDS
      - Namespace: AWS/ELB
```

Ersetzen Sie die Namespaces durch die AWS-Dienste, die Sie überwachen möchten. Eine vollständige Liste der verfügbaren Namespaces finden Sie unter [AWS-Dienste, die CloudWatch-Metriken veröffentlichen](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html).

## Bereitstellung überprüfen

1. Suchen Sie in der AWS-Konsole nach „CloudFormation" und wählen Sie **Stacks**. Öffnen Sie Ihren Stack und wählen Sie den **Resources**-Tab, um zu bestätigen, dass alle Ressourcen **CREATE\_COMPLETE** anzeigen.
2. Suchen Sie in der AWS-Konsole nach „CloudWatch". Gehen Sie in der linken Seitenleiste zu **Metrics > Streams** und bestätigen Sie, dass der Status des Metric Streams **Running** ist.
3. Suchen Sie in der AWS-Konsole nach „Firehose". Öffnen Sie den Delivery Stream und nutzen Sie die Funktion **Test with demo data**, um die Konnektivität zu überprüfen.
4. Öffnen Sie in AppSignal das [Dashboard Ihrer App](https://appsignal.com/redirect-to/app?to=dashboard) und prüfen Sie, ob CloudWatch-Metriken auf Ihrem [benutzerdefinierten Dashboard](/metrics/dashboards) erscheinen.

Wenn nach einigen Minuten keine Metriken erscheinen, überprüfen Sie den S3-Bucket auf fehlgeschlagene Zustellungsdatensätze. Wenn Sie Hilfe benötigen, [kontaktieren Sie uns](mailto:support@appsignal.com).

## Multi-Region-Bereitstellungen

Die Vorlage stellt alle Ressourcen in einer einzigen AWS-Region bereit. Wenn Sie Workloads in mehreren Regionen ausführen, stellen Sie in jeder Region eine separate Kopie dieses Stacks bereit. Dies hält die Datenübertragung innerhalb jeder Region und vermeidet Gebühren für regionsübergreifende Übertragungen.

## Aufräumen

Um alle von dieser Vorlage erstellten Ressourcen zu entfernen, löschen Sie den Stack in der CloudFormation-Konsole. Der S3-Bucket für fehlgeschlagene Zustellungen hat eine `DeletionPolicy` von `Retain`, daher wird er beim Löschen des Stacks beibehalten, um zu vermeiden, dass fehlgeschlagene Zustellungsdatensätze verloren gehen. Fehlgeschlagene Zustellungsdatensätze im Bucket werden durch die Lifecycle-Regel automatisch nach 30 Tagen gelöscht. Sie können den Bucket manuell löschen, sobald Sie ihn nicht mehr benötigen.
