1

Улучшенный мониторинг веб-сайтов и SSL-сертификатов: как Checkmk прокачал классические проверки

Улучшенный мониторинг веб-сайтов и SSL-сертификатов: как Checkmk прокачал классические проверки IT, Мониторинг, Ssl, Https, DevOps, It-инфраструктура, Rust, Администрирование, Сервер, Сертификат, Безопасность, Linux, Open Source, Длиннопост

В современном мире, где мониторинг веб-сайтов и проверка SSL-сертификатов становятся всё более сложными, простого «пинга» сервера уже недостаточно для определения состояния сайта. Балансировщики нагрузки, HTTPS, различные версии HTTP и нюансы сертификатов требуют более продвинутых инструментов мониторинга.

Компания Checkmk представила check_httpv2 новую, быструю и мощную реализацию мониторинга веб-сайтов и HTTPS-сервисов с открытым исходным кодом. Вместе с ним представлен инструмент check_cert для детальной проверки SSL-сертификатов.

Почему важен мониторинг веб-сайтов и SSL-сертификатов?

Ранее используемые решения, такие как check_http из мира Nagios, служили нам более 20 лет, но теперь они не справляются с современными задачами. Проверка сертификата и кода ответа требовала двух отдельных запросов, а о продвинутых сценариях, таких как контроль конкретных криптосетей и издателя сертификата, можно было только мечтать. Теперь все эти возможности доступны:

  • Мониторинг сайта в один запрос.

  • Контроль остаточного срока действия сертификата.

  • Проверка используемых алгоритмов шифрования.

  • Возможность использования в Checkmk, в любом совместимом с Nagios решении или как отдельный CLI-инструмент.

От check_http к check_httpv2

Улучшенный мониторинг веб-сайтов и SSL-сертификатов: как Checkmk прокачал классические проверки IT, Мониторинг, Ssl, Https, DevOps, It-инфраструктура, Rust, Администрирование, Сервер, Сертификат, Безопасность, Linux, Open Source, Длиннопост

Старый плагин check_http, появившийся ещё в конце 90-х вместе с Nagios, пережил множество обновлений и до сих пор используется во многих системах.
Однако его возраст даёт о себе знать:

  • Для проверки кода ответа HTTP и срока действия SSL-сертификата нужны были два отдельных запроса.

  • Ряд полезных функций, которые сегодня стали стандартом, просто отсутствовал.

  • Поддержка разных версий разошлась — плагин существует в вариантах Monitoring Plugins и Nagios Plugins, а объединить усилия не получилось.

Разработчики Checkmk решили написать новый инструмент с нуля, чтобы преодолеть эти ограничения.

Rust для мониторинга веб-сайтов

Для разработки нового инструмента разработчики Checkmk выбрали язык программирования Rust. Он быстрый, безопасный и удобный в поддержке. Python проигрывал по производительности, а C/C++ — по удобству поддержки.

Так появился check_httpv2 — современная, чистая реализация плагина, готовая к любым задачам мониторинга. Вместе с ним был создан отдельный инструмент для глубокого анализа сертификатов — check_cert.

Мониторинг сайтов с check_httpv2

Check_httpv2 можно использовать не только внутри Checkmk, но и как отдельный инструмент в терминале. Это позволяет тестировать новый плагин без перестройки всей инфраструктуры мониторинга.

Сборка своими руками

На свежей Ubuntu 24.04 выполняется следующим образом:

sudo apt install cargo libssl-dev pkg-config git

cd ~/git

git clone https://github.com/Checkmk/checkmk.git

cd checkmk/packages/site/check-http/

cargo check --release

cargo build --release

cd ../target/release/

Для проверки сертификатов путь будет почти таким же — просто вместо check-http используем check-cert.

Первая проверка сайта

В Checkmk всё настраивается через меню:

Настройка → Службы → HTTP, TCP, электронная почта… → Сеть → Проверить веб-службу HTTP.

Там указываем имя и URL сайта, который хотим отслеживать, и через пару кликов получаем в мониторинге статус веб-сервера.

Если хочется протестировать автономно, в терминале это выглядит так:

./check_httpv2 --url https://www.checkmk.com

В ответ получаем:

  • Код состояния (200 OK, 301 Redirect и т. д.).

  • Факт наличия или отсутствия HTTPS.

  • Перенаправления, если они есть.

Проверка срока действия сертификата

Хотите, чтобы система предупредила за 40 дней до истечения сертификата и прислала CRIT за 20 дней? Легко:

./check_httpv2 --url https://www.checkmk.com --certificate-levels 40,20

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

Check_cert: когда «валидный» сертификат — ещё не гарантия безопасности

Многие администраторы считают, что если SSL-сертификат валиден, то всё в порядке. Но это не всегда так. Представьте атаку типа man-in-the-middle: сертификат действителен, но выдан совершенно другим центром сертификации, чем ваш обычный. Или сайт вроде бы использует TLS 1.3, но с небезопасными алгоритмами шифрования.

Здесь в игру вступает check_cert — инструмент для детальной проверки сертификатов, созданный с нуля на Rust и интегрированный в Checkmk.

Программа check_cert обладает широким спектром функций для детального анализа сертификатов:

  • Определение времени до окончания срока действия сертификата, с возможностью указания оставшегося времени в днях или секундах.

  • Контроль за максимальным сроком действия сертификата.

  • Анализ алгоритмов подписи и длины ключа.

  • Проверка информации о центре сертификации (issuer) и имени субъекта (subject).

  • Гибкость использования: может быть интегрирована как плагин в системы, совместимые с Nagios, или применяться как автономная утилита с командной строкой CLI.

Пример мощной проверки

./check_cert --url checkmk.de --port 443 \
--not-after 3456000 1728000 \
--max-validity 90 \
--serial 05:0e:50:04:eb:b0:35:ad:e9:d7:6d:c1:0b:36:d6:0e:33:f1 \
--signature-algorithm 1.2.840.10045.4.3.2 \
--issuer-o "Let's Encrypt" \
--pubkey-algorithm rsa \
--pubkey-size 256

Эта команда обеспечивает всестороннюю проверку, охватывая такие аспекты, как серийный номер и алгоритм шифрования.
В Checkmk все настройки выполняются всего в несколько кликов через раздел «Сеть» → «Проверка сертификатов», а результаты мониторинга отображаются вместе с предупреждениями в случае несоответствия параметров ожиданиям.

Массовый мониторинг сайтов в Checkmk

Управление несколькими сайтами (3–5) не вызывает сложностей, однако при работе с более чем 200 сайтами ручная настройка каждого правила становится утомительной задачей.
Checkmk предлагает два эффективных метода для решения этой проблемы:

1. Группировка конечных точек (endpoints) в одном правиле

В конфигурации check_httpv2 можно задать список URL-адресов, для которых будет применяться общая базовая настройка. При этом для каждого сайта можно определить индивидуальные параметры, переопределяющие общие.
Например, можно создать одно правило для домена, поддоменов и страницы с политикой конфиденциальности, задав для каждого адреса уникальные пороги времени ответа.

2. Использование макросов ($HOSTNAME$)

Вместо конкретного URL в правиле используется переменная $HOSTNAME$. Если в папке хостов присутствует example.com, проверка автоматически выполняется по адресу https://example.com.

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

Анализ работы балансировщиков нагрузки с check_httpv2

Большинство крупных сайтов скрывают свою инфраструктуру за балансировщиками нагрузки. Для пользователя это выглядит как простой редирект, но для администратора это может стать проблемой, поскольку неполадки могут возникать как в самом балансировщике, так и на одном из бэкенд-серверов.
Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил, что он у себя в постели превратился в страшное насекомое.

Check_httpv2 способен проводить более глубокий анализ. По умолчанию он отслеживает редиректы и указывает их конечные адреса:

URL to test: https://example.com/
Stopped on redirect to: https://www.example.com/ (changed IP) (!)
Status: 301 Moved Permanently

Для проверки конкретного сервера в обход балансировщика используется параметр –server:

./check_httpv2 --url example.com --server 192.0.2.73

Это позволяет выполнить тестирование напрямую по IP-адресу и быстро определить работоспособность бэкенда. В Checkmk эта настройка осуществляется через опцию «Подключение к физическому хосту». Не следует путать это с прокси, для которого предусмотрен отдельный параметр –proxy-url.

Таким образом, в одном правиле можно задать проверку основного домена и каждого IP-адреса за балансировщиком. Это особенно полезно для диагностики проблем с производительностью, когда необходимо определить, какой сервер вызывает неполадки.

Проверка содержимого сайта с check_httpv2

Иногда страница может быть открыта, сертификат действителен, но содержимое оказывается пустым или содержит ошибки. Причина может быть банальной: сбой CMS, падение бэкенда или загрузка «пустого» HTML.

Check_httpv2 способен искать в ответе определённые строки или регулярные выражения как в заголовках, так и в теле страницы. Это превращает проверку из простого пинга в полноценный контроль бизнес-логики.

Например, можно проверить наличие ключевого слова на странице с авторизацией:

./check_httpv2 \

--auth-user peter \

--auth-pw-plain spiderman \

--body-regex '(?m)check(_)?mk'

В этом случае плагин проверит наличие строк checkmk или check_mk в HTML-коде, даже если страница защищена паролем.

Сценарии использования включают:

  • Убедиться, что на главной странице присутствует важный элемент (например, кнопка «Купить»).

  • Следить за появлением определённых слов во внутреннем портале компании (например, «реструктуризация» или «срочное уведомление»).

  • Мониторить наличие баннеров или акций на e-commerce сайте.

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

Тесты производительности с hyperfine

Обычная проверка check_httpv2 предоставляет время отклика, но для серьёзного анализа этого недостаточно, особенно если за сайтом стоят балансировщики, прокси или CDN. В таких случаях на помощь приходит инструмент hyperfine — лёгкий, но мощный бенчмарк для команд CLI.

Hyperfine позволяет многократно запускать команду и вычислять среднее время её выполнения.
Эти инструменты позволяют:

  • обнаружить резкие изменения в скорости ответа;

  • определить, есть ли неполадки с отдельными серверами за балансировщиком;

  • оценить влияние изменений в конфигурации.

Пример использования инструмента hyperfine:

hyperfine --warmup 2 -r 20 './check_httpv2 --url https://checkmk.com'

  • --warmup 2 — два предварительных запуска для «прогрева», чтобы исключить влияние кэша на результаты;

  • -r 20 — проведение 20 измерений.

  • По завершении hyperfine предоставляет среднее время отклика, стандартное отклонение и диапазон значений.

Пример результата:

Time (mean ± sigma): 124.6 ms ± 9.8 ms

Range (min ... max): 108.3 ms ... 139.9 ms (20 runs)

Такой подход позволяет отслеживать стабильность отклика и быстро реагировать на снижение производительности.

Итоги и перспективы развития check_httpv2 и check_cert

Уже сейчас check_httpv2 и check_cert способны решать большинство задач современного мониторинга:

  • проверка доступности и скорости работы сайта;

  • контроль сертификатов (срок действия, валидность, алгоритмы, издатель);

  • работа с несколькими сайтами в рамках одного правила;

  • проверка содержимого страниц;

  • гибкая интеграция в Nagios-совместимые системы или использование в качестве самостоятельного инструмента командной строки.

Все эти возможности дополняются удобным веб-интерфейсом Checkmk:

  • параметры, доступные в командной строке, также присутствуют в GUI;

  • результаты можно визуализировать с помощью графиков (время отклика, загрузка заголовков, контента и т. д.);

  • предусмотрены встроенные подсказки и контекстная справка.

Планы на будущее

Разработчики рассматривают возможность расширения функционала:

  • мониторинг сертификатов за прокси-серверами;

  • внедрение новых метрик производительности;

  • добавление дополнительных сценариев тестирования контента.

check_httpv2 и check_cert — это не просто обновлённые версии старых инструментов, а полноценные решения для глубокого анализа веб-сервисов. С ростом сложности сайтов эти инструменты становятся всё более полезными и незаменимыми.