LLD в zabbix появился уже давно, но попытки в лоб использовать готовые примеры для “шаблонизации” мониторинга служб на windows заканчивались неуспехами.

Недавно нашлись время, новые windows-машины и желание таки разобраться почему LLD не заводился. Ответ уже написан в названии поста – локализованные винды, non-ascii символы в названиях и описаниях служб.

Итак проблема – на целевой windows-машине необходимо собрать JSON-объект вида {data: [{"#SERVICENAME": "Бугага", "#SERVICEDISPLAY": "Не служба, а дружба", ....}]} подручными средствами.

Подручным средством был выбран powershell – с ним недавно пришлось познакомиться поближе, остались приятные впечатления.

Авторы традиционных (распространнёных в сети) решений данной задачи во-первых живут в идеальном en-US мире, но видимо вынуждены поддерживать весьма большой зоопарк версий этой системы. Поэтому json они собирают вручную, но с кодировкой проблем не имеют. Мне же музейные версии powershell поддерживать не нужно, поэтому решение получилось простым и лаконичным: установить правильную кодировку и воспользоваться встроенным json-конвертером.

Сохраняем servicediscovery.ps1:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

$services = Get-WmiObject Win32_Service | where-object { $_.StartMode -eq 'Auto' } | Select-Object -Property @{Name="{#SERVICESTATE}"; Expression = {$_.State}},@{Name="{#SERVICEDISPLAY}"; Expression = {$_.DisplayName}},@{Name="{#SERVICENAME}"; Expression = {$_.Name} },@{Name = "{#SERVICEDESC}"; Expression = {$_.Description}},@{Name = "{#SERVICEDIR}"; Expression = {$_.PathName}}

$zabbixLLD = @{data=$services} | ConvertTo-Json -Compress
[Console]::WriteLine( $zabbixLLD )

Добавляем в конфигурацию агента пользовательский параметр:

UserParameter=service.discovery,powershell -File "c:\zabbix\servicediscovery.ps1"

Пробуем zabbix_get-ом получить результат:

zabbix_get -s windows.host -k service.discovery

В случае успеха получаем правильный json-объект, которым можно воспользоваться по прямому назначению – создать прототипы метрик и триггеров (в виде шаблона например, можно взять готовый).

Скрипт немного проверен на небольшом количестве русских версий windows от 7 до 2012, турецкой windows 2008r2 и ещё несколько европейских локализаций относительно свежих серверных версий этой системы, судя по документации в MSDN ConvertTo-Json появился в powershell 3.0 (что видимо и является единственным требованием для корректной работы).

Zabbix Low Level Discovery служб в локализованной Windows
comments powered by HyperComments
Tagged on: