Métricas de Prometheus - Amazon EKS

Métricas de Prometheus

Prometheus es una base de datos de serie temporal y de monitoreo que recopila puntos de conexión. Ofrece la posibilidad de consultar, agregar y almacenar los datos recopilados. También se puede utilizar para la generación de alertas y su agregación. En este tema se explica cómo configurar Prometheus como una opción gestionada o de código abierto. La monitorización de las métricas del plano de control de Amazon EKS es un caso de uso común.

Amazon Managed Service for Prometheus es un servicio de supervisión y alertas compatible con Prometheus que facilita el monitoreo de las aplicaciones y la infraestructura en contenedores a escala. Es un servicio totalmente administrado que escala automáticamente la ingesta, el almacenamiento, las consultas y las alertas de sus métricas. También se integra con servicios de seguridad de AWS para permitir un acceso rápido y seguro a sus datos. Puede utilizar el lenguaje de consulta ProMQL de código abierto para consultar sus métricas y crear alertas sobre ellas.

Para obtener más información sobre cómo utilizar las métricas de Prometheus después de activarlas, consulte la Guía del usuario de Amazon Managed Service for Prometheus.

Active las métricas de Prometheus al crear un clúster

importante

Los recursos de Amazon Managed Service para Prometheus están fuera del ciclo de vida del clúster y deben mantenerse por fuera del clúster. Al eliminar el clúster, asegúrese de eliminar, también, cualquier raspador para reducir los costes aplicables. Para más información, consulte Búsqueda y eliminación de rapsadores en la Guía de usuario de Amazon Managed Service para Prometheus.

Al crear un clúster nuevo, puede activar la opción de enviar métricas a Prometheus. En la AWS Management Console, esta opción se encuentra en el paso Configurar la observabilidad, que consiste en crear un clúster nuevo. Para obtener más información, consulte Creación de un clúster de Amazon EKS.

Prometheus descubre y recopila las métricas de su clúster mediante un modelo basado en la extracción denominado raspado. Los raspadores están configurados para recopilar datos de la infraestructura del clúster y de las aplicaciones en contenedores.

Al activar la opción de enviar métricas de Prometheus, Amazon Managed Service for Prometheus proporciona un rastreador sin agentes totalmente gestionado. Use las siguientes opciones de configuración avanzada para personalizar el raspador predeterminado según sea necesario.

Alias de raspador

(Opcional) Escriba un alias único para el raspador.

Destino

Elija un espacio de trabajo de Amazon Managed Service para Prometheus. Un espacio de trabajo es un espacio lógico dedicado al almacenamiento y la consulta de las métricas de Prometheus. Con este espacio de trabajo, podrá ver las métricas de Prometheus de las cuentas que tienen acceso a él. La opción Crear un nuevo espacio de trabajo indica a Amazon EKS que cree un espacio de trabajo en su nombre con el alias de espacio de trabajo que usted proporcione. Con la opción Seleccionar un espacio de trabajo existente, puede seleccionar un espacio de trabajo existente de una lista desplegable. Para obtener más información sobre los espacios de trabajo, consulte Gestión de espacios de trabajo en la Guía del usuario de Amazon Managed Service for Prometheus.

Acceso a los servicios

En esta sección se resumen los permisos que se conceden al enviar métricas de Prometheus:

  • Permiso para que Amazon Managed Service for Prometheus describa el clúster de Amazon EKS

  • Permiso para la escritura remota en el espacio de trabajo de Amazon Managed Prometheus

Si el AmazonManagedScraperRole ya existe, el raspador lo usa. Elija el enlace de AmazonManagedScraperRole para ver los detalles del permiso. Si el AmazonManagedScraperRole aún no existe, seleccione el enlace Ver detalles del permiso para ver los permisos específicos que está concediendo mediante el envío de las métricas de Prometheus.

Subredes

Vea las subredes que heredará el raspador. Si necesita cambiarlas, vuelva al paso de creación del clúster de Especificar red.

Grupos de seguridad

Vea los grupos de seguridad que heredará el raspador. Si necesita cambiarlas, vuelva al paso de creación del clúster de Especificar red.

Configuración del raspador

Modifique la configuración del raspador en formato YAML según sea necesario. Para ello, utilice el formulario o cargue un archivo YAML de reemplazo. Para obtener más información, consulte Configuración del raspador en la Guía del usuario de Amazon Managed Service for Prometheus.

Amazon Managed Service for Prometheus hace referencia al raspador sin agente que se crea junto con el clúster como recopilador gestionado de AWS. Para obtener más información sobre los recopiladores gestionados por AWS, consulte los recopiladores gestionados por AWS en la Guía del usuario de Amazon Managed Service for Prometheus.

importante

Debe configurar sus aws-auth ConfigMap para conceder al rastreador permisos dentro del clúster. Para obtener más información, consulte Configuración del clúster de Amazon EKS en la Guía del usuario de Amazon Managed Service for Prometheus.

Visualización de los detalles del raspador de Prometheus

Tras crear un clúster con la opción de métricas de Prometheus activada, podrá ver los detalles del raspador de Prometheus. Cuando vea su clúster en la AWS Management Console, seleccione la pestaña Observabilidad. En una tabla se muestra una lista de los raspadores del clúster, que incluye información como el ID, el alias, el estado y la fecha de creación del raspador.

Para ver más detalles sobre el raspador, elija un enlace de ID del raspador. Por ejemplo, puede ver la configuración del raspador, el nombre de recurso de Amazon (ARN), la URL de escritura remota y la información de la red. Puedes usar el identificador del raspador como entrada en Amazon Managed Service para operaciones de la API de Prometheus, como DescribeScraper y DeleteScraper. También puede utilizar la API para crear más raspadores.

Para obtener más información sobre el uso de la API de Prometheus, consulte la Referencia de API de Amazon Managed Service for Prometheus.

Implementación de Prometheus mediante Helm

Como alternativa, puede realizar la implementación de Prometheus en su clúster con la versión 3 de Helm. Si ya ha instalado Helm, puede comprobar su versión con el comando helm version. Helme s un administrador de paquetes para clústeres Kubernetes. Para obtener más información sobre Helm y sobre cómo instalarlo, consulte Utilizar Helm con Amazon EKS.

Después de configurar Helm para su clúster de Amazon EKS, puede utilizarlo para implementar Prometheus con los pasos que se describen a continuación.

Para implementar Prometheus usando Helm
  1. Cree un espacio de nombres de Prometheus.

    kubectl create namespace prometheus
  2. Agregue el repositorio de gráficos de prometheus-community.

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  3. Implemente Prometheus.

    helm upgrade -i prometheus prometheus-community/prometheus \ --namespace prometheus \ --set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"
    nota

    Si recibe el error Error: failed to download "stable/prometheus" (hint: running `helm repo update` may help) al ejecutar este comando, ejecute helm repo update prometheus-community y, a continuación, vuelva a ejecutar el comando del Paso 2.

    Si recibe el error Error: rendered manifests contain a resource that already exists, ejecute helm uninstall your-release-name -n namespace y, a continuación, vuelva a ejecutar el comando del Paso 3.

  4. Compruebe que todos los Pods en el espacio de nombres de prometheus se encuentran en estado READY.

    kubectl get pods -n prometheus

    Un ejemplo de salida sería el siguiente.

    NAME READY STATUS RESTARTS AGE prometheus-alertmanager-59b4c8c744-r7bgp 1/2 Running 0 48s prometheus-kube-state-metrics-7cfd87cf99-jkz2f 1/1 Running 0 48s prometheus-node-exporter-jcjqz 1/1 Running 0 48s prometheus-node-exporter-jxv2h 1/1 Running 0 48s prometheus-node-exporter-vbdks 1/1 Running 0 48s prometheus-pushgateway-76c444b68c-82tnw 1/1 Running 0 48s prometheus-server-775957f748-mmht9 1/2 Running 0 48s
  5. Utilice kubectl para el enrutamiento del puerto de la consola de Prometheus a su equipo local.

    kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090
  6. Apunte un navegador web a http://localhost:9090 para ver la consola de Prometheus.

  7. Elija una métrica del menú - insert metric at cursor (- insertar métrica en el cursor) y elija Execute (Ejecutar). Elija la pestaña Graph (Gráfico) para mostrar la métrica con el paso del tiempo. La siguiente imagen muestra container_memory_usage_bytes a lo largo del tiempo.

    Métricas de Prometheus
  8. En la barra de navegación superior, elija Status (Estado) y Targets (Destinos).

    Consola de Prometheus

    Se muestran todos los puntos de conexión de Kubernetes que están conectados a Prometheus mediante detección de servicios.

Visualización de las métricas sin procesar del plano de control

Como alternativa a la implementación de Prometheus, el servidor de API de Kubernetes expone una serie de métricas que se representan en un formato Prometheus. Estas métricas son útiles para el monitoreo y el análisis. Se exponen internamente a través de un punto de conexión de métricas que hace referencia a las API HTTP /metrics. Al igual que otros puntos de conexión, este punto de conexión se expone en el plano de control de Amazon EKS. Este punto de conexión es útil principalmente para analizar una métrica específica. Para analizar las métricas a lo largo del tiempo, recomendamos implementar Prometheus.

Para ver el resultado de métricas sin procesar, utilice kubectl con la marca --raw. Este comando le permite transferir cualquier ruta HTTP y devuelve la respuesta sin procesar.

kubectl get --raw /metrics

Un ejemplo de salida sería el siguiente.

[...]
# HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host.
# TYPE rest_client_requests_total counter
rest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994
rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1
rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06
rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173
rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2
rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3
rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8
# HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts
# TYPE ssh_tunnel_open_count counter
ssh_tunnel_open_count 0
# HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts
# TYPE ssh_tunnel_open_fail_count counter
ssh_tunnel_open_fail_count 0

Este resultado sin procesar devuelve literalmente lo que el servidor de API expone. Las diferentes métricas se muestran por línea, y cada línea incluye un nombre de métrica, etiquetas y un valor.

metric_name{"tag"="value"[,...]}
            value