
Авторы: Никита Зубарев - 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 необходимо выполнить несколько действий:
- Скачать последнюю версию Windows Exporter с GitHub, выбрав архив .zip или .tar.gz. 
- Создать папку с именем "Prometheus" на диске C или в другом месте. 
- Распаковать скачанный архив Windows Exporter. В нем находится файл windows_exporter.exe. 
- Скопировать 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 в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.
 
           
 
high_panurg
А много у вас серверов, вы на каждый руками ставите?
Может лучше было бы написать скрипт, который ставит службу или GPO?
Как вы добавляете новые таргеты в prometheus? Тоже каждый раз вручную?
dasgutenberg
Мы разработали скрипт, который при развертывании сервера автоматически устанавливает и настраивает службу мониторинга. Что касается добавления новых целей (таргетов) для мониторинга в Prometheus - мы тоже автоматизировали этот процесс. Prometheus у нас динамически подгружает конфигурационный файл targets.json. Этот файл регулярно обновляется отдельной программой из нашей системы учета серверов.
Таким образом, в конфигурацию Prometheus попадают данные только по актуальным на данный момент серверам. Подробнее об этом подходе можно прочитать в нашей статье на Хабр
high_panurg
Почему бы не ставить consul для обнаружения новых хостов автоматически?