

# Recolector de OpenTelemetry
<a name="CloudWatch-OTLPSimplesetup"></a>

OpenTelemetry Collector es un agente de código abierto, independiente del proveedor, que recibe, procesa y exporta datos de telemetría. Actúa como un canal central entre sus aplicaciones y Amazon CloudWatch, ya que recopila métricas, registros y seguimientos de varios orígenes y los envía a CloudWatch mediante OpenTelemetry Protocol (OTLP).

Usar OpenTelemetry Collector con CloudWatch proporciona los siguientes beneficios:
+ Recopile la telemetría de varias aplicaciones y hosts a través de un único agente, lo que reduce el número de conexiones a CloudWatch.
+ Procese y filtre la telemetría antes de enviarla a CloudWatch, lo que incluye agregar o eliminar atributos, agrupar datos por lotes y muestrear seguimientos.
+ Utilice la misma configuración de recopilador en AWS, en entornos locales y en otros entornos de nube, lo que proporciona una canalización de los datos telemétricos consistente independientemente del lugar en el que funcionen las aplicaciones.
+ Envíe las métricas a CloudWatch con etiquetas enriquecidas que estén disponibles para consultarlas mediante el lenguaje de consultas Prometheus (PromQL) en CloudWatch Query Studio.

## Receptores compatibles
<a name="CloudWatch-OTLPSupportedReceivers"></a>

OpenTelemetry Collector admite una amplia gama de receptores para la ingesta de datos de telemetría. Puede utilizar receptores de OpenTelemetry, como el receptor OTLP para aplicaciones equipadas con los SDK de OpenTelemetry, o los receptores Prometheus para extraer métricas de los exportadores Prometheus existentes. Algunos de los receptores Prometheus más comunes que se utilizan con CloudWatch son los siguientes:
+ Receptor Prometheus para rastrear cualquier punto de conexión compatible con Prometheus
+ Receptor de métricas del host, para recopilar métricas del sistema desde el host
+ Receptor Kubernetes Cluster, para recopilar métricas de clúster del servidor API de Kubernetes

Puede configurar varios receptores en un único recopilador, lo que le permite recopilar métricas de OpenTelemetry y Prometheus y enviarlas a CloudWatch a través de la misma canalización. Para ver la lista completa de receptores disponibles, consulte el [repositorio](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver) de OpenTelemetry Collector.

## Introducción
<a name="CloudWatch-OTLPSimplesetupGettingStarted"></a>

Requisito previo: si usa el punto de conexión de OTLP para hacer seguimientos, asegúrese de activar Transaction Search.

Pasos:

1. Descargue la última versión de la distribución de OpenTelemetry Collector. Para obtener más información sobre OpenTelemetry Collector, consulte las [versiones](https://github.com/open-telemetry/opentelemetry-collector-releases/releases) de OpenTelemetry Collector.

1. Instale OpenTelemetry Collector en su host. El recopilador funciona en cualquier sistema operativo y plataforma. Para obtener más información, consulte [Install the Collector](https://opentelemetry.io/docs/collector/installation/).

1. Configure las credenciales de AWS en Amazon EC2 o en el host en las instalaciones. El recopilador usa estas credenciales para autenticarse con CloudWatch al enviar datos de telemetría. Para obtener más información, consulte a continuación.

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

**Siga el procedimiento que se indica a continuación para adjuntar la política de IAM `CloudWatchAgentServerPolicy` al rol de IAM de la instancia de Amazon EC2.**

   1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Elija **Roles** y busque y seleccione el rol que usa la instancia de Amazon EC2.

   1. En la pestaña **Permisos**, elija **Agregar permisos**, **Vincular políticas**.

   1. En el cuadro de búsqueda, busque la política `CloudWatchAgentServerPolicy`.

   1. Seleccione la política **CloudWatchAgentServerPolicy** y elija **Agregar permisos.**

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

**Puede crear un usuario de IAM que se puede utilizar para conceder los permisos a los hosts en las instalaciones.**

   1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Seleccione **Usuarios**, **Crear nuevos usuarios**.

   1. En **Detalles del usuario**, en **Nombre de usuario**, introduzca un nombre para el nuevo usuario de IAM. Este es su nombre de inicio de sesión de AWS y lo utilizará para autenticar su host.

   1. Elija **Siguiente**.

   1. En la página **Establecer permisos**, en **Opciones de permisos**, seleccione **Adjuntar políticas directamente**.

   1. En la lista de **Políticas de permisos**, seleccione la política **CloudWatchAgentServerPolicy** para agregarla a su usuario.

   1. Elija **Siguiente**.

   1. En la página **Revisar y crear**, asegúrese de que haya decidido satisfactoriamente el nombre de usuario y de que la política **CloudWatchAgentServerPolicy** aparezca en **Resumen de permisos**.

   1. Seleccione la opción **Crear un usuario**.

   1. **Cree y recupere su clave de acceso y su clave secreta de AWS**: en el panel de navegación de la consola de IAM, elija **Usuarios** y, a continuación, seleccione el nombre de usuario que creó en el paso anterior.

   1. En la página del usuario, seleccione la pestaña **Credenciales de seguridad**.

   1. En la sección **Claves de acceso**, elija **Crear clave de acceso**.

   1. En el **paso 1 de Crear clave de acceso**, elija **Interfaz de línea de comandos (CLI)**.

   1. En el **Paso 2 de Crear clave de acceso**, como opción, introduzca una etiqueta y seleccione **Siguiente**.

   1. En el **Paso 3 de Crear clave de acceso**, seleccione **Descargar archivo .csv** para guardar un archivo .cvs con la clave de acceso y la clave de acceso secreta de su usuario de IAM. Necesita esta información para los siguientes pasos.

   1. Seleccione **Listo**.

   1. Introduzca el siguiente comando para configurar sus credenciales de AWS en su host en las instalaciones. Sustituya *ACCESS\$1KEY\$1ID * y *SECRET\$1ACCESS\$1ID* por la clave de acceso y la clave de acceso secreta generadas recientemente y que se encuentran en archivo .csv que descargó en el paso 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 las credenciales de AWS para los clústeres de Amazon EKS o Kubernetes. La forma más sencilla de comenzar a utilizar Amazon EKS es utilizar el complemento de Información de contenedores con OpenTelemetry de EKS. Si prefiere usar OpenTelemetry Collector directamente, siga el procedimiento que se explica a continuación para configurar las credenciales de AWS de los clústeres de Amazon EKS o Kubernetes para enviar datos de telemetría a CloudWatch.

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

   1. Cree un proveedor de identidades de OIDC de IAM para el clúster mediante el siguiente comando. 

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

   1. Asigne roles de IAM a la cuenta de servicio de Kubernetes para OTel Collector mediante el siguiente comando.

      ```
      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. Introduzca el siguiente comando para configurar sus credenciales de AWS en su host en las instalaciones. Sustituya *ACCESS\$1KEY\$1ID * y *SECRET\$1ACCESS\$1ID* por la clave de acceso y la clave de acceso secreta generadas recientemente y que se encuentran en archivo .csv que descargó en el paso anterior. De forma predeterminada, el archivo de credenciales se guarda en */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 el recurso de OpenTelemetry Collector para agregar el secreto de credenciales de AWS creado recientemente mediante el comando `kubectl edit OpenTelemetryCollector otel_collector`. 

   1. Con el editor de archivos, agregue la siguiente configuración en la parte superior de la implementación para agregar las credenciales de AWS en el contenedor de OpenTelemetry Collector. Sustituya la ruta */home/user/.aws/credentials* por la ubicación del archivo local de credenciales de 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 el exportador de OTLP en la configuración del recopilador para enviar datos de telemetría al punto de conexión de CloudWatch. Consulte los ejemplos que aparecen a continuación.

## Ejemplos de configuración del recopilador
<a name="CloudWatch-OTLPSimplesetupConfigureCollector"></a>

Copie y pegue el contenido siguiente para configurar el recopilador de modo que envíe los registros y seguimientos al punto de conexión de 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]
```

A continuación se muestra un ejemplo de envío de registros y seguimientos mediante sigv4 a 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 los SDK de OpenTelemetry con una configuración de muestreo *always\$1on* para registrar de forma fiable el 100 % de las unidades de seguimiento y obtener una visibilidad total de las aplicaciones críticas con CloudWatch Application Signals. Para obtener más información, consulte un ejemplo de [Configuración de una muestra del SDK de Java de OpenTelemetry](https://opentelemetry.io/docs/languages/java/sdk/#sampler). Para ver un ejemplo sobre cómo configurar OpenTelemetry Collector con un punto de conexión de OTLP de X-Ray, consulte el repositorio [application signals demo](https://github.com/aws-observability/application-signals-demo/blob/main/scripts/opentelemetry/otel_simple_setup/opentelemetry.yaml).

Copie y pegue el contenido siguiente para configurar el recopilador de modo que envíe las métricas a los puntos de conexión de 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]
```

A continuación se muestra un ejemplo de envío de métricas mediante sigv4 a 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]
```