

# Coletor do OpenTelemetry
<a name="CloudWatch-OTLPSimplesetup"></a>

O OpenTelemetry Collector é um agente de código aberto, independente de fornecedor, que recebe, processa e exporta dados de telemetria. Ele atua como um pipeline central entre suas aplicações e o Amazon CloudWatch, coletando métricas, logs e rastreamentos de várias fontes e enviando-os para o CloudWatch usando o OpenTelemetry Protocol (OTLP).

Usar o OpenTelemetry Collector com o CloudWatch oferece os seguintes benefícios:
+ Colete telemetria de várias aplicações e hosts por meio de um único agente, reduzindo o número de conexões com o CloudWatch.
+ Processe e filtre a telemetria antes de enviá-la ao CloudWatch, incluindo adicionar ou remover atributos, agrupar dados em lotes e rastrear amostras.
+ Use a mesma configuração de coletor em ambientes on-premises, da AWS e outros de nuvem, fornecendo um pipeline de telemetria consistente, independentemente de onde suas aplicações sejam executadas.
+ Envie métricas para o CloudWatch com rótulos ricos que estão disponíveis para consulta usando ao Prometheus Query Language (PromQL) no CloudWatch Query Studio.

## Receptores compatíveis
<a name="CloudWatch-OTLPSupportedReceivers"></a>

O OpenTelemetry Collector é compatível com uma ampla variedade de receptores para ingestão de dados de telemetria. Você pode usar receptores do OpenTelemetry, como o receptor do OTLP, para aplicações instrumentadas com OpenTelemetry SDKs, ou receptores do Prometheus, para extrair métricas de exportadores existentes do Prometheus. Os receptores comuns do Prometheus usados com o CloudWatch incluem:
+ Receptor do Prometheus, para extrair qualquer endpoint compatível com o Prometheus
+ Receptor de métricas do host, para coletar métricas em nível de sistema do host
+ Receptor de clusters do Kubernetes, para coletar métricas em nível de cluster do servidor da API do Kubernetes

Você pode configurar vários receptores em um único coletor, o que permite coletar as métricas do OpenTelemetry e do Prometheus e enviá-las ao CloudWatch por meio do mesmo pipeline. Para ver a lista completa dos receptores disponíveis, consulte o [repositório](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver) do OpenTelemetry Collector.

## Introdução
<a name="CloudWatch-OTLPSimplesetupGettingStarted"></a>

Pré-requisito: se for usar o endpoint do OTLP para rastreamento, certifique-se de que a Pesquisa de transações esteja habilitada.

Etapas:

1. Faça o download da versão mais recente da distribuição do OpenTelemetry Collector. Para obter mais informações, consulte as [versões](https://github.com/open-telemetry/opentelemetry-collector-releases/releases) do OpenTelemetry Collector.

1. Instale o OpenTelemetry Collector no seu host. O coletor é executado em qualquer plataforma e sistema operacional. Para obter mais informações, consulte [Install the Collector](https://opentelemetry.io/docs/collector/installation/).

1. Configure as credenciais da AWS no host do Amazon EC2 ou on-premises. O coletor usa essas credenciais para se autenticar com o CloudWatch ao enviar dados de telemetria. Consulte abaixo para obter detalhes.

------
#### [ Setup IAM permissions for Amazon EC2 ]

**Siga o procedimento abaixo para anexar a política `CloudWatchAgentServerPolicy` do IAM ao perfil do IAM da instância do Amazon EC2.**

   1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Escolha **Perfis** e localize e selecione o perfil usado pela instância do Amazon EC2.

   1. Na guia **Permissões**, escolha **Adicionar permissões** e **Anexar políticas**.

   1. Usando a caixa de pesquisa, pesquise a política `CloudWatchAgentServerPolicy`.

   1. Selecione a política **CloudWatchAgentServerPolicy** e escolha **Adicionar permissões**.

------
#### [ Setup IAM permissions for on-premise hosts ]

**Você pode criar o usuário do IAM a ser usado para fornecer permissões aos hosts on-premises.**

   1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Escolha **Usuários**, **Criar usuário**.

   1. Em **Detalhes do usuário**, em **Nome do usuário**, insira um nome para o novo usuário do IAM. Esse é o nome de login para a AWS que será usado para autenticar seu host.

   1. Escolha **Próximo**.

   1. Na página **Definir permissões**, em **Opções de permissões**, escolha **Anexar políticas diretamente**.

   1. Na lista de **Políticas de permissões**, selecione a política **CloudWatchAgentServerPolicy** para adicionar ao seu usuário.

   1. Escolha **Próximo**.

   1. Na página **Revisar e criar**, certifique-se de que você está satisfeito com o nome de usuário e que a política **CloudWatchAgentServerPolicy** está no **Resumo de permissões**.

   1. Selecione **Criar usuário**.

   1. **Crie e recupere a chave secreta e a chave de acesso da AWS**: no painel de navegação do console do IAM, escolha **Usuários** e depois selecione o nome do usuário do usuário que você criou na etapa anterior.

   1. Na página do usuário, escolha a guia **Credenciais de segurança**.

   1. Na seção **Chaves de acesso**, escolha **Criar chave de acesso**.

   1. Em **Criar chave de acesso: etapa 1**, escolha **Command Line Interface (CLI)**.

   1. Em **Criar chave de acesso: etapa 2**, insira uma tag opcional e escolha **Próximo**.

   1. Em **Criar chave de acesso: etapa 3**, selecione **Baixar arquivo .csv** para salvar um arquivo .csv com a chave de acesso e a chave de acesso secreta do usuário do IAM. Você precisará dessas informações para as próximas etapas.

   1. Selecione **Concluído**.

   1. Configure suas credenciais da AWS no host on-premises ao inserir o comando a seguir. Substitua *ACCESS\$1KEY\$1ID* e *SECRET\$1ACCESS\$1ID* pela chave de acesso recém-gerada e pela chave de acesso secreta do arquivo .csv que você baixou na etapa anterior.

      ```
      $ aws configure
      AWS Access Key ID [None]: ACCESS_KEY_ID
      AWS Secret Access Key [None]: SECRET_ACCESS_ID
      Default region name [None]: MY_REGION
      Default output format [None]: json
      ```

------

1. Configure as credenciais da AWS para os clusters do Amazon EKS ou do Kubernetes. A maneira mais fácil de começar a usar o Amazon EKS é usar o complemento EKS OTel Container Insights. Se preferir usar o OpenTelemetry Collector diretamente, siga o procedimento abaixo para configurar as credenciais da AWS para os clusters do Amazon EKS ou do Kubernetes para enviar telemetria para o CloudWatch.

------
#### [ Setup IAM permissions for Amazon EKS ]

   1. Crie um provedor de identidade OIDC do IAM para o cluster com o comando a seguir. 

      ```
      eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} --region ${REGION} --approve
      ```

   1. Atribua perfis do IAM à conta de serviço do Kubernetes para o OTel Collector usando o comando a seguir.

      ```
      eksctl create iamserviceaccount \
      --name ${COLLECTOR_SERVICE_ACCOUNT}\
      --namespace ${NAMESPACE} \
      --cluster ${CLUSTER_NAME} \
      --region ${REGION} \
      --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
      --approve \
      --override-existing-serviceaccounts
      ```

------
#### [ Setup IAM permissions for Kubernetes ]

   1. Configure suas credenciais da AWS no host on-premises ao inserir o comando a seguir. Substitua *ACCESS\$1KEY\$1ID* e *SECRET\$1ACCESS\$1ID* pela chave de acesso recém-gerada e pela chave de acesso secreta do arquivo .csv que você baixou na etapa anterior. Por padrão, o arquivo de credenciais é salvo em */home/user/.aws/credentials*.

      ```
      aws configure
      AWS Access Key ID [None]: ACCESS_KEY_ID 
      AWS Secret Access Key [None]: SECRET_ACCESS_ID 
      Default region name [None]: MY_REGION 
      Default output format [None]: json
      ```

   1. Edite o recurso OpenTelemetry Collector para adicionar o segredo de credenciais da AWS recém-criado usando o seguinte comando: `kubectl edit OpenTelemetryCollector otel_collector` 

   1. Usando o editor de arquivos, inclua as credenciais da AWS no contêiner do OpenTelemetryCollector adicionando a configuração a seguir na parte superior da implantação. Substitua o caminho */home/user/.aws/credentials* pelo local do seu arquivo local de credenciais da AWS. 

      ```
                           spec:
                          volumeMounts:
                          - mountPath: /rootfs
                          volumeMounts:
                          - name: aws-credentials
                          mountPath: /root/.aws
                          readOnly: true
                          volumes:
                          - hostPath:
                          path: /home/user/.aws/credentials
                          name: aws-credentials
      ```

------

1. Configure o exportador do OTLP na configuração do coletor para enviar telemetria ao endpoint do CloudWatch. Veja exemplos abaixo.

## Exemplos de configuração do coletor
<a name="CloudWatch-OTLPSimplesetupConfigureCollector"></a>

Copie e cole o conteúdo abaixo para configurar o coletor com o objetivo de enviar logs e rastreamentos ao endpoint do OTLP.

```
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

exporters:
  otlphttp/logs:
    compression: gzip
    logs_endpoint: logs_otlp_endpoint
    headers: 
      x-aws-log-group: ency_log_group
      x-aws-log-stream: default
    auth:
      authenticator: sigv4auth/logs
      
  otlphttp/traces:
    compression: gzip
    traces_endpoint: traces_otlp_endpoint
    auth:
      authenticator: sigv4auth/traces

extensions:
  sigv4auth/logs:
    region: "region"
    service: "logs"
  sigv4auth/traces:
    region: "region"
    service: "xray"

service:
  telemetry:
  extensions: [sigv4auth/logs, sigv4auth/traces]
  pipelines:
    logs:
      receivers: [otlp]
      exporters: [otlphttp/logs]
    traces:
      receivers: [otlp]
      exporters: [otlphttp/traces]
```

Veja a seguir um exemplo de como enviar logs e rastreamentos usando sigv4 para us-east-1.

```
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

exporters:
  otlphttp/logs:
    compression: gzip
    logs_endpoint: https://logs.us-east-1.amazonaws.com/v1/logs
    headers: 
      x-aws-log-group: MyApplicationLogs
      x-aws-log-stream: default
    auth:
      authenticator: sigv4auth/logs
      
  otlphttp/traces:
    compression: gzip
    traces_endpoint: https://xray.us-east-1.amazonaws.com/v1/traces
    auth:
      authenticator: sigv4auth/traces

extensions:
  sigv4auth/logs:
    region: "us-east-1"
    service: "logs"
  sigv4auth/traces:
    region: "us-east-1"
    service: "xray"

service:
  telemetry:
  extensions: [sigv4auth/logs, sigv4auth/traces]
  pipelines:
    logs:
     receivers: [otlp]
      exporters: [otlphttp/logs]
    traces:
      receivers: [otlp]
      exporters: [otlphttp/traces]
```

**nota**  
Configure os SDKs do OpenTelemetry com uma configuração de amostragem *always\$1on* para registrar de forma confiável 100% de extensões e obter visibilidade total das aplicações críticas com o CloudWatch Application Signals. Para obter mais informações, consulte um exemplo de [configuração do sampler do SDK Java do OpenTelemetry](https://opentelemetry.io/docs/languages/java/sdk/#sampler). Para obter um exemplo sobre como configurar o OpenTelemetry Collector com o endpoint do OTLP do X-Ray, consulte o repositório de [demonstração de sinais de aplicações](https://github.com/aws-observability/application-signals-demo/blob/main/scripts/opentelemetry/otel_simple_setup/opentelemetry.yaml).

Copie e cole o conteúdo abaixo para configurar o coletor com o objetivo de enviar métricas para endpoints do OTLP.

```
receivers:
  otlp:
    protocols:
      http:
        endpoint: "0.0.0.0:4318"

processors:
  batch:
    send_batch_size: 200
    timeout: 10s

exporters:
  otlphttp:
    tls:
      insecure: false
    endpoint: metrics_otlp_endpoint
    auth:
      authenticator: sigv4auth

extensions:
  sigv4auth:
    service: "monitoring"
    region: "region"

service:
  extensions: [sigv4auth]
  pipelines:
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlphttp]
```

Confira a seguir um exemplo de como enviar métricas usando sigv4 para us-east-1.

```
receivers:
  otlp:
    protocols:
      http:
        endpoint: "0.0.0.0:4318"

processors:
  batch:
    send_batch_size: 200
    timeout: 10s

exporters:
  otlphttp:
    tls:
      insecure: false
    endpoint: "https://monitoring.us-east-1.amazonaws.com/v1/metrics:443"
    auth:
      authenticator: sigv4auth

extensions:
  sigv4auth:
    service: "monitoring"
    region: "us-east-1"

service:
  extensions: [sigv4auth]
  pipelines:
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlphttp]
```