Мониторинг срока действия сертификатов в Windows
-
Можно сертификат передавать как параметр:
ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -file "\\Scripts\test.ps1" -cert "$1"и в скрипте имя сертификата получать из переменной.
На стороне сервера будет что-то вроде
HTTPS.CertificateExpireDate(cert1)
-
Спасибо.
Получилось сделать вот такой мониторинг: Выбрать все сертификаты в хранилище ОС (LocalMachine\My), выбрать среди них тот, которых протухает ближе всего, выдать мониторингу цифру "дней до истечения сертификата".
Недостатком является то, что я не вижу, какой именно сертификат протухает.Что бы хотелось:
Хотелось бы получить информацию по каждому сертификату отдельно,при этом NetXMS не должен ничего заранее знать о конкретных сертификатах, он должен получить наименования сертификатов при опросе агента.Я предположил что это можно сделать с помощью ExternalTable. Верно ли?
Вывод скрипта, судя по инструкции, должен быть таким:CertificateName|CertificateTTLDays *.site111.com|200 *.site222.com|120 _ALL_CERTS_|120И ожидаю что в NetXMS будут видны все сертификаты для конкретного сервера.
К сожалению из документации строка ExternalTable совершенно мне не понятна
ExternalTable=dciName:instanceColumns=columnName;description=description;separator=|:commandА "живых" примеров использования у меня найти не получилось.
Что в этой строке есть что - вообще не понятно. Прошу как-то помочь.Спасибо за вашу работу.
-
В ExternalTable идет три поля, разделенных : - имя таблицы, параметры, и команда. Параметры разделяются ; и могут быть такими:
separator= символ - разделитель, по умолчанию запятая.
instanceColumns= колонка/колонки в которых содержится уникальный идентификатор для строки.
description= описание таблицы.Второй вариант - это использовать instance discovery. Тогда остается параметр для получения срока действия сертификата, и делается ExternalList который выдает список всех сертификатов в системе, и используется для instance discovery. Тогда для каждого сертификата будет создан отдельный DCI, на котором уже могут быть трешолды как обычно.
-
@victor said in Мониторинг срока действия сертификатов в Windows:
Второй вариант - это использовать instance discovery. Тогда остается параметр для получения срока действия сертификата, и делается ExternalList который выдает список всех сертификатов в системе, и используется для instance discovery. Тогда для каждого сертификата будет создан отдельный DCI, на котором уже могут быть трешолды как обычно.
Вот этот вариант мне нравится. Только полностью разобраться не могу что-то все равно.
Что я хочу. Чтобы эти отдельные DCI создались с именем (Description?), в котором будет присутствовать имя сертификата (например friendly name). Ну а значением будет количество дней, то же самое, что сейчас скриптом отдается. И дальше уже всё как с ExternalParameter.
Реализация не очень понятна.
-
Я создаю параметр CertificateExpireDate, в нем указываю в качестве параметра HTTPS.CertificateExpireDate(*) со звездочкой в скобках - это значит с инстансами?
-
На вкладке Instance Discovery я выбираю в качестве метода Agent List? А в List Name что писать, HTTPS.CertificateExpireDate?
-
В конфиге агента, я вместо
ExternalParameter = HTTPS.CertificateExpireDate: powershell.exe -file "\\server\Scripts\test.ps1"пишу
ExternalList = HTTPS.CertificateExpireDate(*): powershell.exe -file "\\server\Scripts\test.ps1"- А в скрипте... тут не очень понятно. Я получаю все имена сертификатов и для каждого количество дней. А как возвращать это для NetXMS, чтобы оно преобразовалось в имена и значения этих DCI?
З.Ы. И можно какой-нибудь живой пример не для сертификатов, а для чего угодно с этими инстансами и ExternalList?
-
-
Здесь понадобится два скрипта. Делается примерно так:
- Делаем список HTTPS.Certificates
ExternalList = HTTPS.Certificates:script1.cmdСкрипт должен выдавать список сертификатов, каждый в своей строчке.
- Изменяем параметр HTTPS.CertificateExpireDate чтобы он принимал имя сертификата:
ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -file "\\server\Scripts\test.ps1" -certname $1Насколько я знаю power shell можно будет в скрипте получить имя сертификата в переменной certname. Дальше в скрипте все как сейчас.
- Делаем DCI на сервере:
Параметр
HTTPS.CertificateExpireDate({instance})Instance discovery method: agent list
Имя списка: HTTPS.Certificates -
Супер, всё получилось! Спасибо! Я почему-то думал, что ExternalList, он вместо ExternalParameter, а они вместе, оказывается.
Как-то так вышло:
Пара вопросов возникла еще:
-
Сейчас ExternalList отвечает в формате "(Название) - (Идентификатор)", соответственно, в ExternalParameter этот текст передается в таком же виде и в интерфейсе отображается в таком же виде.
Это неудобно визуально, потому что идентификатор (THUMBPRINT) большой и бесполезный для отображения.
Можно ли как-то через ExternalList получить отдельно две части - название и идентификатор, в ExternalParameter передавать только идентификатор, а отображать только название? -
Нужно изменить конфиг агента на группе серверов. Не для всех, а только для каких-то, например для находящихся в контейнере. Для этого нужно использовать Agent configuration policy? Прочитал документацию про это, но что-то не понял, можно ли сделать на группу серверов. Или правильней для всех серверов одинаковый мастер-конфиг с netxms подтягивать, просто не использовать потом, что не нужно?
-
В макросах для Event Processing не смог получить количество дней, которое выдается в Value DCI-инстанса. %<currentValue> и %<dciValue> что-то пустоту выдают.
-
-
-
@retif said in Мониторинг срока действия сертификатов в Windows:
- Сейчас ExternalList отвечает в формате "(Название) - (Идентификатор)", соответственно, в ExternalParameter этот текст передается в таком же виде и в интерфейсе отображается в таком же виде.
Это неудобно визуально, потому что идентификатор (THUMBPRINT) большой и бесполезный для отображения.
Можно ли как-то через ExternalList получить отдельно две части - название и идентификатор, в ExternalParameter передавать только идентификатор, а отображать только название?
Можно использовать instance discovery filter - там можно вернуть отдельно значение instance и отдельно instance name, например так:
instance = $1; if (instance ~= "(.*) - (.*)") { return %(true, instance, $1); } return true;и в поле description для DCI использовать {instance-name} вместо {instance}.
@retif said in Мониторинг срока действия сертификатов в Windows:
- Нужно изменить конфиг агента на группе серверов. Не для всех, а только для каких-то, например для находящихся в контейнере. Для этого нужно использовать Agent configuration policy? Прочитал документацию про это, но что-то не понял, можно ли сделать на группу серверов. Или правильней для всех серверов одинаковый мастер-конфиг с netxms подтягивать, просто не использовать потом, что не нужно?
Да, можно использовать политику и наложить на несколько серверов. Как вариант - использовать функцию автоматического наложения, по аналогии с шаблонами.
@retif said in Мониторинг срока действия сертификатов в Windows:
- В макросах для Event Processing не смог получить количество дней, которое выдается в Value DCI-инстанса. %<currentValue> и %<dciValue> что-то пустоту выдают.
Это при обработке события по срабатыванию threshold?
- Сейчас ExternalList отвечает в формате "(Название) - (Идентификатор)", соответственно, в ExternalParameter этот текст передается в таком же виде и в интерфейсе отображается в таком же виде.
-
@victor said in Мониторинг срока действия сертификатов в Windows:
Это при обработке события по срабатыванию threshold?
Да, именно.
@victor said in Мониторинг срока действия сертификатов в Windows:
Можно использовать instance discovery filter - там можно вернуть отдельно значение instance и отдельно instance name, например так:
instance = $1; if (instance ~= "(.*) - (.*)") { return %(true, instance, $1); } return true;и в поле description для DCI использовать {instance-name} вместо {instance}.
Да, так всё получилось, спасибо

-
По результатам темы написал статью на хабр: https://habr.com/ru/post/460193/
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login