Доступность, нагрузка, логи, задания
Доступность

По расписанию (NKT_PROBE_INTERVAL, по умолчанию раз в минуту) проверяются слушатели веб-серверов и бэкенды пулов, опубликованные порты Docker и Podman, проброшенные порты LXD, а работающие инстансы LXD и машины libvirt — ping по их адресу. На control plane Kubernetes — ещё и кластер: Ingress (HTTP-запрос с его именем хоста через входной контроллер), сервисы NodePort и LoadBalancer (соединение с портом узла) и узлы кластера (ping). Проверка — TCP-соединение, HTTP-запрос с верным заголовком Host или ping. История превращается в:
- тепловую карту «час недели × простой» — видно, когда сервис падает регулярно;
- графики доступности и задержки за период;
- список сбоев с началом, концом и текстом ошибки.
Кроме найденных автоматически, можно добавить свои цели кнопкой «+ цель»: ping, TCP, HTTP или HTTPS на любой адрес, внутренний или внешний. Свои цели скан не трогает, удалить их можно из списка.
Нагрузка

- Графики нагрузки по счётчикам iptables, логам доступа nginx/haproxy и нагрузке контейнеров и машин за выбранный период: для сети, процессора и памяти рядом выбирается источник — Docker, Podman, LXD, Libvirt (
virsh domstats) или Kubernetes (поды,kubectl top); записи логов сортируются по собственной метке времени, поэтому график показывает, когда нагрузка была, а не когда её собрали. - Показатели идут по важности: первым и по умолчанию — процессор, затем память, затем сеть и остальное. Источник по умолчанию — первый, у которого есть данные за сутки (Docker → Podman → LXD → Libvirt → Kubernetes), источники без данных помечены «нет данных». Последний источник — Хост целиком: процессор и память самой машины; он открывается, когда движков контейнеров на хосте нет.
- У Kubernetes два источника: Kubernetes — поды, Kubernetes · узлы — узлы кластера, включая рабочие (
kubectl top nodes). Для подов есть фильтры по узлам (несколько) и namespace. - Над графиком — выбор объектов: по умолчанию рисуются самые нагруженные, а остальное сворачивается в «Другое»; в списке с поиском можно выбрать любые, кнопка «Что в «Другом»?» открывает этот список.
- Графики, рейтинг и расписание читают почасовые сводки, которые ведутся при записи замеров, а не минутные замеры: страница открывается быстро и не держит базу хоста (раньше на хосте с Kubernetes запросы шли секундами, и хост в это время мог не ответить хабу). Минутные замеры хранятся трое суток, почасовые сводки — не меньше 90 дней (
NKT_RETENTION, если он больше). Первый запуск после обновления один раз строит сводки по накопленной истории. - Рейтинг самых нагруженных ресурсов и расписание нагрузки по часам.
- Вкладка btop — живой
btopв окне терминала; если его нет на хосте — ставится кнопкой.
Логи
Логи journald по юнитам и файлы из /var/log, включая архивные и сжатые. В списке юнитов — только установленные службы: у службы, которой на хосте нет, журнала тоже нет. Живое слежение через WebSocket с фильтром, подсветкой и автопрокруткой; окно лога можно открепить в отдельное окно браузера и держать рядом.
Задания

Всё долгое — установка пакетов, продление сертификата, применение профиля, создание машины — выполняется фоновым заданием с журналом, шагами и отменой. Список заданий хоста: вид, шаг, статус, автор, длительность; журнал — в реальном времени. Задание, прерванное перезапуском службы, продолжается или честно помечается прерванным.
Список — как журнал оповещений: фильтры по состоянию и виду, поиск по тексту (название и его аргументы — имена хостов, адреса, — автор, шаг, ошибка) по всем заданиям, а не только по последним; страницы по 20, 50 или 100 и порядок по дате — щелчком по «Начато». Фильтр, размер страницы и порядок запоминаются в этом браузере. Так же устроены «Задания» хаба.
Заданиями идут и установка и удаление пакетов apt, snap и flatpak, обновление системы, установка движков (LXD, Podman), btop, tmux, ufw и firewalld, создание инстансов LXD и контейнеров Podman, скачивание образов LXD и смена паролей гостей, остановка и снимки инстансов LXD, сохранение образов Docker, загрузка файлов с компьютера, распаковка архива в проводнике, генерация локалей, удаление пользователя с домашним каталогом, удаление Kubernetes с узла, выпуск и продление сертификата certbot, сканирование уязвимостей. На хабе — обновление самого хаба, «Обновить всё», запуск и остановка nkt на всех хостах, применение манифеста в кластерах, удаление хоста с очисткой, обновление баз уязвимостей и ClamAV, сбор мониторинга, сканирование уязвимостей хоста. Долгие операции хоста, которые хаб вызывает из своих заданий (скачивание и удаление пакетов, удаление Kubernetes, генерация локалей), тоже идут заданиями хоста: их журнал переносится в журнал задания хаба. Кнопка сразу открывает окно журнала с процентами (у apt — по его статусу); закрытое окно открывается снова из «Заданий». Через хаб — то же самое: это задания самого хоста.

Индикатор фоновых операций — кнопка «N операций» в правом нижнем углу любого раздела, пока что-то идёт: на хосте — его задания, на хабе — задания самого хаба и всех хостов в сети (с именем хоста). В списке — шаг и полоса процентов, нажатие открывает журнал задания. Так ход долгой операции виден и после ухода из раздела, где она начата, и с другого хоста.
Журнал действий

Каждое изменение через интерфейс и API: кто, что, когда, с каким результатом и выводом команды; фильтры по действию и результату. Виды действий в фильтре (clamav.*, fail2ban.*, system.*…) берутся из самого журнала — в списке ровно то, что на этом хосте встречалось. Здесь же — состояние фоновых задач планировщика: интервал, последний запуск, сколько обработано, ошибки.