View a markdown version of this page

Supervisión - Amazon EKS

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.

Supervisión

Prometheus, un proyecto graduado de la CNCF, es, con mucho, el sistema de monitoreo más popular con integración nativa en Kubernetes. Prometheus recopila métricas sobre contenedores, pods, nodos y clústeres. Además, Prometheus aprovecha AlertsManager la posibilidad de programar alertas para avisarte si algo va mal en tu clúster. Prometheus almacena los datos métricos como datos de series temporales identificados por el nombre de la métrica y los pares. key/value Prometheus incluye una forma de realizar consultas mediante un lenguaje llamado PromQL, que es la abreviatura de Prometheus Query Language.

La arquitectura de alto nivel de la colección de métricas de Prometheus se muestra a continuación:

Colección Prometheus Metrics

Prometheus utiliza un mecanismo de extracción y extrae las métricas de los objetivos mediante los exportadores y de la API de Kubernetes mediante las métricas de estado de kube. https://github.com/kubernetes/kube-state-metrics Esto significa que las aplicaciones y los servicios deben exponer un punto final HTTP (S) que contenga métricas con formato Prometheus. Luego, según su configuración, Prometheus extraerá periódicamente las métricas de estos puntos finales HTTP (S).

Un exportador le permite consumir métricas de terceros como métricas formateadas por Prometheus. Por lo general, se implementa un exportador de Prometheus en cada nodo. Para obtener una lista completa de los exportadores, consulte los exportadores de Prometheus. Si bien el exportador de nodos es adecuado para exportar las métricas del sistema operativo y el hardware del host para los nodos de Linux, no funcionará para los nodos de Windows.

En un clúster EKS de nodos mixtos con nodos de Windows, si utilizas la tabla de control estable de Prometheus, verás que los pods fallan en los nodos de Windows, ya que este exportador no está diseñado para Windows. Tendrá que tratar el grupo de nodos de trabajo de Windows por separado y, en su lugar, instalar el exportador de Windows en el grupo de nodos de trabajo de Windows.

Para configurar la supervisión de Prometheus para los nodos de Windows, es necesario descargar e instalar el exportador de WMI en el propio servidor Windows y, a continuación, configurar los destinos en la configuración básica del archivo de configuración de Prometheus. La página de versiones contiene todos los instaladores de archivos.msi disponibles, con los respectivos conjuntos de funciones y correcciones de errores. El instalador configurará windows_exporter como un servicio de Windows y creará una excepción en el firewall de Windows. Si el instalador se ejecuta sin ningún parámetro, el exportador se ejecutará con la configuración predeterminada para los recopiladores, puertos, etc. habilitados.

Puedes consultar la sección de prácticas recomendadas de programación de esta guía, en la que se sugiere usar taints/tolerations o RuntimeClass implementar de forma selectiva el exportador de nodos solo en los nodos de Linux, mientras que el exportador de Windows se instala en los nodos de Windows al arrancar el nodo o mediante la herramienta de gestión de la configuración que prefieras (por ejemplo, chef, Ansible, SSM, etc.).

Tenga en cuenta que, a diferencia de los nodos de Linux en los que el exportador de nodos está instalado como un daemonset, en los nodos de Windows el exportador de WMI se instala en el propio host. El exportador exportará métricas como el uso de la CPU, la memoria y el uso del disco I/O , y también se puede utilizar para supervisar los sitios y las aplicaciones de IIS, las interfaces de red y los servicios.

El windows_exporter mostrará todas las métricas de los recopiladores habilitados de forma predeterminada. Esta es la forma recomendada de recopilar métricas para evitar errores. Sin embargo, para un uso avanzado, se puede pasar al windows_exporter una lista opcional de recopiladores para filtrar las métricas. El parámetro collect [] de la configuración de Prometheus te permite hacerlo.

Los pasos de instalación predeterminados para Windows incluyen descargar e iniciar el exportador como un servicio durante el proceso de arranque con argumentos, como los recopiladores que se desean filtrar.

> Powershell Invoke-WebRequest https://github.com/prometheus-community/windows_exporter/releases/download/v0.13.0/windows_exporter-0.13.0-amd64.msi -OutFile <DOWNLOADPATH> > msiexec /i <DOWNLOADPATH> ENABLED_COLLECTORS="cpu,cs,logical_disk,net,os,system,container,memory"

De forma predeterminada, las métricas se pueden extraer en el punto final /metrics del puerto 9182. En este punto, Prometheus puede consumir las métricas añadiendo el siguiente scrape_config a la configuración de Prometheus

scrape_configs: - job_name: "prometheus" static_configs: - targets: ['localhost:9090'] ... - job_name: "wmi_exporter" scrape_interval: 10s static_configs: - targets: ['<windows-node1-ip>:9182', '<windows-node2-ip>:9182', ...]

La configuración de Prometheus se recarga mediante

> ps aux | grep prometheus > kill HUP <PID>

Una forma mejor y más recomendada de añadir objetivos es utilizar una definición de recursos personalizada denominada [que forma parte del operador de Prometheus] ServiceMonitor, que proporciona la definición de un ServiceMonitor objeto y un mando que activará la configuración de Prometheus requerida y la ServiceMonitors configuraremos automáticamente.

El ServiceMonitor, que especifica de forma declarativa cómo se deben monitorear los grupos de servicios de Kubernetes, se usa para definir una aplicación de la que deseas extraer métricas de Kubernetes. En él ServiceMonitor especificamos las etiquetas de Kubernetes que el operador puede usar para identificar el servicio de Kubernetes, que a su vez identifica los pods que queremos monitorear.

Para aprovechar esto ServiceMonitor, cree un objeto de punto final que apunte a objetivos específicos de Windows, un servicio independiente y un objeto para los nodos de Windows. ServiceMontor

apiVersion: v1 kind: Endpoints metadata: labels: k8s-app: wmiexporter name: wmiexporter namespace: kube-system subsets: - addresses: - ip: NODE-ONE-IP targetRef: kind: Node name: NODE-ONE-NAME - ip: NODE-TWO-IP targetRef: kind: Node name: NODE-TWO-NAME - ip: NODE-THREE-IP targetRef: kind: Node name: NODE-THREE-NAME ports: - name: http-metrics port: 9182 protocol: TCP --- apiVersion: v1 kind: Service ##Headless Service metadata: labels: k8s-app: wmiexporter name: wmiexporter namespace: kube-system spec: clusterIP: None ports: - name: http-metrics port: 9182 protocol: TCP targetPort: 9182 sessionAffinity: None type: ClusterIP --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor ##Custom ServiceMonitor Object metadata: labels: k8s-app: wmiexporter name: wmiexporter namespace: monitoring spec: endpoints: - interval: 30s port: http-metrics jobLabel: k8s-app namespaceSelector: matchNames: - kube-system selector: matchLabels: k8s-app: wmiexporter

Para obtener más información sobre el operador y su uso ServiceMonitor, consulte la documentación oficial del operador. Tenga en cuenta que Prometheus admite el descubrimiento dinámico de objetivos mediante muchas opciones de descubrimiento https://prometheus.io/blog/2015/06/01/advanced-service-discovery/ de servicios.