Pular para o conteúdo principal
Use um template do AWS CloudFormation para configurar o streaming de métricas do CloudWatch para o AppSignal. O template cria todos os recursos necessários em uma única implantação, em vez de configurar cada um manualmente através do Console AWS. Para uma visão geral das métricas do CloudWatch no AppSignal, incluindo magic dashboards e nomenclatura de métricas, veja Métricas do AWS CloudWatch. Se você preferir configurar cada recurso manualmente, veja o guia de configuração via console.

Antes de começar

Tenha as seguintes informações em mãos:
  • A chave Push API de nível de App da sua aplicação. Para encontrá-la, abra a página de configurações de chaves de API, ou navegue até as configurações da sua organização e selecione Dev zone > API keys.
  • A região AWS onde você quer implantar a stack

O que o template cria

O template do CloudFormation cria os seguintes recursos:
  1. Um bucket S3 para armazenar registros que falharem na entrega, com uma expiração de ciclo de vida de 30 dias e uma política de retenção em exclusão.
  2. Um papel IAM que permite que o Amazon Data Firehose escreva registros falhos no bucket S3.
  3. Um stream de entrega Firehose que envia métricas para o endpoint do AppSignal via HTTPS.
  4. Um papel IAM que permite que o CloudWatch Metric Streams escreva no stream de entrega Firehose.
  5. Um CloudWatch metric stream que exporta métricas no formato OpenTelemetry 1.0.

Template CloudFormation

Copie o seguinte template e salve-o como appsignal-cloudwatch-metrics.yaml:
YAML
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

Implantar a stack

  1. Abra o console do AWS CloudFormation.
  2. Selecione Create stack e escolha With new resources (standard).
  3. Em Specify template, selecione Upload a template file e faça upload de appsignal-cloudwatch-metrics.yaml.
  4. Selecione Next.
  5. Insira um nome para a stack, por exemplo appsignal-cloudwatch-metrics.
  6. Para AppLevelPushApiKey, insira a chave Push API de nível de App da sua aplicação.
  7. Selecione Next duas vezes, depois marque I acknowledge that AWS CloudFormation might create IAM resources e selecione Submit.
A stack leva alguns minutos para ser criada. Uma vez que o status mostre CREATE_COMPLETE, o CloudWatch começa a transmitir métricas para o AppSignal.

Filtrar serviços AWS específicos

Por padrão, o template transmite métricas de todos os serviços AWS na conta. Para transmitir apenas serviços específicos, adicione IncludeFilters ao recurso CloudWatchMetricStream:
YAML
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
Substitua os namespaces pelos serviços AWS que você quer monitorar. Veja serviços AWS que publicam métricas do CloudWatch para uma lista completa de namespaces disponíveis.

Verificar a implantação

  1. No Console AWS, pesquise “CloudFormation” e selecione Stacks. Abra sua stack e selecione a aba Resources para confirmar que todos os recursos mostram CREATE_COMPLETE.
  2. No Console AWS, pesquise “CloudWatch”. Na barra lateral esquerda, vá para Metrics > Streams e confirme que o status do metric stream é Running.
  3. No Console AWS, pesquise “Firehose”. Abra o stream de entrega e use a função Test with demo data para verificar a conectividade.
  4. No AppSignal, abra o dashboard da sua aplicação e verifique se as métricas do CloudWatch aparecem em seu dashboard personalizado.
Se as métricas não aparecerem após alguns minutos, verifique o bucket S3 para registros de entrega falha. Se precisar de ajuda, entre em contato.

Implantações multi-região

O template implanta todos os recursos em uma única região AWS. Se você executa workloads em várias regiões, implante uma cópia separada desta stack em cada região. Isso mantém a transferência de dados dentro de cada região e evita taxas de transferência entre regiões.

Limpeza

Para remover todos os recursos criados por este template, exclua a stack no console do CloudFormation. O bucket S3 para entregas falhas tem uma DeletionPolicy de Retain, então ele é mantido quando a stack é excluída para evitar perder quaisquer registros de entrega falha. Registros de entrega falha no bucket são automaticamente excluídos após 30 dias pela regra de ciclo de vida. Você pode excluir o bucket manualmente uma vez que não precisar mais dele.