

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configure la ingesta de métricas mediante AWS Distro para OpenTelemetry un clúster de Amazon Elastic Kubernetes Service
<a name="AMP-onboard-ingest-metrics-OpenTelemetry"></a>

Puedes usar el recopilador AWS Distro for OpenTelemetry (ADOT) para extraer métricas de una aplicación equipada con Prometheus y enviarlas a Amazon Managed Service for Prometheus.

**nota**  
[Para obtener más información sobre el recopilador de ADOT, consulte Distro for.AWS OpenTelemetry](https://aws.amazon.com/otel/)  
Para obtener más información acerca de las aplicaciones equipadas con Prometheus, consulte [¿Cuáles son las métricas compatibles con Prometheus?](prom-compatible-metrics.md).

La recopilación de métricas de Prometheus con ADOT incluye tres OpenTelemetry componentes: el receptor Prometheus, el exportador de escritura remota de Prometheus y la extensión de autenticación Sigv4.

Puede configurar el receptor de Prometheus con la configuración de Prometheus existente para realizar la detección de servicios y el raspado de métricas. El receptor de Prometheus raspa métricas en el formato de exposición de Prometheus. Todas las aplicaciones o puntos de conexión que desee raspar deben configurarse con la biblioteca de clientes de Prometheus. El receptor de Prometheus es compatible con el conjunto completo de configuraciones de raspado y reetiquetado de Prometheus descritas en la sección [Configuración](https://prometheus.io/docs/prometheus/latest/configuration/configuration/) de la documentación de Prometheus. Puede pegar estas configuraciones directamente en las configuraciones del recopilador de ADOT.

El exportador de escritura remota de Prometheus utiliza el punto de conexión `remote_write` para enviar las métricas raspadas al espacio de trabajo del portal de administración. Las solicitudes HTTP para exportar datos se firmarán con SigV4, el AWS protocolo de autenticación segura, con la extensión de autenticación AWS Sigv4. Para obtener más información, consulte [Proceso de firma Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html). 

El recopilador descubre automáticamente los puntos de conexión de las métricas de Prometheus en Amazon EKS y utiliza la configuración de [<kubernetes\_sd\_config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config).

 La siguiente demostración es un ejemplo de esta configuración en un clúster que ejecuta Amazon Elastic Kubernetes Service o Kubernetes autoadministrado. Para realizar estos pasos, debe tener AWS credenciales de cualquiera de las posibles opciones de la cadena de AWS credenciales predeterminada. Para obtener más información, consulte [Configuración del AWS SDK for Go](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html). En esta demostración se utiliza una aplicación de muestra que se utiliza para las pruebas de integración del proceso. La aplicación de ejemplo expone las métricas en el punto de conexión `/metrics`, como la biblioteca de cliente de Prometheus.

## Requisitos previos
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-pre"></a>

Antes de comenzar con los siguientes pasos de configuración de la ingesta, debe configurar su rol de IAM para la cuenta de servicio y la política de confianza.

**Para configurar el rol de IAM para la cuenta de servicio y la política de confianza**

1. Cree el rol de IAM para la cuenta de servicio siguiendo los pasos que se indican en [Configuración de roles de servicio para la ingesta de métricas desde los clústeres de Amazon EKS](set-up-irsa.md#set-up-irsa-ingest).

   El recopilador de ADOT utilizará este rol al raspar y exportar métricas.

1. A continuación, edite la política de confianza. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/home).

1. En el panel de navegación izquierdo, selecciona **Roles** y busca el **amp-iamproxy-ingest-role**que creaste en el paso 1.

1. Elija la pestaña **Relaciones de confianza** y, a continuación, elija **Editar la relación de confianza**.

1. En el JSON de la política de confianza, reemplace `aws-amp` por `adot-col` y, a continuación, elija **Actualizar la política de confianza**. La política de confianza resultante debe ser similar a la siguiente:

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Federated": "arn:aws:iam::{{111122223333}}:oidc-provider/oidc.eks.{{us-east-1}}.amazonaws.com/id/{{EXAMPLED539D4633E53DE1B71EXAMPLE}}"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
           "StringEquals": {
             "oidc.eks.{{us-east-1}}.amazonaws.com/id/{{EXAMPLED539D4633E53DE1B71EXAMPLE}}:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account",
             "oidc.eks.{{us-east-1}}.amazonaws.com/id/{{EXAMPLED539D4633E53DE1B71EXAMPLE}}:aud": "sts.amazonaws.com"
           }
         }
       }
     ]
   }
   ```

------

1. Elija la pestaña **Permisos** y asegúrese de que la siguiente política de permisos esté asociada al rol.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "aps:RemoteWrite",
                   "aps:GetSeries",
                   "aps:GetLabels",
                   "aps:GetMetricMetadata"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

## Habilitación de la recopilación de métricas de Prometheus
<a name="AMP-onboard-ingest-metrics-OpenTelemetry-steps"></a>

**nota**  
Al crear un espacio de nombres en Amazon EKS, `alertmanager` y el exportador de nodos están deshabilitados de forma predeterminada.

**Para habilitar la recopilación de Prometheus en un clúster de Amazon EKS o Kubernetes**

1. Bifurca y clona la aplicación de muestra desde el repositorio en [aws-otel-community](https://github.com/aws-observability/aws-otel-community).

   A continuación, ejecute los siguientes comandos.

   ```
   cd ./sample-apps/prometheus-sample-app
   docker build . -t prometheus-sample-app:latest
   ```

1. Inserte esta imagen en un registro como Amazon ECR o DockerHub.

1. Implemente la aplicación de muestra en el clúster copiando esta configuración de Kubernetes y aplicándola. Cambie la imagen por la imagen que acaba de insertar reemplazando `{{PUBLIC_SAMPLE_APP_IMAGE}}` en el archivo `prometheus-sample-app.yaml`.

   ```
   curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-sample-app.yaml -o prometheus-sample-app.yaml
   kubectl apply -f prometheus-sample-app.yaml
   ```

1. Introduzca el siguiente comando para comprobar que la aplicación de muestra se ha iniciado. En el resultado del comando, verá `prometheus-sample-app` en la columna `NAME`.

   ```
   kubectl get all -n aoc-prometheus-pipeline-demo
   ```

1. Inicie una instancia predeterminada del recopilador de ADOT. Para ello, introduzca primero el siguiente comando para obtener la configuración de Kubernetes para el recopilador de ADOT.

   ```
   curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-daemonset.yaml -o prometheus-daemonset.yaml
   ```

   A continuación, edite el archivo de plantilla y reemplace el punto de conexión **remote\_write** del espacio de trabajo de Amazon Managed Service para Prometheus por `YOUR_ENDPOINT` y la región por `YOUR_REGION`. Use el punto de conexión **remote\_write** que se muestra en la consola de Amazon Managed Service para Prometheus al consultar los detalles del espacio de trabajo.

   También tendrás que cambiar tu ID de cuenta `YOUR_ACCOUNT_ID` en la sección de cuentas de servicio de la configuración de Kubernetes. AWS 

   En este ejemplo, la configuración del recopilador de ADOT utiliza una anotación (`scrape=true`) para indicar qué puntos de conexión de destino deben analizarse. Esto permite al recopilador de ADOT distinguir el punto de conexión de la aplicación de muestra de los puntos de conexión del kube-system en el clúster. Puede eliminarla de las configuraciones de reetiquetado si desea raspar otra aplicación de muestra.

1. Introduzca el siguiente comando para implementar el recopilador de ADOT.

   ```
   kubectl apply -f prometheus-daemonset.yaml
   ```

1. Introduzca el siguiente comando para comprobar que el recopilador de ADOT se ha iniciado. Busque `adot-col` en la columna `NAMESPACE`.

   ```
   kubectl get pods -n adot-col
   ```

1. Verifique que la canalización funciona mediante el exportador de registros. Nuestra plantilla de ejemplo ya está integrada con el exportador de registros. Ejecute los comandos siguientes.

   ```
   kubectl get pods -A
   kubectl logs -n adot-col {{name_of_your_adot_collector_pod}}
   ```

   Algunas de las métricas raspadas de la aplicación de muestra tendrán un aspecto semejante al de este ejemplo.

   ```
   Resource labels:
        -> service.name: STRING(kubernetes-service-endpoints)
        -> host.name: STRING(192.168.16.238)
        -> port: STRING(8080)
        -> scheme: STRING(http)
   InstrumentationLibraryMetrics #0
   Metric #0
   Descriptor:
        -> Name: test_gauge0
        -> Description: This is my gauge
        -> Unit: 
        -> DataType: DoubleGauge
   DoubleDataPoints #0
   StartTime: 0
   Timestamp: 1606511460471000000
   Value: 0.000000
   ```

1. Para comprobar si Amazon Managed Service para Prometheus ha recibido las métricas, utilice `awscurl`. [Esta herramienta le permite enviar solicitudes HTTP a través de la línea de comandos con autenticación AWS Sigv4, por lo que debe tener AWS las credenciales configuradas localmente con los permisos correctos para realizar consultas desde Amazon Managed Service for Prometheus. Para obtener instrucciones sobre `awscurl` la instalación, consulte aws.curl.](https://github.com/okigan/awscurl)

   En el siguiente comando, reemplace `AMP_REGION` y `AMP_ENDPOINT` por la información del espacio de trabajo de Amazon Managed Service para Prometheus. 

   ```
   awscurl --service="aps" --region="{{AMP_REGION}}" "https://{{AMP_ENDPOINT}}/api/v1/query?query=adot_test_gauge0"
   {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"adot_test_gauge0"},"value":[1606512592.493,"16.87214000011479"]}]}}
   ```

   Si recibe una métrica como respuesta, significa que la configuración de la canalización se ha realizado correctamente y que la métrica se ha propagado correctamente desde la aplicación de muestra a Amazon Managed Service para Prometheus.

**Limpieza**

Para limpiar esta demostración, introduzca los siguientes comandos.

```
kubectl delete namespace aoc-prometheus-pipeline-demo
kubectl delete namespace adot-col
```

## Configuración avanzada
<a name="AMP-otel-advanced"></a>

El receptor de Prometheus es compatible con el conjunto completo de configuraciones de raspado y reetiquetado de Prometheus descritas en la sección [Configuración](https://prometheus.io/docs/prometheus/latest/configuration/configuration/) de la documentación de Prometheus. Puede pegar estas configuraciones directamente en las configuraciones del recopilador de ADOT. 

La configuración del receptor de Prometheus incluye las configuraciones de detección de servicios, raspado y reetiquetado. La configuración del receptor tienen el aspecto siguiente.

```
receivers:
  prometheus:
    config:
      [{{[Your Prometheus configuration]}}]
```

A continuación, se muestra una configuración de ejemplo.

```
receivers:
  prometheus:
    config:
      global:
        scrape_interval: 1m
        scrape_timeout: 10s
        
      scrape_configs:
      - job_name: kubernetes-service-endpoints
        sample_limit: 10000
        kubernetes_sd_configs:
        - role: endpoints
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          insecure_skip_verify: true
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
```

Si ya dispone de una configuración de Prometheus, debe reemplazar los caracteres `$` por `$$` para evitar que los valores se sustituyan por variables de entorno. \*Esto es especialmente importante para el valor de reemplazo de las relabel\_configurations. Por ejemplo, si comienza con la siguiente relabel\_configuration:

```
relabel_configs:
- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
  regex: (.+);(.+);(.+)
  replacement: ${1}://${2}${3}
  target_label: __param_target
```

Se convertiría en lo siguiente:

```
relabel_configs:
- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
  regex: (.+);(.+);(.+)
  replacement: $${1}://${2}${3}
  target_label: __param_target
```

**Exportador de escritura remota y extensión de autenticación SigV4 de Prometheus**

La configuración del exportador de escritura remota y la extensión de autenticación SigV4 de Prometheus es más sencilla que la del receptor de Prometheus. En esta fase de la canalización, ya se han incorporado las métricas y lo tenemos todo listo para exportar estos datos a Amazon Managed Service para Prometheus. En el siguiente ejemplo se muestra el requisito mínimo para que la configuración se comunique correctamente con Amazon Managed Service para Prometheus.

```
extensions:
  sigv4auth:
    service: "aps"
    region: "user-region"
exporters:
  prometheusremotewrite:
    endpoint: "https://aws-managed-prometheus-endpoint/api/v1/remote_write"
    auth:
      authenticator: "sigv4auth"
```

Esta configuración envía una solicitud HTTPS firmada por AWS SigV4 con AWS las credenciales de la cadena de AWS credenciales predeterminada. Para obtener más información, consulte [Configuración de la AWS SDK para Go](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html). Debe especificar el nombre del servicio como `aps`.

Independientemente del método de implementación, el recopilador de ADOT debe tener acceso a una de las opciones enumeradas en la cadena de AWS credenciales predeterminada. La extensión de autenticación Sigv4 depende de la extensión de autenticación Sigv4 AWS SDK para Go y la utiliza para obtener credenciales y autenticarse. Debe asegurarse de que estas credenciales tengan permisos de escritura remota para Amazon Managed Service para Prometheus. 