Мониторинг сертификатов windows zabbix

Мониторинг сертификатов windows zabbix

Суть самой задачи в том, чтобы Zabbix сообщал нам если в системе Windows есть сертификат срок действия которого истекает через N кол-во дней. В zabbix 3.4 нет специального ключа для проверки сертификатов windows.

Речь идет о локальных сертификатах Windows.

С начало нужно добавить в конфигурационный файл zabbix агента, UserParameters (Почитать про него можно тут > https://www.zabbix.com/documentation/3.4/ru/manual/co..).
Говоря проще, дописать в конце конфигурационного файла строчку:

UserParameter=Certificate, PowerShell.exe (Get-ChildItem -Path cert: -Recurse -ExpiringInDays 365).subject

Где Certificate это уникальный ключ который мы будем исп. при создании элемента данных на сервере zabbix.

Обязательно перезагружаем zabbix агент, и переходим в web интерфейс сервера.
Создаем метрику — элемент данных и заполняем как на скриншоте.

Интервал обновления на время проверки работоспособности метрики можно сократить до 1-2 минут

Отслеживание срока действия сертификата с помощью Zabbix

Случился на моей практике интересный инцидент из серии «умная мысля приходит опосля»: хостер(да и сам владелец тоже) профукал срок действия SSL сертификата на сайте. Не сказать, что ситуация критичная, но всё равно неприятный осадок остался. Было решено написать скрипт мониторинга срока действия сертификатов и мониторить это дело zabbix-ом.
Система позволяет значительно расширять базовый функционал, используя для этого любые языки программирования.
Хочу заметить, что везде, где планируется мониторить больше 3 инстансов я использую полюбившееся мне решение low level discovery(LLD) — возможность автоматического создания элементов данных, триггеров и графиков для разных(любых) ресурсов операционной системы. Не буду вдаваться в подробности, почитать об этом можно по вышеприведённой ссылке.
Для работы этого мониторинга потребуется несколько скриптов:
— первый будет генерировать ответ для discovery в JSON-формате
— второй будет парсить дату окончания сертификата и считать сколько дней осталось
— третий файл(не исполняемый) будет содержать список хостов, для которых будут сниматься данные

Начнём с самого простого — список хостов.
Располагаются они по одному в строке, ничего сложного. Как только необходимо добавить сайт в систему отслеживания нужно всего то дописать его в конец файла. Через пару минут данные появятся.

Дальше составляющая обнаружения. Данные должны быть в определённом формате для того, что бы zabbix сумел их принять
Листинг файла следующий:

При выполнении получаем вот такой результат:

Имя макроса можно заменить на своё, но тогда его нужно будет сменить и в шаблоне (файл прилагается в конце статьи)
В действительности как раз или подойдут больше, но существенной разницы нет.

Далее главный скрипт, который получает информацию о сертификате сайта, парсит необходимое поле и высчитывает разницу

Не думаю, что очень нужны пояснения, но всё же:
1) EXPIRE_DATE — дата окончания действия сертификата в формате Sep 16 11:56:55 2015 GMT
2) EXPIRE_SECS — перевод полученного результата в Unix-timestamp (количество секунд до этого момента, начиная с полуночи 1 января 1970 года)
3) EXPIRE_TIME — высчитываем разницу между текущим временем и временем действия SSL
4) RETVAL — перевод секунд в сутки для наглядности

Делаем файлы исполнительными и на всякий случай указываем пользователя zabbix в качестве владельца:

Сам вывод крайне прост:

так же можно проверить как будет вести себя скрипты, если запускаться они будут от пользователя zabbix:

Если всё ок — можно переходить к завершающей стадии: внедрению этого функционала в наш zabbix-сервер
Проверим, сконфигурирован ли агент на создание пользовательских параметров

Отлично, теперь создадим файл, в котором укажем новые ключи:

После всего нужно перезапустить агент что бы он перечитал новенькие ключи

Что бы не дожидаться данных, которые появятся в соответствии с указанным в шаблоне интервалом, можно проверить работоспособность новых ключей следующим образом:

Работает, отлично. Значит и данные скоро пойдут
А вот так они выглядят, если немного подождать. Ну и обновляться будут в зависимости от ваших таймеров.
Так как счет ведётся на сутки, то не вижу смысла обновлять данные чаще, чем раз в час.
Если, к примеру, сертификат истекает через 27 дней, то сколько бы раз в день мы не проверяли данные — это число так и будет 27.
Однако, каждому своё. Устанавливайте интервал обновления рассудительно

А так выглядит отработанный триггер

Скачать XML-шаблон абсолютно бесплатно! 🙂

Файлы для фряхи можно забрать с гита. На здоровье

Отслеживание срока действия сертификата с помощью Zabbix : 23 комментария

This is a really good read for me, thank you!

Приветствую. Почитал про LLD, но так и не смог победить Value should be a JSON object в настройках обнаружения. Посоветуете решение?

пробовал запуститься на zabbix агентах версии v2.2.11 и 3.2.3 с сервером 3.2.3, результат одинаков

Здравствуйте.
Покажите ваш вывод следующих команд
1) /etc/zabbix/scripts/sslcheck/ssl_check.sh vk.com
2) zabbix_agentd -p | grep ssl
3) zabbix_agentd -t ‘ssl.discovery’

Добрый день.
1. /etc/zabbix/scripts/sslcheck/ssl_check.sh vk.com
578
2. у второй команды какой-то очень большой вывод, что именно мы там ищем?
3. zabbix_agentd -t ‘ssl.discovery’
‘ssl.discovery’ [m|ZBX_NOTSUPPORTED] [Invalid item key format.]

в третьей команде по-моему некорректные символы ‘
если так zabbix_agentd -t ‘ssl.discovery’, то вывод:
«><«<#SSL>»:»имя_хоста1″]>] [t|<«data»:[<«<#SSL>»:»имя_хоста2

У вас некорректно отрабатывает скрипт /etc/zabbix/scripts/sslcheck/ssl_discovery.sh
какой вывод при его запуске?
А так же укажите вашу операционку

Debian jessie
uname -a (Linux zabbix 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1 (2016-12-30) x86_64 GNU/Linux)
вывод скрипта:
root@zabbix:

# cd /etc/zabbix/scripts/sslcheck/
root@zabbix:/etc/zabbix/scripts/sslcheck# ./ssl_discovery.sh
«]>root@zabbix:/etc/zabbix/scripts/sslcheck#
Вот прям так, со смещением последний строки. синтаксическая ошибка?

Смотрите, код скрипта:

Смешение строки даёт printf. Это не проблема.
У меня подозрение, что вы где то упустили кавычки.
Обрабатывается только последняя строка из скрипта.
Проверьте синтаксис внимательнее. Рекомендую использовать vim с подсветкой синтаксиса

Проверил. не хватало запятой после «do printf «<\»<#SSL>\»:\»$i\»>»
Открывал с помощью VIM, все равно вывод как прежде

Появился прогресс. в строке `cat /etc/zabbix/scripts/sslcheck/list.txt` заменил «`» гравис на апостраф «‘».
Теперь скрипт отдает так
root@zabbix:/etc/zabbix/scripts/sslcheck# ./ssl_discovery.sh
<«data»:[<«<#SSL>»:»cat /etc/zabbix/scripts/sslcheck/list.txt»>]>root@zabbix:/etc/zabbix/scripts/sslcheck#
но не читает домены из list.txt

нет, там должен быть не гравис, а обратный апостроф
Который на букве «ё» на обычной клавиатуре

не буду спорить с автором. но при использовании обратного апострофа результат хуже. быть может у вас есть возможность выложить скрипты скажем в архиве?

Вот, пожалуйста 🙂
С рабочей машинки.

Глеб, благодарю за познавательную и полезную статью, все завелось и полетело. Уверен, косяк был с моей стороны. tradenark.com.ua однозначно в закладки)

Привет.
Все сделал по Вашей инструкции, но почему-то дисковери не хочет находить на хосте данные.
При том, что данные отдаются если с хоста запускать проверку: zabbix_agentd -t ‘ssl.discovery’
Уже даже интервал снизил до 3 минут.
В чем может быть проблема? Спасибо! С Новым Годом!

Я делал это все не на заббикс сервера а на клиенте.

Приветствую, Иван. Так же и вас с Новым Годом 🙂
Давайте попробую вам помочь.
Какой вывод вы получаете при выполнении

?
Так же проверьте есть ли у вас в основном конфигурационном файле параметр, отвечающий за подключение сторонних конфигураций. Должно быть что то вроде

Спасибо за столь быстрый ответ в праздничные выходные.

sudo -u zabbix /etc/zabbix/scripts/sslcheck/ssl_discovery.sh
<«data»:[<«<#SSL>»:»yourhoroscope.app»>,<«<#SSL>»:»handsetapp.com»>]>#

Инклюд в конфиге присутствует
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf

Сам скрипт у вас работает. Теперь нужно проверить подхватилась ли конфигурация.
Во первых при изменении конфигурации zabbix-агента нужно перезапускать службу.
Во вторых проверить все модули можно при помощи команды zabbix -p.
В вашем случае после перезапуска сервиса попробуйте

Вывод будет в любом случае.
Вероятно у вас Ubuntu и путь инклюда отличается. Вам нужно вместо /etc/zabbix/zabbix_agentd.d/ssl.conf использовать файл /etc/zabbix/zabbix_agentd.conf.d/ssl.conf

Сервис конечно же перезапускал.
zabbix_agentd -p | grep discovery
вывод полный и там есть сервисы, которые добавлял.

Include прописан верно

drwxr-xr-x 3 zabbix zabbix 4.0K Jan 1 12:38 scripts
-rw-r—r— 1 root root 11K Jan 1 14:38 zabbix_agentd.conf
drwxr-xr-x 2 root root 4.0K Jan 1 12:50 zabbix_agentd.conf.d

А вы навесили на хост новый шаблон, в котором прописаны айтемы и дискавери?

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Мониторинг срока действия сертификата веб-сайта в zabbix

Задача:

Настроить мониторинг срока действия сертификата веб-сайта в zabbix.

Для сайта osBSD.com настроен Let’s Encrypt сертификат, который автоматически продлевается каждые три месяца при помощи ACME.

Статьи где я настраивал Let’s Encrypt на других систем:

И так есть сертификат, который будет действителен ещё более одного месяца.

Для мониторинга общих задач, не требующих быстрого реагирования, я обычно использую отдельный прокси заббикса на виртуальной машину в интернете или непосредственно сам zabbix сервер при небольшой сети или нагрузках.

Я буду использовать сервер забиска версии 5.2.3

Авторизуемся на нём и проверяем версию агента

Начиная с версии 5 параметр EnableRemoteCommands устаревает , поэтому он больше не рекомендуется и в конечном итоге перестанет работать по мере обновления версии. Добавляем параметр AllowKey = system.run [*] и комментируем DenyKey. Но он может быть уже быть комментированным. Более подробно можно найти в официальной документации по запросу “ОГРАНИЧЕНИЕ ПРОВЕРОК АГЕНТА”

Пробуем узнать до какого числа действует сертификат

В папке с настройками заббикса я создал папку для скриптов

Сохраняем скрипт и выдаём необходимые права

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

Теперь открываем, веб-интерфейс забикса, переходим в настройки, выбираем заббикс сервер и добавляем item

Копируем ключь для проверки

Заполняем все согласно картинки ниже.

Если правильно настроили в последних данных можно проверить работу мониторинга.

Параметр “Update interval” равный 10 секунд был установлен для тестирование и настройки. Проверять срок действия сертификата достаточно один раз в день, устанавливаем 1d.

Для кириллических доменов необходимо использовать конвертер punycode. В сети их много, ищите что то подобное этому.

Если возникли ошибки. Попробуйте перенастроить конфиг

В завершении нам необходимо настроить тригер. Я уже описывал настройку в статье по мониторингу доступности сайта “Настройка триггеров для мониторинга сайта в Zabbix” Для мониторинга срока действия ssl сертификата в zabbix я бы уведомлял за месяц.

Создаём новый тригер “Create trigger”

На этом всё. Если у вас не настроено оповещение, можно глянуть “Подключаем Telegram к Zabbix“

Zabbix — срок действия SSL сертификата

Сегодня напишем скрипт для мониторинга срока действия SSL сертификатов наших сайтов.

Этот мониторинг пригодится многим:

  • Системным администраторам в крупных компаниях, чтобы не пропустить момент перевыпуска сертификатов. Особенно, если количество сайтов — сотни.
  • Владельцам собственных сайтов. Многие пользуются сервисом Let’s Encrypt, особенностью сертификатов которого является короткий срок жизни. Если автоматика обновления сертификатов выйдет из строя, то мониторинг SSL сертификатов поможет выявить проблему до того, как она себя проявит.

Это уже вторая модификация скриптов мониторинга. Главная особенность — низкая нагрузка на заббикс.

Ссылки

Подготовка

Для работы с SSL нам потребуется утилита openssl:

Весь мониторинг основан на команде:

Команда выводит дату завершения срока действия SSL сертификата.

Скрипты

Мониторинг у меня будет находиться на самом заббикс-сервере. Создаём следующую структуру каталогов:

В директории /usr/lib/zabbix/externalscripts создадим папку ssl_expire с содержимым:

  • data — директория, пока пустая. Наполняться будет автоматически.
  • domain_list.txt — файл содержит список сайтов, для которых нужно проверять срок действия SSL сертификата. В одной строке один домен, например: Кириллические домены работают только в puny-коде. Конвертер в помощь.
  • ssl_check.sh — этот скрипт вызывается из заббикс-агента пользовательскими переменными. Без параметра он выводит JSON со списком доменов для автообнаружения. С доменом в качестве параметра возвращает количество дней до окончания срока действия SSL сертификата, домен должен быть в списке domain_list.txt.
  • ssl_cron.sh — этот скрипт вызывается в cron раз в шесть часов и обновляет информацию о всех SSL для доменов из списка.
  • ssl_miss.sh — этот скрипт вызывается из заббикс-агента пользовательскими переменными. С доменом в качестве параметра возвращает количество дней, прошедших с момента последнего обновления данных кроном. Помогает вызвать триггер с предупреждением, если crontab перестанет работать или по какой-то причине перестанет обрабатываться домен в скрипте.

Примечания к скриптам

В коде скриптов есть путь вида usr/lib/zabbix/externalscripts/, если у вас другие пути — нужно будет изменить.

Это получение текущей даты. На самом деле формат даты практического применения не имеет, просто привожу дату к такому же формату, как у сертификата.

  • TZ=GMT — переводит дату в формат GMT
  • LANG=en_EN — устанавливает язык
  • «%b %d %R:%S %Y %Z» — формат даты вида: Jun 14 03:59:01 2019 GMT

Crontab

В крон добавляем расписание, срабатывает раз в шесть часов:

По идее скрипт должен выполниться и папка data заполнится файлами с названиями доменов. Если не выполнится — запустите ssl_cron.sh сами, а потом разбирайтесь, что там с кроном.

Пример содержимого файлов на примере домена internet-lab.ru.

Внутри файлов пишется две даты. Дата проверки в формате GMT.

Дата истечения сертификата (если удалось определить) в формате GMT:

Zabbix агент

Теперь нужно настроить заббикс-агент, чтобы он отдавал данные серверу. Убеждаемся, что в /etc/zabbix/zabbix_agentd.conf есть настройка:

Переходим в папку /etc/zabbix/zabbix_agentd.conf.d/, создаём файл ssl_expire.conf с содержимым:

  • ssl_expire.list — список доменов в JSON для автообнаружения.
  • ssl_expire.check[*] — дней до окончания срока действия сертификата (float, потому как может возвращать «-1»).
  • ssl_expire.miss[*] — сколько дней назад была проверка. В идеале должно быть 0, иначе нужно разбираться.

Zabbix шаблон

Ставим на сервер шаблон и привязываем к заббикс-серверу. Шаблон я уже набросал.

В шаблоне одно приложение:

Одно правило автообнаружения, срабатывает раз в час для обновления списка доменов:

Читайте также:  Windows kernel error code
Оцените статью