Pide tu presupuesto ya!

Cómo monitorear servidores Windows con Prometheus y Grafana

No confíe en la marca de verificación verde en el panel de un servidor de Windows hasta que sepa qué la está eliminando. Un panel puede parecer tranquilo mientras el exportador está inactivo, el firewall está incorrecto o Prometheus está eliminando la etiqueta de host incorrecta. Así es como se produce el peor tipo de interrupción: una que parece estar en buen estado hasta que alguien abre el panel equivocado.

Si desea que la pila diga la verdad en lugar de dibujar una mentira verde, comience en el exportador, no en el tablero. Instalar windows_exporter y bloquear 9182 primero para que sepas que las métricas son reales y privadas. Entonces deja Prometeo, Grafanay Administrador de alertas hacen su trabajo en ese orden, y cada capa demuestra la anterior.

Arquitectura de producción para la supervisión de Windows Server

Antes de tocar una cuenta de servicio o abrir una regla de firewall, aclare la forma del sistema. En una configuración de producción, los servidores Windows monitoreados deberían exponer métricas; Prometeo debería rasparlos y almacenarlos a través de un configuración de raspado; Grafana debería leer la misma tienda; y Alertmanager debería decidir si un problema merece una página.

[Image: images/windows-monitoring-architecture.svg]

Topología de producción

Componente Trabajo nota de producción
windows_exporter Expone métricas de host a través de HTTP Mantenga el colector ajustado. Habilite recopiladores de roles específicos solo en servidores que realmente los necesiten.
Prometeo Raspa, almacena y evalúa reglas. Trátelo como la fuente de verdad para las matemáticas de alerta, no como un caché del panel.
Grafana Visualiza métricas y tendencias. Proporcione fuentes de datos y paneles para que pueda reconstruir la pila sin tener que hacer clic.
Administrador de alertas Enruta y deduplica alertas Deje que agrupe el ruido antes de que llegue al buscapersonas.

Si ya ejecuta Prometheus y Grafana en un servidor de administración de Windows, manténgalos allí. Si viven en otro lugar, la ruta de seguimiento no cambia; el contenedor de servicios lo hace.


Quick Win: mantenga un pequeño diagrama en su runbook. Cuando comienza la interrupción, desea tener la topología frente a usted antes de comenzar a adivinar.


Requisitos previos

Si quieres seguirlo, necesitarás:

  • Windows Server 2019 o posterior en los hosts monitoreados, porque windows_exporter admite las versiones actuales de Windows Server y la ruta de instalación del servicio a continuación asume un flujo de trabajo MSI moderno.

  • Prometheus se ejecuta en algún lugar al que puedan llegar sus servidores Windows, porque es el componente que extrae y evalúa las métricas.

  • Grafana con acceso de administrador o acceso de aprovisionamiento, porque lo necesita aprovisionamiento de fuentes de datos para mantener los paneles repetibles.

  • Acceso a la red desde Prometheus a TCP 9182 en cada host de Windows, porque el scraping muere rápidamente cuando el firewall pretende ser seguridad.

  • Administrador de alertas si desea páginas, agrupaciones y silencios. Si solo necesita paneles, puede omitirlo por ahora.

Instalar windows_exporter en los servidores de Windows

windows_exporter es la pieza que convierte los aspectos internos de Windows en métricas de Prometheus. Es Documentos de instalación de MSI cubren la creación de servicios y las excepciones del firewall, lo cual es una excusa menos para dejar la caja a medio configurar.

Utilice primero un juego de coleccionista pequeño. Los recopiladores de host predeterminados cubren los conceptos básicos; agregue recopiladores de roles específicos solo cuando un servidor realmente ejecute ese rol.

conjunto de coleccionista ¿Por qué lo quieres?
cpu, memory, logical_disk, net, os, physical_disk, service, system Estado básico del host para la mayoría de los servidores Windows
iis, mssql, dhcp, dns, hyperv Sólo en servidores que ejecutan esos servicios
process Úselo cuando necesite vistas a nivel de proceso y pueda tolerar una cardinalidad adicional

Ejecute el instalador en cada servidor:

$msi = "C:\Temp\windows_exporter.msi"
$collectors = "cpu,memory,logical_disk,net,os,physical_disk,service,system"

Start-Process msiexec.exe -Wait -ArgumentList @(
  "/i", $msi,
  "/qn",
  "ENABLED_COLLECTORS=$collectors",
  "LISTEN_PORT=9182",
  "ADDLOCAL=FirewallException"
)

Eso le proporciona la ruta de métricas predeterminada http://localhost:9182/metrics. Si su servidor tiene un recopilador de roles para agregar, póngalo en ENABLED_COLLECTORS y vuelva a ejecutar el instalador. Mantenlo determinista. Su yo futuro no disfrutará explorando un exportador configurado mediante tres ediciones manuales diferentes.


Advertencia: no exponer 9182 al mundo. Alcance la excepción del firewall para sus raspadores de Prometheus o coloque al exportador detrás de un límite de red confiable.


Abrir y proteger el punto final de métricas

El monitoreo de producción falla de una manera muy aburrida cuando el firewall está suelto: el punto final es accesible, pero todos pueden acceder a él. windows_exporter admite una excepción de firewall durante la instalación y MSI también acepta una lista de direcciones remotas permitidas a través de REMOTE_ADDR cuando desee mantener estrecho el camino de raspado.

Si ya conoce las direcciones del raspador de Prometheus, incorpórelas en la instalación:

Start-Process msiexec.exe -Wait -ArgumentList @(
  "/i", "C:\Temp\windows_exporter.msi",
  "/qn",
  "ENABLED_COLLECTORS=cpu,memory,logical_disk,net,os,physical_disk,service,system",
  "LISTEN_PORT=9182",
  "REMOTE_ADDR=10.20.0.15",
  "ADDLOCAL=FirewallException"
)

Desde el host de Prometheus, use Prueba-NetConnection Para verificar que el punto final responda antes de culpar al panel:

Test-NetConnection -ComputerName win01.contoso.local -Port 9182
curl.exe -s http://win01.contoso.local:9182/metrics | Select-String "windows_exporter_build_info"

El primer comando demuestra que se puede acceder al puerto. El segundo demuestra que en realidad está hablando con el exportador y no con algún proceso no relacionado que también escucha 9182. Esa distinción importa más a menudo de lo que la gente admite.

Configurar Prometheus para eliminar objetivos de Windows

Prometheus hace el trabajo aburrido pero esencial: raspar, almacenar, evaluar. Si el trabajo de raspado es descuidado, cada panel y cada alerta hereda el desorden.

Utilice etiquetas para que los objetivos sean útiles más adelante. environment, roley site le evitará crear un segundo panel porque el primero no puede distinguir la producción de la prueba.

global:
  scrape_interval: 30s

scrape_configs:
  - job_name: windows-server
    scrape_timeout: 10s
    static_configs:
      - targets:
          - win01.contoso.local:9182
          - win02.contoso.local:9182
        labels:
          environment: prod
          role: app
          site: denver

Si necesita validar la configuración antes de reiniciar, use herramienta de promoción primero:

promtool check config C:\Prometheus\prometheus.yml

Esa verificación detecta YAML incorrecto y sintaxis de trabajo rota antes de que Prometheus lo haga por usted al inicio. Prometeo es honesto acerca de los errores, pero no es gentil.

Agregue Grafana e importe un panel

Grafana ya sabe cómo hablar con Prometheus, así que no convierta la configuración de la fuente de datos en un ritual manual. Proveerlo a través de Documentos de aprovisionamiento de Grafana como el resto de la pila.

apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://prometheus.contoso.local:9090
    isDefault: true

Eso mantiene estables las consultas del panel y le brinda un lugar para cambiar la URL de Prometheus si el backend se mueve.

Para los paneles, la opción de producción más limpia es almacenar el JSON en el control de código fuente e importarlo con el Flujo de importación del panel de Grafana. Si prefieres construir los paneles tú mismo, empieza con tres vistas:

  • Estado del host: CPU, memoria, disco y red.

  • Estado del servicio: solo los servicios de Windows que son importantes para la aplicación.

  • Vista de flota: etiquetas de instancia, etiquetas de sitio y un escaneo rápido de quién está detrás.

El punto no es llenar una pantalla. El objetivo es hacer que la respuesta del operador sea obvia cuando llegue la página.


Verificación de la realidad: si Grafana está vacío, el problema generalmente no es PromQL. Verifique la fuente de datos, las etiquetas de los trabajos y el estado del destino antes de comenzar a reescribir los paneles.


[Image: images/windows-monitoring-alert-path.svg]

Ruta de enrutamiento de alerta

Crear reglas de alerta de producción

Aquí es donde muchas configuraciones de “monitoreo” se vuelven costosas. Si solo alerta sobre el exportador caído, se perderá la falla lenta que arrastra al host a la zanja. Si alertas sobre todo sin agruparte, te encontrarás en el resentimiento.

Reglas de alerta de Prometeo mantener las matemáticas en un archivo, y Enrutamiento del administrador de alertas convierte el resultado en una notificación procesable en lugar de una tormenta duplicada.

groups:
  - name: windows-server.rules
    rules:
      - alert: WindowsExporterDown
        expr: up{job="windows-server"} == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "windows_exporter is down on {{ $labels.instance }}"
          description: "Prometheus has not scraped {{ $labels.instance }} for five minutes."

Esa regla es intencionalmente contundente. Si el camino de raspado muere, se dispara. Si aún se puede acceder al host, permanece en silencio.

Enrute la alerta en Alertmanager por gravedad:

route:
  receiver: operations
  group_by: ["alertname", "instance", "job"]
  routes:
    - matchers:
        - severity="critical"
      receiver: pager
receivers:
  - name: operations
    email_configs:
      - to: [email protected]
  - name: pager
    pagerduty_configs:
      - routing_key: REDACTED

Valide las reglas antes de recargar Prometheus:

promtool check rules C:\Prometheus\rules\windows-server.rules.yml

Si ese comando falla, primero arregle el YAML. Si pasa, active una alerta de prueba en la preparación y confirme que Alertmanager envía la ruta crítica al receptor del buscapersonas, no a la bandeja de entrada general.

Valide la pila y corrija fallas comunes

La validación debe realizarse en el mismo orden cada vez: punto final, destino, consulta, panel, notificación. Si lo haces en un orden diferente en cada incidente, solo estás haciendo que en el futuro hagas arqueología. El Página de objetivos de Prometheus Es donde comienza la pura verdad.

  1. Verifique el punto final del exportador desde el host de Prometheus.

  2. Verifique el estado objetivo en Prometheus.

  3. Ejecute una consulta PromQL para una métrica conocida.

  4. Confirme que el panel Grafana muestre el mismo valor.

  5. Encienda una alerta de prueba y asegúrese de que Alertmanager la enrute correctamente.

Los modos de falla más comunes son aburridos:

Síntoma causa probable Arreglar
El objetivo es down 9182 nombre de host bloqueado o incorrecto Reparar firewall, DNS o la lista de objetivos
El tablero está vacío Fuente de datos de Grafana incorrecta o etiqueta de trabajo incorrecta Vuelva a verificar la fuente de datos y las etiquetas de raspado.
Faltan métricas Recopilador no habilitado en esa función de servidor Vuelva a instalar con el juego de colector correcto
Las alertas son ruidosas Umbrales demasiado estrictos o sin agrupación Añadir claves de inhibición y agrupación sensata

Lista de verificación de operaciones de producción

Una vez que la pila está activa, el trabajo no se detiene. Simplemente cambia de forma.

  • Fijar el flujo de lanzamiento de windows_exporter para que no te sorprendan los cambios de coleccionista.

  • Revise los recopiladores cada vez que cambie la función del servidor.

  • Mantenga las etiquetas de raspado consistentes en todos los servidores o la vista de su flota se convertirá en un juego de adivinanzas.

  • Observe la retención y la cardinalidad en Prometheus antes de que el disco se convierta en su próxima interrupción.

  • Revisar el ruido de alerta mensualmente. Si una regla nunca aparece en páginas, probablemente sea un panel disfrazado.

  • Mantenga el JSON del panel y la configuración de scrape en el control de fuente para que la reversión sea una restauración de archivos, no una prueba de memoria.

Esa lista de verificación es la diferencia entre una pila de monitoreo en la que confía y una pila de monitoreo en la que solo confía después de una semana tranquila.

Mantenga la pila honesta en producción

El monitoreo de Windows de producción no es difícil porque las herramientas son débiles. Es difícil porque cada capa puede mentirte de una manera ligeramente diferente. windows_exporter puede ser accesible pero mal configurado. Prometeo puede estar buscando el objetivo equivocado. Grafana puede representar un hermoso panel vacío. Alertmanager puede ser tan ruidoso que nadie escucha.

La solución es una plomería disciplinada: instale el exportador con un conjunto de recopiladores conocido, bloquee el puerto de métricas, proporcione etiquetas estables a Prometheus, aprovisione Grafana en lugar de hacer clic en él y enrute alertas para que un problema real se convierta en una notificación procesable. Vigilar Configuración de retención de Prometheustambién, o el disco se convertirá en lo próximo que le mienta.

Haga eso y sus servidores Windows dejarán de ser misteriosas cajas negras. Se convierten en sistemas que se pueden inspeccionar, medir y defender cuando la producción se vuelve inadecuada.

Written by

Leave a comment