Авторы: Никита Зубарев - DevOps Team Leader компании Hostkey, Айрат Сягитов - специалист отдела DevOps компании Hostkey 

Ранее мы рассказали о том, как выполняется мониторинг Linux-систем. Теперь рассмотрим, как настроить Windows Server.

В одной из прошлых статей мы говорили об интеграции FreeIPA с Active Directory. В процессе разработки решения, описанного в этой статье, у нас возникла потребность снимать метрики с серверов Windows-инфраструктуры. В данной статье мы рассмотрим, как можно наладить мониторинг для серверов с ОС Windows, используя существующую систему, построенную на связке Prometheus + Grafana + Alertmanager. Собирать будем общие системные метрики: cpu, ram, hdd. 

Экспортер WMI также можно использовать для мониторинга сайтов и приложений IIS, сетевых интерфейсов, служб и даже локальной температуры.

Установка Windows Exporter для мониторинга служб Windows

Для установки Windows Exporter необходимо выполнить несколько действий:

  1. Скачать последнюю версию Windows Exporter с GitHub, выбрав архив .zip или .tar.gz.

  2. Создать папку с именем "Prometheus" на диске C или в другом месте. 

  3. Распаковать скачанный архив Windows Exporter. В нем находится файл windows_exporter.exe.

  4. Скопировать windows_exporter.exe в папку “Prometheus”.

Затем необходимо создать конфигурационный файл YAML для Windows Exporter. Он позволит указать службы, которые необходимо поставить на мониторинг.

В нашем примере это сервис LicenseManager.

Windows Exporter можно запустить двумя способами: вручную и в качестве службы Windows.

1. Для запуска вручную необходимо:

  • Открыть командную строку от имени администратора.

  • Перейти в папку с windows_exporter.exe, например: cd C:\Prometheus.

  • Запустить Windows Exporter с указанием конфигурационного файла с помощью команды: .\windows_exporter.exe --config.windowsconfig="kms.yml".

  • Теперь Windows Exporter будет работать в режиме мониторинга в текущей сессии.

2. Для настройки как службы Windows необходимо:

  • Открыть командную строку от имени администратора.

  • Создать службу Windows Exporter командой:

 sc create WindowsExporter binPath= "C:\Prometheus\windows_exporter.exe --config.windowsconfig=C:\Prometheus\kms.yml" start= auto.
  • Запустить службу командой sc start WindowsExporter:

A:\Windows\system32>sc create WindowsExporter binpath= "C:\Prometheus\windows_exporter.exe --config.windowsconfig=C:\Prometheus\windows_exporter.yml"=auto
[SC] CreateService: success

A:\Windows\system32>sc start WindowsExporter

Подробную информацию о средстве экспорта WMI можно посмотреть на GitHub.

После установки необходимого экспортера следует перейти в панель «Службы Windows» (достаточно просто ввести «Службы» в меню поиска Windows) и найти в списке запись WMI exporter. Далее необходимо проверить, что сервис работает правильно.

Если экспортер запущен, он должен начать предоставлять метрики на http://localhost:9182/metrics, по аналогии с Node Exporter. Остается подключить сбор метрик в Prometheus, добавить дашборд и настроить алертинг:

Добавить в prometheus.yml:

  - job_name: 'Windows_Infra'
    static_configs:
      - targets: ['”localhost”:9182'] 

Добавить Grafana dashboard, который отслеживает отображение информационной панели, подключает и оптимизирует вывод подробной сводки ресурсов. В результате получаем визуальную панель по каждому хосту:

Осталось описать rule_files, добавив необходимые метрики:

groups:
- name: Windows_Infra
  rules:
  - alert: InstanceDown
    expr: up{job="Windows_Infra"} == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ .instance }} down"
      description: "{{ .instance }} of job {{ .job }} has been down for more than 5 minutes."

  - alert: DiskSpaceUsage
    expr: 100.0 - 100 * (windows_logical_disk_free_bytes{job="Windows_Infra"} / windows_logical_disk_size_bytes{job="Windows_Infra"}) > 90
    for: 10m
    labels:
      severity: high
    annotations:
      summary: "Disk Space Usage (instance {{ $labels.instance }})"
      description: "Disk Space on Drive is used more than 90%\n  VALUE = {{ $value }}\n  LABELS: {{ $labels }}"

Аналогичным образом добавляем другие необходимые параметры. При настроенном Alertmanager сообщения нотификаций автоматически будут приходить в подключенные системы.

Как видите, мониторинг серверов Windows можно легко выполнить с помощью Prometheus и Grafana. Это решение значительно упрощает процесс управления большим парком машин и позволяет оперативно решать проблемы, возникающие при администрировании серверного оборудования в нашей компании.В следующих статьях рассмотрим задачу подключения служб Windows.


Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

Комментарии (3)


  1. high_panurg
    16.10.2023 21:15

    А много у вас серверов, вы на каждый руками ставите?
    Может лучше было бы написать скрипт, который ставит службу или GPO?
    Как вы добавляете новые таргеты в prometheus? Тоже каждый раз вручную?


    1. dasgutenberg
      16.10.2023 21:15

      Мы разработали скрипт, который при развертывании сервера автоматически устанавливает и настраивает службу мониторинга. Что касается добавления новых целей (таргетов) для мониторинга в Prometheus - мы тоже автоматизировали этот процесс. Prometheus у нас динамически подгружает конфигурационный файл targets.json. Этот файл регулярно обновляется отдельной программой из нашей системы учета серверов.

      Таким образом, в конфигурацию Prometheus попадают данные только по актуальным на данный момент серверам. Подробнее об этом подходе можно прочитать в нашей статье на Хабр


      1. high_panurg
        16.10.2023 21:15

        Почему бы не ставить consul для обнаружения новых хостов автоматически?