Configurar la ingesta de métricas mediante AWS Distro para OpenTelemetry un clúster de Amazon Elastic Kubernetes Service - Servicio administrado por Amazon para Prometheus

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.

Configurar la ingesta de métricas mediante AWS Distro para OpenTelemetry un clúster de Amazon Elastic Kubernetes Service

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

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

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

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

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.

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

  2. A continuación, edite la política de confianza. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

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

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

  5. 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:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/openid" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/openid:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account" } } } ] }
  6. Elija la pestaña Permisos y asegúrese de que la siguiente política de permisos esté asociada al rol.

    { "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

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 del repositorio en aws-otel-community.

    A continuación, ejecute los siguientes comandos.

    cd ./sample-apps/prometheus-sample-app docker build . -t prometheus-sample-app:latest
  2. Inserte esta imagen en un registro como Amazon ECR o DockerHub.

  3. 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
  4. 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
  5. 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.

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

    kubectl apply -f prometheus-daemonset.yaml
  7. 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
  8. 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
  9. 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.

    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

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 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 las credenciales de la cadena de credenciales AWS predeterminada. AWS Para obtener más información, consulte Configuración de la AWS SDK for Go. 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 for 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.