

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
<a name="windows-monitoring"></a>

Prometheus, [un proyecto de CNCF graduado](https://www.cncf.io/projects/), es, con diferencia, el sistema de monitoreo más popular con integración nativa en Kubernetes. Prometheus recopila métricas en torno a contenedores, pods, nodos y clústeres. Además, Prometheus lo AlertsManager aprovecha, lo que le permite programar alertas para advertirle si algo en su clúster va mal. Prometheus almacena los datos métricos como datos de series temporales identificados por el nombre y los pares de la métrica. 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\]](http://docs.aws.amazon.com/es_es/eks/latest/best-practices/images/windows/prom.png)


[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 del 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. Prometheus, según su configuración, extraerá periódicamente métricas de estos puntos finales HTTP (S).

Un exportador te permite consumir métricas de terceros como métricas con formato de Prometheus. Por lo general, se despliega un exportador de Prometheus en cada nodo. Para obtener una lista completa de los exportadores, consulte los exportadores de [Prometheus](https://prometheus.io/docs/instrumenting/exporters/). Si bien [el exportador de nodos](https://github.com/prometheus/node_exporter) es adecuado para exportar el hardware del host y las métricas del sistema operativo para los nodos de Linux, no funcionará para los nodos de Windows.

En un **clúster EKS de nodos mixtos con nodos de Windows**, cuando utilice el gráfico de [mando estable de Prometheus](https://github.com/prometheus-community/helm-charts), verá pods defectuosos en los nodos de Windows, ya que este exportador no está diseñado para Windows. Deberá tratar el grupo de trabajadores de Windows por separado y, en su lugar, instalar el [exportador de Windows](https://github.com/prometheus-community/windows_exporter) en el grupo de nodos de trabajo de Windows.

Para configurar la supervisión de Prometheus para los nodos de Windows, debe descargar e instalar el exportador WMI en el propio servidor de Windows y, a continuación, configurar los objetivos dentro de la configuración básica del archivo de configuración de Prometheus. La [página de versiones](https://github.com/prometheus-community/windows_exporter/releases) incluye todos los instaladores de .msi disponibles, con los respectivos conjuntos de funciones y correcciones de errores. El instalador configurará el windows\$1exporter 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 colectores, puertos, etc. habilitados.

Puede consultar la sección de **prácticas recomendadas de programación** de esta guía, en la que se sugiere utilizar taints/tolerations o RuntimeClass implementar selectivamente el exportador de nodos únicamente 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 administración de la configuración que prefiera (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.

De forma predeterminada, el windows\$1exporter mostrará todas las métricas de los recopiladores habilitados. Esta es la forma recomendada de recopilar métricas para evitar errores. Sin embargo, para un uso avanzado, se puede pasar al windows\$1exporter una lista opcional de recopiladores para filtrar las métricas. El parámetro collect [] de la configuración de Prometheus le 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 desea 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 almacenar en el punto final /metrics del puerto 9182. En este punto, Prometheus puede consumir las métricas añadiendo el siguiente scrape\$1config 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 recomendada de añadir objetivos es utilizar una definición de recurso personalizada llamada ServiceMonitor [que viene como parte del operador [Prometheus](https://github.com/prometheus-operator/kube-prometheus/releases)] que proporciona la definición de ServiceMonitor un objeto y un controlador que activará la configuración de Prometheus que definimos y construirá automáticamente ServiceMonitors la configuración de Prometheus requerida.

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

Para aprovecharlos ServiceMonitor, cree un objeto Endpoint que apunte a objetivos específicos de Windows, un servicio headless 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](https://github.com/prometheus-operator/kube-prometheus). Tenga en cuenta que Prometheus admite la detección dinámica de objetivos mediante [muchas](https://prometheus.io/blog/2015/06/01/advanced-service-discovery/) opciones de descubrimiento de servicios.