Много раз проскакивало желание у многих получить простой инструмент, позволяющий следить за истекающими сертификатами SSL. Ниже представляю инструмент для самостоятельного развертывания в среде docker.
Код написан для python14, но работать будет и на других версиях (12, 13, 14 и т.д.).
Что включает проект (все в одном):
api: fastapi |
db: postgres |
db ui: pgadmin |
task queue: celery (beat + worker) |
dashboard: grafana |
Важно:
Для инициализации БД в директории файл ./init/db.sql
Для pgadmin владелец на директории должен быть 5050:
chown -R 5050:5050 ./pgdata/pgadmin
Для grafana владелец на директории должен быть 472:
chown -R 472:472 ./grafana-data/
Алгоритм работы:
Получаем токен (таблица token). Токен позволяет добавить конечный узел проверки (endpoint).
При добавлении endpoint, проверяется узел:порт и есть ли на нем сертификат. В случае успеха, в таблицу certificate добавляется существующий сертификат, в таблицу endpoint добавляется узел + порт, в таблицу certificate_endpoint_ref - связка (certificate_id, endpoint_id), в таблицу token_endpoint_ref - связка (token_id, endpoint_id). Это позволяет нам разделить потребителей мониторинга, узел проверяется только раз, но результат проверки доступен любому потребителю, чужие ресурсы не доступны.
Список доменов разбивается на чанки. Каждый чанк запускается в своем потоке и происходит проверка узлов.
Далее метрики доступны через /metrics/expiring_certs. Набор возвращаемых метрик можно перечислить через запятую.

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

Полезные команды понаблюдать процесс:
docker compose logs -f --tail 10 celery_worker
Ссылка на github:
https://github.com/highsenka/sslchecker
