> ## 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.

# Enviar logs do CloudWatch para o AppSignal via Amazon Data Firehose

<Warning>
  🔐 Não envie <strong>Informações Pessoais Identificáveis (PII)</strong> para a AppSignal. Filtre PII (por exemplo, nomes, e-mails) dos logs e use um ID, hash ou identificador pseudonimizado no lugar. <br /> <br /> Para **entidades cobertas pela HIPAA**, mais informações sobre como assinar um Business Associate Agreement (BAA) podem ser encontradas em nossa [documentação de Business Add-Ons](/support/business-add-ons).
</Warning>

Conclua os seguintes passos para enviar logs do CloudWatch para o AppSignal por meio do Amazon Data Firehose (anteriormente Kinesis Data Firehose):

1. [Crie uma fonte de log](#create-a-log-source)
2. [Configure um bucket S3 para entregas falhadas](#set-up-an-s3-bucket-for-failed-deliveries)
3. [Configure uma função IAM para o Data Firehose](#set-up-an-iam-role-for-data-firehose)
4. [Crie um delivery stream do Firehose](#create-a-firehose-delivery-stream)
5. [Configure uma função IAM para o CloudWatch](#set-up-an-iam-role-for-cloudwatch)
6. [Crie uma assinatura de log do CloudWatch](#create-a-cloudwatch-log-subscription)

Antes de começar, tenha as seguintes informações em mãos:

* A [chave de API](https://appsignal.com/redirect-to/app?to=logs/sources) da sua fonte de log. Se você ainda não tem uma fonte de log, [crie uma nova fonte de log](/logging/configuration#creating-a-log-source) primeiro.
* ID da conta AWS
* Região AWS
* Nome do bucket S3 para armazenamento de entregas falhadas
* Nome do stream do Data Firehose
* Nome da função IAM para o bucket S3
* Nome da função IAM para a assinatura do CloudWatch

## Crie uma fonte de log

Crie uma fonte de log antes de prosseguir. Veja [Configuração de logging](/logging/configuration#creating-a-log-source) para instruções.

## Configure um bucket S3 para entregas falhadas

O Amazon Data Firehose requer um bucket S3 para armazenar registros que falham ao serem entregues. Crie um bucket S3 pelo AWS Console ou CLI antes de prosseguir, você não pode criar um delivery stream do Firehose sem um.

## Configure uma função IAM para o Data Firehose

Crie uma função IAM que permita ao Data Firehose gravar no bucket S3 e, opcionalmente, no CloudWatch Logs para registro de erros de entrega. Use a seguinte política de confiança:

<CodeGroup>
  ```json JSON theme={null}
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  ```
</CodeGroup>

Atribua a seguinte política de permissões à função como uma política inline.

<Note>
  Veja [Adicionando permissões de identidade
  IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)
  para instruções sobre como criar políticas inline para funções IAM.
</Note>

<CodeGroup>
  ```json JSON theme={null}
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "s3:AbortMultipartUpload",
          "s3:GetBucketLocation",
          "s3:GetObject",
          "s3:ListBucket",
          "s3:ListBucketMultipartUploads",
          "s3:PutObject"
        ],
        "Resource": [
          "arn:aws:s3:::<FIREHOSE_S3_BUCKET>",
          "arn:aws:s3:::<FIREHOSE_S3_BUCKET>/*"
        ]
      },
      {
        "Effect": "Allow",
        "Action": ["logs:PutLogEvents"],
        "Resource": [
          "arn:aws:logs:<AWS_REGION>:<AWS_ACCOUNT_ID>:log-group:<FIREHOSE_LOG_GROUP>:*"
        ]
      }
    ]
  }
  ```
</CodeGroup>

Substitua os placeholders pelos seus próprios valores:

* `<AWS_ACCOUNT_ID>` — o ID da sua conta AWS.
* `<AWS_REGION>` — a região na qual seu stream Firehose será executado.
* `<FIREHOSE_S3_BUCKET>` — o bucket S3 que você criou no passo anterior.
* `<FIREHOSE_LOG_GROUP>` — o log group que o Firehose usa para **seus próprios logs de erro de entrega** (separado do log group que você quer transmitir para o AppSignal). A AWS usa a convenção `/aws/kinesisfirehose/<FIREHOSE_STREAM_NAME>`, então decida o nome do seu stream Firehose agora — você o reutilizará no próximo passo. Se você não planeja habilitar o registro de erros no stream Firehose, pode omitir totalmente a declaração `logs:PutLogEvents`.

<Note>
  Consulte [Controlling access with Amazon Data
  Firehose](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html)
  para mais informações sobre as permissões que o Data Firehose requer.
</Note>

## Crie um delivery stream do Firehose

1. Abra o console do Amazon Data Firehose e selecione **Create Firehose stream**.
2. Selecione **Direct PUT** como a origem.
3. Selecione **HTTP Endpoint** como o destino.
4. Em "Transform records", deixe a transformação de dados desativada.
5. Digite a seguinte URL como o **HTTP endpoint URL**:

<CodeGroup>
  ```shell Shell theme={null}
  https://appsignal-endpoint.net/logs/aws-kinesis
  ```
</CodeGroup>

6. Digite a chave de API da fonte de log do AppSignal obtida ao [criar uma fonte de log](/logging/configuration#creating-a-log-source) como a **Access key**. Esta é uma chave AppSignal, não uma chave de acesso AWS.
7. Em "Content encoding", ative **GZIP**.
8. Em "Backup settings", selecione o bucket S3 que você criou no passo anterior.
9. Em "Advanced settings > Service access", selecione **Choose existing IAM role** e escolha a função IAM que você criou no passo anterior.
10. (Opcional) Em "Advanced settings > Amazon CloudWatch error logging", habilite o registro de erros para usar a permissão `logs:PutLogEvents` que você concedeu no passo anterior.
11. Use o mesmo nome de stream Firehose que você referenciou ao configurar a função IAM, depois selecione **Create Firehose stream**.

Para verificar a conexão, você pode usar o botão **Test with demo data** no console do Firehose. As cargas JSON de stock-ticker que ele envia aparecem no AppSignal em **Logging** como linhas de log individuais — uma verificação ponta-a-ponta útil antes de conectar log groups reais. Você também pode observar `DeliveryToHttpEndpoint.Success` subir na aba **Monitoring** do stream Firehose.

## Configure uma função IAM para o CloudWatch

Crie uma função IAM que permita ao CloudWatch enviar logs para o delivery stream do Firehose. Use a seguinte política de confiança:

<CodeGroup>
  ```json JSON theme={null}
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": { "Service": "logs.<AWS_REGION>.amazonaws.com" },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  ```
</CodeGroup>

Atribua a seguinte política de permissões à função como uma política inline.

<Note>
  Veja [Adicionando permissões de identidade
  IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)
  para instruções sobre como criar políticas inline para funções IAM.
</Note>

<CodeGroup>
  ```json JSON theme={null}
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": ["firehose:*"],
        "Resource": [
          "arn:aws:firehose:<AWS_REGION>:<AWS_ACCOUNT_ID>:deliverystream/<FIREHOSE_DELIVERY_STREAM>"
        ]
      }
    ]
  }
  ```
</CodeGroup>

Substitua `<AWS_REGION>`, `<AWS_ACCOUNT_ID>` e `<FIREHOSE_DELIVERY_STREAM>` pelos seus próprios valores.

## Crie uma assinatura de log do CloudWatch

1. No console do CloudWatch, navegue até o log group cujos logs você quer transmitir.
2. Abra a aba **Subscription filters**.
3. Selecione **Create Amazon Data Firehose subscription filter**.
4. Escolha o delivery stream do Firehose do [passo 4](#create-a-firehose-delivery-stream) e a função IAM do [passo 5](#set-up-an-iam-role-for-cloudwatch).
5. Digite um **Subscription filter name** e selecione **Start streaming**.

Após salvar a assinatura, os logs aparecem no AppSignal sob a fonte de log que você configurou acima. Se você ver um erro ao salvar a assinatura, verifique se a função IAM no [passo 5](#set-up-an-iam-role-for-cloudwatch) usa a região, ID da conta e nome do delivery stream corretos.

Se os logs não aparecerem no AppSignal:

* Abra a aba **Monitoring** do seu stream Firehose e verifique `DeliveryToHttpEndpoint.Success`. O valor deve permanecer próximo a 1; uma queda ou zero indica que o AppSignal está rejeitando registros.
* Verifique o bucket S3 de falhas do [passo 2](#set-up-an-s3-bucket-for-failed-deliveries). Registros falhados acabam ali, e cada objeto contém o motivo da rejeição.
* Se os registros estiverem falhando com um erro de autorização, verifique se a **Access key** no stream Firehose corresponde à chave de API da sua fonte de log AppSignal.

Se ainda estiver com problemas, [entre em contato conosco](mailto:support@appsignal.com) para obter suporte.
