NetXMS Support Forum

Russian Support => Общие вопросы => Topic started by: Retif on October 31, 2017, 10:24:02 AM

Title: Мониторинг срока действия сертификатов в Windows
Post by: Retif on October 31, 2017, 10:24:02 AM
Добрый день.

Есть задача на каком-то количестве серверов Windows мониторить сертификаты на предмет истечения их срока. Т.е., если до конца срока осталось менее 30-и дней, например, то генерить алерт. Такое возможно в NetXMS?
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Retif on June 08, 2018, 05:38:09 PM
Ап...
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Victor Kirhenshtein on July 17, 2018, 04:53:56 PM
Можно сделать external parameter на агенте с использованием команды openssl. Обсуждалось в английском форуме: https://www.netxms.org/forum/configuration/monitoring-ssl-certificate-expiry/ (https://www.netxms.org/forum/configuration/monitoring-ssl-certificate-expiry/)
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: vadtish on January 08, 2019, 03:27:12 PM
Quote from: Retif on October 31, 2017, 10:24:02 AM
Добрый день.

Есть задача на каком-то количестве серверов Windows мониторить сертификаты на предмет истечения их срока. Т.е., если до конца срока осталось менее 30-и дней, например, то генерить алерт. Такое возможно в NetXMS?
Как вариант в "Scheduled Tasks" создавать расписание с сроком сертификатов
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Retif on March 19, 2019, 06:43:59 PM
Quote from: Victor Kirhenshtein on July 17, 2018, 04:53:56 PM
Можно сделать external parameter на агенте с использованием команды openssl. Обсуждалось в английском форуме: https://www.netxms.org/forum/configuration/monitoring-ssl-certificate-expiry/ (https://www.netxms.org/forum/configuration/monitoring-ssl-certificate-expiry/)
Прочитал, не не понял, если честно, про этот external parameter, как его подружить с NetXMS.
То, что мы вытаскиваем оттуда дату, это понял. Количество секунд, понятно. Но сделать, чтобы при определеном условии (меньше 30-и дней) из этого создался алерт в NetXMS, что-то не могу понять.

Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Tatjana Dubrovica on March 20, 2019, 04:05:25 PM
Сделать threshold (меньше 30-и дней в секндах или наоборот в скрипте трансформации переводить в дни) в DCI (HTTPS.CertificateExpireDate(netxms.org)) со своим кастомным Event и в EPP просисать что на этот Event нужно генерить Alarm с правильным сообщением.
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Retif on March 21, 2019, 02:13:20 PM
Quote from: Tatjana Dubrovica on March 20, 2019, 04:05:25 PM
Сделать threshold (меньше 30-и дней в секндах или наоборот в скрипте трансформации переводить в дни) в DCI (HTTPS.CertificateExpireDate(netxms.org)) со своим кастомным Event и в EPP просисать что на этот Event нужно генерить Alarm с правильным сообщением.
Вот это как раз мне понятно.

Я наверно не совсем корректно написал, попробую еще раз.

1. Про external parameter. Если я правильно понял, в конфиге агента c:\NetXMS\etc\nxagentd.conf я должен прописать строчку с
ExternalParameter = "что-то"
Вот синтаксис этого "что-то" я не могу понять. Я честно прочитал в мануале раздел 6.9 несколько раз, но что-то никак не могу уразуметь это, в голове каша какая-то.

Вот openssl у меня на винде нет, ставить его везде как-то не очень правильно, зато есть повершелл. Я могу запустить скрипт на повершелле, прочитать сертификаты, найти истекший и вернуть что-то. Цифру или строку или еще что-нибудь. Вопрос, как это передать в NetXMS.
Что-то типа того должно быть?
ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -file "\\Scripts\test.ps1"

Но что-то оттуда передать, из скрипта этого, в NetXMS? Не могу понять.

2. Допустим, с пунктом 1 я справился, вопрос, как добавить счетчик? Нужно создавать новый параметр?
Вот при создании нового параметра, в поле "Origin" что я должен выбрать? NetXMS Agent? Или что-то другое?
Или просто в Parameter прописать имя своего созданного External Parameter? HTTPS.CertificateExpireDate(*) - вот это имя внешнего параметра? Так и писать с этой звездочкой?

Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Tatjana Dubrovica on March 25, 2019, 01:38:25 PM
Читать нужно тут: https://www.netxms.org/documentation/adminguide/agent-management.html#agent-external-metrics
Про раздел 6.9 неочень поняла где это.

В вашем случает вы пишите в основной части агентского конфига:
ExternalParameter = HTTPS.CertificateExpireDate: powershell.exe -file "\\Scripts\test.ps1"

Без звёздочки так как параметры вы не подаёте. Перезапускаете агент, делаете Configuration poll и дальше метрикак "HTTPS.CertificateExpireDate"  доблжна быть доступна на этой ноде просто среди других метрик под "Select..."

"Origin" -> "NetXMS Agent"
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Retif on March 28, 2019, 11:02:45 AM
Quote from: Tatjana Dubrovica on March 25, 2019, 01:38:25 PM
Читать нужно тут: https://www.netxms.org/documentation/adminguide/agent-management.html#agent-external-metrics
Про раздел 6.9 неочень поняла где это.
Это он и есть, просто в pdf-ном варианте.

Quote from: Tatjana Dubrovica on March 25, 2019, 01:38:25 PM
В вашем случает вы пишите в основной части агентского конфига:
ExternalParameter = HTTPS.CertificateExpireDate: powershell.exe -file "\\Scripts\test.ps1"
А своим скриптом test.ps1 я просто возвращаю одну цифру? А если сертификатов несколько?
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Victor Kirhenshtein on March 29, 2019, 01:55:11 PM
Можно сертификат передавать как параметр:


ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -file "\\Scripts\test.ps1" -cert "$1"


и в скрипте имя сертификата получать из переменной.

На стороне сервера будет что-то вроде

HTTPS.CertificateExpireDate(cert1)
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: filimonic on April 04, 2019, 10:44:12 AM
Спасибо.
Получилось сделать вот такой мониторинг: Выбрать все сертификаты в хранилище ОС (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
А "живых" примеров использования у меня найти не получилось.
Что в этой строке есть что - вообще не понятно. Прошу как-то помочь.

Спасибо за вашу работу.



Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Victor Kirhenshtein on April 04, 2019, 06:33:41 PM
В ExternalTable идет три поля, разделенных : - имя таблицы, параметры, и команда. Параметры разделяются ; и могут быть такими:

separator= символ - разделитель, по умолчанию запятая.
instanceColumns= колонка/колонки в которых содержится уникальный идентификатор для строки.
description= описание таблицы.

Второй вариант - это использовать instance discovery. Тогда остается параметр для получения срока действия сертификата, и делается ExternalList который выдает список всех сертификатов в системе, и используется для instance discovery. Тогда для каждого сертификата будет создан отдельный DCI, на котором уже могут быть трешолды как обычно.
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Retif on May 22, 2019, 12:47:36 PM
Quote from: Victor Kirhenshtein on April 04, 2019, 06:33:41 PM
Второй вариант - это использовать instance discovery. Тогда остается параметр для получения срока действия сертификата, и делается ExternalList который выдает список всех сертификатов в системе, и используется для instance discovery. Тогда для каждого сертификата будет создан отдельный DCI, на котором уже могут быть трешолды как обычно.

Вот этот вариант мне нравится. Только полностью разобраться не могу что-то все равно.

Что я хочу. Чтобы эти отдельные DCI создались с именем (Description?), в котором будет присутствовать имя сертификата (например friendly name). Ну а значением будет количество дней, то же самое, что сейчас скриптом отдается. И дальше уже всё как с ExternalParameter.

Реализация не очень понятна.

1. Я создаю параметр CertificateExpireDate, в нем указываю в качестве параметра HTTPS.CertificateExpireDate(*) со звездочкой в скобках - это значит с инстансами?

2. На вкладке Instance Discovery я выбираю в качестве метода Agent List? А в List Name что писать, HTTPS.CertificateExpireDate?

3. В конфиге агента, я вместо
ExternalParameter = HTTPS.CertificateExpireDate: powershell.exe -file "\\server\Scripts\test.ps1"

пишу
ExternalList = HTTPS.CertificateExpireDate(*): powershell.exe -file "\\server\Scripts\test.ps1"

4. А в скрипте... тут не очень понятно. Я получаю все имена сертификатов и для каждого количество дней. А как возвращать это для NetXMS, чтобы оно преобразовалось в  имена и значения этих DCI?

З.Ы.  И можно какой-нибудь живой пример не для сертификатов, а для чего угодно с этими инстансами и ExternalList?
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Victor Kirhenshtein on May 22, 2019, 01:01:23 PM
Здесь понадобится два скрипта. Делается примерно так:

1. Делаем список HTTPS.Certificates

ExternalList = HTTPS.Certificates:script1.cmd


Скрипт должен выдавать список сертификатов, каждый в своей строчке.

2. Изменяем параметр HTTPS.CertificateExpireDate чтобы он принимал имя сертификата:

ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -file "\\server\Scripts\test.ps1" -certname $1


Насколько я знаю power shell можно будет в скрипте получить имя сертификата в переменной certname. Дальше в скрипте все как сейчас.

3. Делаем DCI на сервере:
Параметр

HTTPS.CertificateExpireDate({instance})


Instance discovery method: agent list
Имя списка: HTTPS.Certificates
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Retif on May 22, 2019, 04:41:49 PM
Супер, всё получилось! Спасибо! Я почему-то думал, что ExternalList, он вместо ExternalParameter, а они вместе, оказывается.

Как-то так вышло:
(https://www.netxms.org/forum/oe-oo/moto-oka-et-etkato-windows/?action=dlattach;attach=4491;image)

Пара вопросов возникла еще:
1. Сейчас ExternalList отвечает в формате "(Название) - (Идентификатор)", соответственно, в ExternalParameter этот текст передается в таком же виде и в интерфейсе отображается в таком же виде.
Это неудобно визуально, потому что идентификатор (THUMBPRINT) большой и бесполезный для отображения.
Можно ли как-то через ExternalList получить отдельно две части - название и идентификатор, в ExternalParameter передавать только идентификатор, а отображать только название?

2. Нужно изменить конфиг агента на группе серверов. Не для всех, а только для каких-то, например для находящихся в контейнере. Для этого нужно использовать Agent configuration policy? Прочитал документацию про это, но что-то не понял, можно ли сделать на группу серверов. Или правильней для всех серверов одинаковый мастер-конфиг с netxms подтягивать, просто не использовать потом, что не нужно?

3. В макросах для Event Processing не смог получить количество дней, которое выдается в Value DCI-инстанса. %<currentValue> и %<dciValue> что-то пустоту выдают.
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Retif on June 12, 2019, 07:20:49 PM
Ап...
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Victor Kirhenshtein on June 13, 2019, 09:55:13 AM
Quote from: Retif on May 22, 2019, 04:41:49 PM
1. Сейчас 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}.

Quote from: Retif on May 22, 2019, 04:41:49 PM
2. Нужно изменить конфиг агента на группе серверов. Не для всех, а только для каких-то, например для находящихся в контейнере. Для этого нужно использовать Agent configuration policy? Прочитал документацию про это, но что-то не понял, можно ли сделать на группу серверов. Или правильней для всех серверов одинаковый мастер-конфиг с netxms подтягивать, просто не использовать потом, что не нужно?

Да, можно использовать политику и наложить на несколько серверов. Как вариант - использовать функцию автоматического наложения, по аналогии с шаблонами.

Quote from: Retif on May 22, 2019, 04:41:49 PM
3. В макросах для Event Processing не смог получить количество дней, которое выдается в Value DCI-инстанса. %<currentValue> и %<dciValue> что-то пустоту выдают.

Это при обработке события по срабатыванию threshold?
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Retif on June 13, 2019, 11:46:29 AM
Quote from: Victor Kirhenshtein on June 13, 2019, 09:55:13 AM
Это при обработке события по срабатыванию threshold?

Да, именно.

Quote from: Victor Kirhenshtein on June 13, 2019, 09:55:13 AM

Можно использовать instance discovery filter - там можно вернуть отдельно значение instance и отдельно instance name, например так:


instance = $1;
if (instance ~= "(.*) - (.*)")
{
   return %(true, instance, $1);
}
return true;


и в поле description для DCI использовать {instance-name} вместо {instance}.


Да, так всё получилось, спасибо :)
Title: Re: Мониторинг срока действия сертификатов в Windows
Post by: Retif on July 16, 2019, 03:58:28 PM
По результатам темы написал статью на хабр: https://habr.com/ru/post/460193/