Есть сеть на Windows, есть AD CS, который выдает сертификаты. Появилось желание отслеживать дату истечения срока сертификата на некоторых Windows серверах. В основном используется авто выдача\обновление, но кастомные сертификаты(например Exchange,WEB\Sharepoint,NPS,RD,Lync и т.д) приходится запрашивать вручную. Поначалу я вел список задач в Sharepoint\Outlook, но это неудобно, например, легко забыть поменять у задачи дату выполнения после обновления сертификата, да и вообще иногда я про него забывал. Уже был заббикс, который занимался мониторингом, поэтому было логично этот функционал поручить ему.
В заббикс агенте нету никакого функционала, который позволяет работать(или хотя бы просматривать) информацию по установленным сертификатам, поэтому делаться это будет простеньким скриптом на PoSh:
checkcert.ps1
param ($ThumbPrint)
$Cert = Get-Item cert:\LocalMachine\My\$ThumbPrint
$NotAfterDate = $Cert.NotAfter
$CurrentDate = Get-Date
$DaysLeft = $NotAfterDate - $CurrentDate
return $DaysLeft.Days
В качестве единственного аргумента принимается отпечаток сертификата, которые однозначно его идентифицирует. Далее, получаем объект сертификата, получаем дату его истечения, вычитаем из нее текущую дату и получаем количество дней, оставшихся до окончания срока действия, их и возвращаем.
Теперь, в конфигурационном файле Zabbix агента добавляем:
zabbix_agentd.conf
UserParameter=CheckCert[*],%systemroot%\system32\windowspowershell\v1.0\powershell.exe -noprofile -nologo c:\Zabbix\Plugins\CheckCert\checkcert.ps1 -ThumbPrint $1
Со стороны Zabbix сервера все просто:
Можно проверить, что команда:
zabbix_get -h x.x.x.x -k CheckCert[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX]
вернет количество дней.
Далее все стандартно, создаем item у нужного сервера, вписываем название\ключ и т.д. и вешаем триггер(например, если осталось меньше 30 дней - слать аларм).
P.S. Я вешал itemы не на сами сервера, а для каждого сервера создал шаблон, в котором создавал нужные элементы.
Приветствую, попробывал ваше решение, но не хочет работать(((
ОтветитьУдалитьПроверял через cmd:
"C:\Zabbix\zabbix_agentd.exe" --config "C:\Zabbix\zabbix_agentd.conf" --print
Ошибка:
CheckCert[%systemroot%\system32\windowspowershell\v1.0\powershell.exe -noprofile
-nologo c:\Zabbix\plugins\CheckCert\checkcert.ps1 -ThumbPrint ] [t|C:\Zabbix\pl
ugins\CheckCert\checkcert.ps1 : Отсутствует аргумент для параметра
"ThumbPrint". Укажите параметр типа "System.Object" и повторите попытку.
строка:1 знак:54
+ c:\Zabbix\plugins\CheckCert\checkcert.ps1 -ThumbPrint <<<<
+ CategoryInfo : InvalidArgument: (:) [checkcert.ps1], ParameterB
indingException
+ FullyQualifiedErrorId : MissingArgument,checkcert.ps1]
Подскажите пожалуйста где что нужно подправить