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 ADOT de Prometheus incluye OpenTelemetry tres 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 de Collector. 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 HTTP solicitudes de exportación de datos se firmarán con AWS SiGv4, el AWS protocolo de autenticación segura, con la extensión de autenticación Sigv4. Para obtener más información, consulte Proceso de firma Signature Version 4.

El recopilador descubre automáticamente los puntos finales de las métricas de Prometheus en EKS Amazon y utiliza la configuración que se encuentra en. <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 credenciales predeterminada AWS . Para obtener más información, consulte Configuración de 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 ingestión, debe configurar su IAM función para la cuenta de servicio y la política de confianza.

Para configurar el IAM rol de la cuenta de servicio y la política de confianza
  1. Cree el IAM rol de la cuenta de servicio siguiendo los pasos que se indican enConfiguración de roles de servicio para la ingesta de métricas desde los clústeres de Amazon EKS.

    El ADOT recopilador utilizará esta función cuando extraiga y exporte métricas.

  2. A continuación, edite la política de confianza. Abre la IAM consola 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 la política de relaciones de confianzaJSON, aws-amp sustitúyala por adot-col y, a continuación, selecciona Actualizar 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

Cuando creas un espacio de nombres en AmazonEKS, alertmanager el exportador de nodos está deshabilitado de forma predeterminada.

Para habilitar la colección de Prometheus en un clúster de Amazon EKS o Kubernetes
  1. Bifurque y clone la aplicación de muestra desde el repositorio de. aws-otel-community

    A continuación, ejecute los siguientes comandos.

    cd ./sample-apps/prometheus-sample-app docker build . -t prometheus-sample-app:latest
  2. Envía esta imagen a 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 ADOT recopilador. Para ello, introduzca primero el siguiente comando para obtener la configuración de Kubernetes para Collector. 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 de ADOT Collector usa una anotación (scrape=true) para indicar qué puntos finales de destino se deben analizar. Esto permite al ADOT recopilador distinguir el punto final de la aplicación de muestra de los puntos finales del sistema Kube del clúster. Puede eliminarla de las configuraciones de reetiquetado si desea raspar otra aplicación de muestra.

  6. Introduce el siguiente comando para implementar el recopilador. ADOT

    kubectl apply -f prometheus-daemonset.yaml
  7. Introduzca el siguiente comando para comprobar que el ADOT recopilador 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 HTTP solicitudes 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 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

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 de Collector. 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 HTTPS solicitud 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 for Go. Debe especificar el nombre del servicio como aps.

Independientemente del método de implementación, el ADOT recopilador 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 las credenciales y autenticarse. Debe asegurarse de que estas credenciales tengan permisos de escritura remota para Amazon Managed Service para Prometheus.