Ошибки и их решение
В разделе собраны типовые неисправности Пересвет-СТ, их признаки, порядок диагностики и безопасные способы восстановления. Команды рассчитаны на установку через актуальный мастер Пересвет-СТ под Ubuntu Server 24.04 LTS.
Если состав установки отличается, уточните имена служб и пути в документации своей поставки. Не переустанавливайте компоненты и не удаляйте каталоги баз данных до выяснения причины.
Перед началом диагностики
- Зафиксируйте время появления ошибки, действие пользователя и полный текст сообщения.
- Проверьте, выполняется ли активная задача. Перезапуск
peresvet-agentзавершает работающую на этом агенте задачу. - Сначала соберите состояние и журналы, затем перезапускайте службы. После перезапуска часть исходных признаков может исчезнуть.
- Не отправляйте в службу поддержки пароли,
ST_SECRET_KEY, файлы лицензий, закрытые ключи и полное содержимое.env. - Перед изменением дисков, файловой системы или данных СУБД сделайте резервную копию и согласуйте окно обслуживания.
Для установки, выполненной мастером, сначала можно запустить тот же install и выбрать Проверить состояние. Мастер проверяет установленные службы, конфигурацию, Grafana, DPDK и другие компоненты. Журнал мастера находится в /var/log/peresvet-wizard.log.
Быстрая проверка контроллера
Выполните на машине контроллера:
date -Is
hostnamectl
uptime
df -hT
df -ih
free -h
systemctl --failed
systemctl is-active postgresql clickhouse-server grafana-server peresvet-controller
ss -ltnp
Нормальное состояние типовой установки:
| Компонент | Служба | Порт | Проверка готовности |
|---|---|---|---|
| PostgreSQL | postgresql / postgresql@<версия>-<кластер> | 5432 | pg_isready |
| ClickHouse | clickhouse-server | 8123 | curl -fsS http://127.0.0.1:8123/ping |
| Grafana | grafana-server | 3000 | curl -fsS http://127.0.0.1:3000/api/health |
| Контроллер | peresvet-controller | 8080 | curl -I http://127.0.0.1:8080/ |
Порт может отличаться, если при установке было задано другое значение.
Как понимать сетевую ошибку
| Сообщение | Что означает | Что проверять первым |
|---|---|---|
connection refused | Узел доступен, но на указанном порту никто не принимает соединения | состояние службы, слушающий порт, адрес и порт в конфигурации |
timeout / context deadline exceeded | Ответ не получен за отведённое время | маршрут, межсетевой экран, адрес назначения, перегрузку или зависание службы |
401 Unauthorized / 403 Forbidden | Служба доступна, но запрос не авторизован | учётные данные, токен, права, прокси авторизации |
404 Not Found | Служба доступна, но путь или объект не найден | URL, версию компонента, идентификатор объекта, согласованность компонентов |
EOF / connection reset by peer | Удалённый процесс закрыл соединение до завершения ответа | журнал удалённого сервиса, OOM, падение процесса, несовместимость версий |
address already in use | Порт уже занят другим процессом | повторно запущенный экземпляр или неверный порт |
Ошибки PostgreSQL и авторизации
При входе показано dial tcp 127.0.0.1:5432: connect: connection refused
Что означает. Ошибка не связана с логином или паролем пользователя Пересвет-СТ. Контроллер не может подключиться к PostgreSQL, поэтому авторизация и операции с конфигурациями недоступны.
Диагностика:
systemctl status postgresql --no-pager -l
pg_lsclusters
pg_isready -h 127.0.0.1 -p 5432
ss -ltnp | grep ':5432'
journalctl -u postgresql@16-main -b -n 200 --no-pager
tail -n 200 /var/log/postgresql/postgresql-16-main.log
df -hT
df -ih
Если версия или имя кластера отличаются, возьмите их из pg_lsclusters и замените postgresql@16-main.
Что делать:
-
Если кластер остановлен, а в журнале нет ошибки диска или повреждения данных, запустите PostgreSQL:
sudo systemctl restart postgresql -
Если служба не запускается, устраните причину из журнала: нехватку места, незавершённую настройку пакетов, ошибку конфигурации или прав.
-
Не удаляйте
/var/lib/postgresqlи не создавайте новый кластер поверх существующего.
Проверка восстановления:
pg_isready -h 127.0.0.1 -p 5432
sudo -u postgres psql -Atqc 'select current_timestamp;'
curl -I http://127.0.0.1:8080/
После этого повторите вход в интерфейс.
Показано Database is temporarily unavailable
Контроллер показывает это сообщение, когда PostgreSQL завершает работу, восстанавливается или ещё не принимает соединения. В журнале могут встречаться SQLSTATE 57P01, 57P02 или 57P03.
Проверяйте не только общий unit postgresql.service: на Ubuntu он может иметь состояние active (exited), когда конкретный кластер остановлен.
pg_isready
pg_lsclusters
systemctl status postgresql@16-main --no-pager -l
journalctl -u postgresql@16-main -b -n 200 --no-pager
df -hT
Дождитесь состояния accepting connections. Если оно не наступает, устраните ошибку конкретного кластера и только затем перезапустите контроллер.
PostgreSQL работает, но контроллер получает password authentication failed
В этом случае порт доступен, но параметры подключения контроллера не совпадают с настройками PostgreSQL.
Диагностика:
pg_isready -h 127.0.0.1 -p 5432
sudo -u postgres psql -Atqc 'select current_user, current_database();'
sudo grep -E '^(DB_HOST|DB_PORT|DB_USER|DB_NAME)=' /opt/peresvet/controller/.env
journalctl -u peresvet-controller -b -n 200 --no-pager
Не выводите DB_PASS в общий терминал или обращение в поддержку.
Что делать. Исправьте подключение через мастер установки из той же поставки или восстановите согласованные параметры из защищённой резервной копии. Не сбрасывайте пароль PostgreSQL на случайное значение: его также использует контроллер.
После установки или обновления PostgreSQL пакеты не настроены
Характерные сообщения:
dpkg was interrupted;dependency problems prevent configuration;postgresql-commonилиpostgresql-client-commonимеют состояниеiU;- версии
perl,perl-base,perl-modulesилиlibperlне совпадают.
Диагностика:
sudo dpkg -C
dpkg-query -W -f='${Package}\t${Version}\t${db:Status-Abbrev}\n' perl perl-base perl-modules-5.38 libperl5.38t64 postgresql-common postgresql-client-common
tail -n 200 /var/log/peresvet-wizard.log
Что делать:
-
Используйте пакеты из актуальной поставки для той же версии Ubuntu. Не смешивайте пакеты разных выпусков ОС.
-
После выравнивания версий завершите настройку:
sudo dpkg --configure -a -
Повторно запустите мастер и выберите проверку состояния или штатное обновление компонентов.
-
Убедитесь, что
sudo dpkg -Cне выводит незавершённые пакеты, а PostgreSQL принимает соединения.
Если для выравнивания версий нужны пакеты, которых нет в поставке, остановитесь и обратитесь в поддержку. Не подключайте случайный внешний репозиторий на офлайн-стенде.
Дисковое пространство и оперативная память
Дисковое пространство и оперативная память — разные ресурсы:
- заполнение диска отображается в
df -hTи мешает СУБД записывать данные; - исчерпание inode отображается в
df -ihи не позволяет создавать файлы даже при наличии свободных гигабайт; - нехватка RAM отображается в
free -h, приводит к swap-нагрузке или завершению процесса OOM killer; - hugepages заранее резервируют часть RAM для DPDK и поэтому недоступны обычным процессам ОС.
No space left on device, PostgreSQL аварийно остановлен или диск заполнен
При заполнении диска PostgreSQL может прекратить работу, ClickHouse — перестать принимать метрики, а контроллер — показывать ошибки авторизации и сохранения.
Диагностика:
df -hT
df -ih
sudo du -xhd1 /var /opt 2>/dev/null | sort -h
sudo journalctl --disk-usage
sudo du -xhd1 /var/lib/postgresql /var/lib/clickhouse 2>/dev/null | sort -h
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINTS
df -h проверяет место, а df -ih — свободные inode. Ошибка возможна при исчерпании любого из этих ресурсов.
Что делать:
- Остановите новые задачи и операции импорта, увеличивающие объём данных.
- Освободите место только за счёт подтверждённых временных файлов, старых резервных копий или журналов согласно политике эксплуатации.
- Если требуется расширение диска или LVM, сначала подтвердите назначение каждого устройства через
lsblk,pvs,vgs,lvsиwipefs -n. Операцииpvcreate, форматирования и удаления сигнатур разрушают данные и не должны выполняться по примерной инструкции. - Никогда не удаляйте вручную содержимое
/var/lib/postgresql,/var/lib/clickhouseили/var/lib/grafana. - После восстановления свободного места запустите СУБД и проверьте готовность.
sudo systemctl restart postgresql
sudo systemctl restart clickhouse-server
pg_isready
curl -fsS http://127.0.0.1:8123/ping
Где может расходоваться дисковое пространство
Точные пути зависят от WorkingDirectory systemd-служб. Для установки через мастер это обычно /opt/peresvet/controller и /opt/peresvet/agent.
systemctl show peresvet-controller -p WorkingDirectory
systemctl show peresvet-agent -p WorkingDirectory
| Каталог или ресурс | Что хранится | Почему растёт | Как очищать |
|---|---|---|---|
/opt/peresvet/controller/.uploads | Дампы трафика, загруженные с агентов | Каждый агент передаёт итоговый PCAP на контроллер; файлы разных задач накапливаются | Архивировать или удалять подтверждённые старые PCAP после остановки захвата |
/opt/peresvet/agent/.dumps | Текущие и незавершённые локальные дампы агента | Активный захват, аварийное завершение задачи или агента | Очищать только при отсутствии активной задачи; нужный дамп сначала перенести |
/opt/peresvet/agent/.configs/runtime_pcaps | Временные объединённые PCAP Dynamic Applications | Подготовка приложений для запуска задачи | Удалять только остатки завершённых задач при остановленном генераторе |
.files, .pcaps, .dynamic_applications, .malware, .cves, .hars | Управляемые объекты библиотеки | Импорт PCAP, приложений, CVE, malware и HAR; копии синхронизируются на агенты | Удалять через интерфейс библиотеки; не удалять файлы вручную отдельно от метаданных |
/var/lib/clickhouse | Метрики, события задач и специализированная телеметрия | Посекундные данные от всех агентов и ядер; долгий или отсутствующий TTL | Очищать через ClickHouse по подтверждённым старым разделам или штатной политике хранения |
/var/lib/postgresql | Пользователи, задачи, конфигурации и метаданные | Рост числа объектов, импортов и журналов задач | Удалять данные через продукт; обслуживание PostgreSQL выполнять с резервной копией |
/var/log, /var/log/journal | Системные журналы и журналы служб | Повторяющаяся ошибка, подробное логирование, отсутствие ротации | Сначала сохранить диагностику, затем применять ротацию или journalctl --vacuum-* |
/var/lib/systemd/coredump, /var/crash | Дампы памяти упавших процессов | Повторяющиеся падения агента, ядра или стороннего сервиса | Сохранить нужный core для анализа, старые подтверждённые файлы удалить |
/var/lib/docker | Контейнеры, образы, слои и журналы контейнеров | Старые образы, остановленные контейнеры, неограниченный container log | Сначала docker system df -v, затем удалять только подтверждённые неиспользуемые объекты |
/tmp, /var/tmp, старые каталоги поставок | Временные файлы, распакованные архивы и резервные копии обновлений | Незавершённая установка или сохранённые копии | Проверить дату и назначение; использовать системную очистку временных файлов |
| Удалённый, но открытый файл | Файл уже не виден в каталоге, но процесс удерживает его inode | Удаление активного журнала или дампа без перезапуска владельца | Найти через lsof +L1, затем штатно перезапустить только процесс-владелец |
Быстрая проверка основных источников:
sudo du -xsh \
/opt/peresvet/controller/.uploads \
/opt/peresvet/agent/.dumps \
/opt/peresvet/controller/.files \
/opt/peresvet/controller/.dynamic_applications \
/opt/peresvet/controller/.malware \
/opt/peresvet/controller/.cves \
/var/lib/clickhouse \
/var/lib/postgresql \
/var/lib/systemd/coredump \
/var/log /var/lib/docker /home /tmp /var/tmp 2>/dev/null | sort -h
Крупнейшие файлы на корневой файловой системе:
sudo find / -xdev -type f -size +1G \
-printf '%s %TY-%Tm-%Td %TH:%TM %p\n' 2>/dev/null | \
sort -nr | head -100 | numfmt --field=1 --to=iec-i --suffix=B
Файлы, которые были удалены, но продолжают занимать место:
sudo lsof +L1
Если lsof показывает крупный удалённый файл, не перезагружайте весь сервер. Сохраните журналы процесса и штатно перезапустите только соответствующую службу; после закрытия файлового дескриптора место освободится.
Дампы трафика на контроллере
При включённом захвате каждый агент формирует PCAP и передаёт его контроллеру. Лимит дампа применяется к отдельному запуску и агенту, но на контроллере складываются файлы всех предыдущих запусков. Поэтому несколько задач с большими лимитами могут заполнить диск даже при штатном завершении.
Проверка общего объёма и крупнейших файлов:
sudo du -xsh /opt/peresvet/controller/.uploads
sudo find /opt/peresvet/controller/.uploads -type f \
-printf '%s %TY-%Tm-%Td %TH:%TM %p\n' 2>/dev/null | \
sort -nr | head -100 | numfmt --field=1 --to=iec-i --suffix=B
Проверка кандидатов старше 30 суток без удаления:
sudo find /opt/peresvet/controller/.uploads -type f -name '*.pcap' -mtime +30 \
-printf '%s %TY-%Tm-%Td %TH:%TM %p\n' | \
sort -nr | numfmt --field=1 --to=iec-i --suffix=B
Безопасный порядок очистки:
- Остановите активный захват и дождитесь завершения загрузки дампа с агентов.
- Сопоставьте имя файла с агентом и идентификатором задачи.
- Скачайте или перенесите нужные PCAP на отдельное хранилище.
- Повторно выведите точный список кандидатов.
- Удаляйте только подтверждённые файлы по полному пути.
Пример удаления одного подтверждённого дампа:
sudo rm -- '/opt/peresvet/controller/.uploads/agent_HOST_task_ID.pcap'
df -hT /
Для последовательного подтверждения каждого старого файла:
sudo find /opt/peresvet/controller/.uploads -type f -name '*.pcap' -mtime +30 \
-exec rm -i -- {} \;
Не выполняйте rm -rf /opt/peresvet/controller/.uploads и не удаляйте все PCAP по маске без просмотра. В каталоге могут находиться единственные экземпляры дампов, необходимых для отчёта или расследования.
Локальные дампы агента и временные PCAP
Перед очисткой убедитесь, что генератор не работает:
pgrep -a system-trace
systemctl status peresvet-agent --no-pager -l
sudo find /opt/peresvet/agent/.dumps -maxdepth 1 -type f \
-printf '%s %TY-%Tm-%Td %TH:%TM %p\n' | \
sort -nr | numfmt --field=1 --to=iec-i --suffix=B
Если активная задача отсутствует, нужные файлы сохранены, а дампы относятся к завершённому или аварийному запуску, удаляйте их с интерактивным подтверждением:
sudo find /opt/peresvet/agent/.dumps -maxdepth 1 -type f -exec rm -i -- {} \;
sudo find /opt/peresvet/agent/.configs/runtime_pcaps -type f -exec rm -i -- {} \;
Не очищайте .dumps или runtime_pcaps во время задачи: это может повредить текущий захват или подготовленный сценарий.
Библиотека PCAP, приложений, CVE и malware
Каталоги .files, .pcaps, .dynamic_applications, .malware, .cves, .hars и .compromised_host_campaigns связаны с записями контроллера, контрольными суммами и состоянием синхронизации агентов. Ручное удаление файла оставляет метаданные, после чего агенты получают повторяющиеся 404, а синхронизация остаётся на 0%.
Для оценки объёма:
sudo find /opt/peresvet/controller -mindepth 1 -maxdepth 1 -type d -name '.*' \
-exec du -xsh -- {} + 2>/dev/null | sort -h
sudo find /opt/peresvet/agent -mindepth 1 -maxdepth 1 -type d -name '.*' \
-exec du -xsh -- {} + 2>/dev/null | sort -h
Удаляйте объекты штатно через Библиотека. Если файл уже отсутствует, а запись осталась, не редактируйте кеш агента: зафиксируйте идентификатор и обратитесь в поддержку для согласованной очистки метаданных и хранилища.
ClickHouse занимает большую часть диска
Основная таблица метрик получает посекундные строки от каждого активного ядра и плагина. Высокая скорость заполнения определяется не только скоростью трафика, но и количеством CPU, конфигураций, плагинов, активных ключей метрик и длительностью задач.
Удаление задачи из интерфейса не удаляет связанные строки ClickHouse немедленно. В типовой схеме применяются разные сроки хранения:
metricsиresponder_metrics— один год;- lifecycle- и control-plane-метрики — шесть месяцев;
- события CVE и Compromised Host — 90 суток;
- события ошибок Dynamic Applications — семь суток;
- некоторые таблицы файловых передач и обычной сходимости могут не иметь TTL.
Размер таблиц:
sudo clickhouse-client --query "
SELECT
database,
table,
formatReadableSize(sum(bytes_on_disk)) AS disk,
sum(rows) AS rows,
count() AS parts
FROM system.parts
WHERE active
GROUP BY database, table
ORDER BY sum(bytes_on_disk) DESC
LIMIT 30
FORMAT PrettyCompact"
Разделы крупнейшей таблицы:
sudo clickhouse-client --query "
SELECT
database,
table,
partition,
partition_id,
min(min_time) AS first_time,
max(max_time) AS last_time,
formatReadableSize(sum(bytes_on_disk)) AS disk,
sum(rows) AS rows
FROM system.parts
WHERE active
GROUP BY database, table, partition, partition_id
ORDER BY sum(bytes_on_disk) DESC
LIMIT 50
FORMAT PrettyCompact"
ClickHouse нельзя очищать удалением файлов из /var/lib/clickhouse. Для быстрого освобождения места обычно удаляют только целый подтверждённый старый раздел. Перед этим сохраните нужные данные и проверьте, что раздел не относится к действующим отчётам.
Шаблон команды, где <TABLE> и <PARTITION_ID> необходимо заменить значениями из предыдущего запроса:
sudo clickhouse-client --query "ALTER TABLE default.<TABLE> DROP PARTITION ID '<PARTITION_ID>'"
DROP PARTITION необратимо удаляет данные целого раздела. Не копируйте шаблон без подстановки и проверки. При заполненном на 100% диске сначала освободите место за счёт подтверждённых дампов, журналов или внешнего расширения: мутации, OPTIMIZE FINAL и массовый DELETE могут потребовать дополнительное место и усугубить отказ.
Изменение TTL для будущих данных должно выполняться согласованной миграцией из поставки. Ручное изменение одной таблицы без учёта дашбордов, отчётов и требований хранения может удалить нужную историю.
ClickHouse создаёт бесконечный поток сообщений в syslog
После заполнения диска ClickHouse может потерять доступ к собственным файлам clickhouse-server.log и clickhouse-server.err.log. В отдельных версиях это запускает быстрый повтор одной и той же ошибки: ClickHouse выводит stack trace в systemd journal, а rsyslog записывает его в /var/log/syslog. В результате syslog или ротированный syslog.1 может вырасти на сотни гигабайт за несколько часов.
Характерные сообщения:
Cannot log message in OwnAsyncSplitChannel;Poco::RotateBySizeStrategy::mustRotate;File access error: /var/log/clickhouse-server/clickhouse-server.log;File access error: /var/log/clickhouse-server/clickhouse-server.err.log;- повторяющиеся ошибки rsyslog
No space left on device.
Ошибки rsyslog в конце журнала являются следствием заполненного диска. Источник потока — ClickHouse.
Сначала сохраните несколько последних строк для диагностики:
sudo tail -n 300 /var/log/syslog.1
Затем остановите источник, очистите только подтверждённый ротированный журнал и запустите службы снова:
sudo systemctl stop clickhouse-server
sudo truncate -s 0 /var/log/syslog.1
sudo systemctl restart rsyslog
sudo systemctl start clickhouse-server
sudo systemctl restart postgresql@16-main peresvet-controller
df -hT /
pg_isready -h 127.0.0.1 -p 5432
truncate безвозвратно удаляет содержимое файла. Применяйте команду только к проверенному ротированному syslog.1 после сохранения нужного фрагмента. Не очищайте активный /var/log/syslog по этому примеру.
Через несколько секунд проверьте размер журналов:
ls -lh /var/log/syslog*
Если активный syslog снова быстро растёт, немедленно остановите ClickHouse:
sudo systemctl stop clickhouse-server
До следующего запуска проверьте свободное место, доступность и владельца /var/log/clickhouse-server, а также сообщения файловой системы. Простое расширение диска без остановки log storm не устраняет причину: ClickHouse продолжит заполнять добавленное пространство.
Системные журналы, core dumps и временные файлы
Проверка:
sudo journalctl --disk-usage
sudo du -xsh /var/log /var/log/journal /var/lib/systemd/coredump /var/crash
sudo coredumpctl list --no-pager
sudo find /var/lib/systemd/coredump /var/crash -type f \
-printf '%s %TY-%Tm-%Td %TH:%TM %p\n' 2>/dev/null | \
sort -nr | numfmt --field=1 --to=iec-i --suffix=B
После сохранения журналов инцидента архивные записи journald можно ограничить по времени или объёму:
sudo journalctl --vacuum-time=14d
sudo journalctl --vacuum-size=2G
Старые core dumps удаляйте только после сохранения экземпляров, соответствующих исследуемому падению:
sudo find /var/lib/systemd/coredump -type f -mtime +14 -exec rm -i -- {} \;
sudo find /var/crash -type f -mtime +14 -exec rm -i -- {} \;
Штатная очистка временных файлов и кеша загруженных пакетов:
sudo systemd-tmpfiles --clean
sudo apt-get clean
Перед очисткой журналов убедитесь, что первопричина уже зафиксирована. Если журнал быстро растёт снова, устраните повторяющуюся ошибку вместо регулярного удаления файла.
Docker занимает место
Этот случай относится только к контейнерной установке:
sudo docker system df -v
sudo du -xhd2 /var/lib/docker 2>/dev/null | sort -h | tail -50
Не используйте docker system prune -a вслепую: команда может удалить образы, тома или остановленные контейнеры, необходимые для восстановления. Сначала определите конкретный неиспользуемый объект и удалите его штатной командой Docker.
Не хватает оперативной памяти или процесс завершён OOM killer
Начальная диагностика:
free -h
swapon --show
vmstat 1 10
ps -eo pid,user,comm,rss,vsz,%mem --sort=-rss | head -30
systemd-cgtop -n 1
grep -i Huge /proc/meminfo
journalctl -k -b | grep -Ei 'oom|out of memory|killed process'
В free -h ориентируйтесь прежде всего на available, а не на used: Linux использует свободную RAM как файловый кеш и освобождает его при необходимости.
| Потребитель RAM | Почему растёт | Что делать |
|---|---|---|
system-trace | Большие CC/CPS, широкие CIDR, много комбинаций, сокетных таблиц и одновременно активных плагинов | Остановить задачу, уменьшить нагрузку или количество dataplane CPU, проверить расчёт hugepages |
| Hugepages | Память заранее зарезервирована для DPDK, часто при загрузке ОС | Менять размер через мастер и перезагрузку в окно обслуживания; не считать резерв утечкой процесса |
clickhouse-server | Тяжёлый запрос, merge, вставка больших батчей или множество одновременных панелей | Найти активные запросы и фоновые операции; после их завершения оценить память повторно |
postgres | Сложный запрос, обслуживание или большое число соединений | Проверить активные запросы и соединения; не перезапускать СУБД без сбора журналов |
| Grafana и рендерер отчётов | Одновременный рендер большого числа панелей или PDF | Дождаться рендеринга, сократить параллельность и проверить зависший процесс |
| Page cache | ОС кеширует недавно прочитанные PCAP и части ClickHouse | Нормально, если available остаётся достаточным; кеш освобождается автоматически |
Активные запросы ClickHouse:
sudo clickhouse-client --query "
SELECT
query_id,
user,
elapsed,
formatReadableSize(memory_usage) AS memory,
read_rows
FROM system.processes
ORDER BY memory_usage DESC
FORMAT PrettyCompact"
Активные запросы PostgreSQL без вывода текста запросов:
sudo -u postgres psql -c "
SELECT
pid,
usename,
application_name,
client_addr,
state,
wait_event_type,
wait_event,
now() - query_start AS duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
ORDER BY query_start"
При OOM найдите первое сообщение Killed process и сопоставьте PID с журналом службы. EOF или IPC socket closed в контроллере часто является вторичным сообщением после завершения агента или ядра.
Не используйте echo 3 > /proc/sys/vm/drop_caches как лечение нехватки RAM: это уничтожает полезный кеш, создаёт дополнительный I/O и не исправляет процесс, который продолжает расти. Не очищайте swap принудительно на нагруженном стенде. Для DPDK swap не заменяет корректно рассчитанные hugepages.
Контроль заполнения после очистки
После любого действия проверьте, что место действительно освободилось и источник перестал расти:
df -hT /
df -ih /
sudo du -xsh /opt/peresvet/controller/.uploads /var/lib/clickhouse /var/log 2>/dev/null
free -h
Повторите проверку через 10–15 минут. Если каталог снова быстро увеличивается, остановите создающую данные задачу или службу и исследуйте источник до следующего расширения диска. Рекомендуется настроить мониторинг с предупреждениями на 70%, 80% и 90%, а для дампов — отдельную политику архивации и срок хранения.
Ошибки контроллера и веб-интерфейса
Веб-интерфейс не открывается, порт 8080 не отвечает
systemctl status peresvet-controller --no-pager -l
systemctl show peresvet-controller -p ActiveState -p SubState -p Result
journalctl -u peresvet-controller -b -n 200 --no-pager
ss -ltnp | grep ':8080'
curl -I http://127.0.0.1:8080/
Если контроллер остановлен из-за PostgreSQL или ClickHouse, сначала восстановите зависимый сервис. Затем:
sudo systemctl restart peresvet-controller
Сразу после перезапуска соединение может кратковременно отклоняться. Дождитесь active, появления слушающего порта и успешного HTTP-ответа.
peresvet-controller долго находится в состоянии activating
Частые причины — отсутствующий /opt/peresvet/controller/.env, неполный набор параметров или некорректные публичные URL.
systemctl status peresvet-controller --no-pager -l
journalctl -u peresvet-controller -b -n 200 --no-pager
sudo test -s /opt/peresvet/controller/.env && echo 'Файл конфигурации существует'
sudo grep -E '^(APP_PORT|DB_HOST|DB_PORT|DB_USER|DB_NAME|CH_HOST|CH_PORT|CH_USER|CH_NAME|GRAFANA_URL|VITE_API_URL)=' /opt/peresvet/controller/.env
Не публикуйте полное содержимое .env. В GRAFANA_URL и VITE_API_URL должен использоваться доступный пользователям адрес контроллера, а не localhost или 127.0.0.1. Исправляйте конфигурацию через мастер, чтобы согласованно обновить контроллер, интерфейс и Grafana.
address already in use
sudo ss -ltnp | grep ':8080'
systemctl status peresvet-controller --no-pager -l
pgrep -a -f 'peresvet|controller'
Не завершайте неизвестный процесс командой kill -9. Определите, почему запущены два экземпляра: второй systemd-unit, ручной запуск из терминала или неверно выбранный порт. Оставьте один штатный экземпляр под управлением systemd либо измените порт через мастер.
Ошибки ClickHouse и метрик
ClickHouse недоступен или агент пишет push_metrics failed
systemctl status clickhouse-server --no-pager -l
journalctl -u clickhouse-server -b -n 200 --no-pager
ss -ltnp | grep ':8123'
curl -fsS http://127.0.0.1:8123/ping
df -hT /var/lib/clickhouse
df -ih /var/lib/clickhouse
Для удалённого агента повторите curl http://<адрес-clickhouse>:8123/ping с машины агента. Локальный успешный ответ не доказывает сетевую доступность ClickHouse для других машин.
Что делать:
- Устраните ошибки диска, конфигурации или пакетов из журнала.
- Проверьте, что
CH_HOSTу агентов указывает на адрес интерфейса контроллера, доступный из сети управления. - После исправления перезапустите ClickHouse и убедитесь, что
/pingвозвращаетOk.. - Перезапускайте агент только после остановки активной задачи.
Задача выполняется, но в Grafana нет метрик
Отсутствие графика не всегда означает отсутствие трафика. Метрики проходят путь: ядро агента → агент → ClickHouse → Grafana → встроенная страница контроллера.
Проверяйте путь последовательно:
-
В интерфейсе убедитесь, что задача действительно перешла в Выполняется, а не осталась в Подготовке.
-
Откройте Логи задачи и подтвердите запуск трафика на всех участвующих агентах.
-
Проверьте ошибки отправки метрик в журнале агента:
journalctl -u peresvet-agent -b -n 300 --no-pager -
Проверьте доступность ClickHouse с каждого агента.
-
Если ClickHouse получает данные, но панели пусты, проверьте Grafana и выбранный интервал времени.
Первые ненулевые строки могут появиться не мгновенно. Кратковременный No data в момент запуска не является доказательством отказа. Если задача уже завершена, выберите временной диапазон, включающий её фактическое время выполнения.
Есть общие метрики, но отсутствует специализированная таблица или панель
Такое поведение возможно при рассинхронизации версии агента и схемы ClickHouse: агент отправляет новое поле, которого ещё нет в таблице.
Признаки:
- общие счётчики пакетов и байтов есть;
- трафик подтверждается логами;
- отдельные записи файлов, потоков или событий отсутствуют;
- в журнале есть ошибки вставки или неизвестного столбца.
Что делать. Запустите мастер из актуальной поставки и выполните штатное обновление компонентов: мастер применяет миграции ClickHouse в правильном порядке. Не добавляйте столбцы вручную по памяти. После миграции проверьте новую задачу — пропущенные специализированные записи старого запуска обычно не восстанавливаются задним числом.
Ошибки Grafana
Grafana не открывается или контроллер показывает пустой фрейм
systemctl status grafana-server --no-pager -l
journalctl -u grafana-server -b -n 200 --no-pager
ss -ltnp | grep ':3000'
curl -fsS http://127.0.0.1:3000/api/health
Если локальный /api/health успешен, а встроенная страница не открывается, проверяйте путь через контроллер: GRAFANA_URL, обратный прокси, авторизацию и URL /grafana/. Ошибка 401 или 403 означает, что Grafana доступна, но запрос не прошёл авторизацию; 502 или connection refused указывает на недоступный upstream.
После устранения причины:
sudo systemctl restart grafana-server
sudo systemctl restart peresvet-controller
В Grafana нет дашбордов или источника ClickHouse
sudo find /var/lib/grafana/dashboards -maxdepth 1 -type f -name '*.json' | head
sudo ls -l /etc/grafana/provisioning/dashboards/
sudo ls -l /etc/grafana/provisioning/datasources/
sudo test -d /var/lib/grafana/plugins/grafana-clickhouse-datasource
journalctl -u grafana-server -b -n 200 --no-pager
Используйте мастер из той же или более новой поставки:
sudo ./install --update-dashboards
Команда должна запускаться из распакованного актуального архива поставки. Она обновляет подготовленные дашборды и provisioning без переустановки базы данных.
График показывает потери только во время запуска
Агенты передают метрики независимо. Первые выборки TX и RX могут попасть в разные моменты времени, а служебный ARP-трафик — только в одну из начальных выборок. Поэтому во время активной задачи возможен кратковременный ненулевой показатель потерь.
Оценивайте итог после завершения задачи и сравнивайте:
- аппаратные счётчики TX/RX на обоих агентах;
- программные счётчики клиента и сервера;
- интервал времени панели;
- ошибки NIC и программные drop-счётчики.
Если расхождение сохраняется после завершения, это уже требует анализа логов, метрик и при необходимости парных PCAP с обеих сторон.
Ошибки агентов, задач и синхронизации
Агент отображается как недоступный
На машине агента:
systemctl status peresvet-agent --no-pager -l
journalctl -u peresvet-agent -b -n 200 --no-pager
sudo grep -E '^(APP_PORT|CONTROLLER_URL|AGENT_HOSTNAME|CH_HOST|CH_PORT)=' /opt/peresvet/agent/.env
ss -ltnp
С машины контроллера проверьте адрес и порт агента. HTTP-ответ 401 Unauthorized подтверждает, что сеть и порт работают; таймаут указывает на маршрут или межсетевой экран, а connection refused — на остановленную службу или неверный порт.
После исправления конфигурации или сети:
sudo systemctl restart peresvet-agent
Перед перезапуском убедитесь, что на агенте не выполняется задача.
После перезапуска контроллера агент считает старую задачу активной
Контроллер и агент могут восстановить состояние не одновременно. Не запускайте новую задачу, пока не выяснено, остался ли реальный процесс генератора.
pgrep -a system-trace
systemctl status peresvet-agent --no-pager -l
journalctl -u peresvet-agent -b -n 300 --no-pager
Если процесс существует, остановите точную задачу штатной кнопкой Остановить, а затем при необходимости Принудительно остановить. Если процесса нет, но агент сохраняет занятое состояние, перезапустите только peresvet-agent и проверьте состояние снова. Не завершайте все процессы генератора без сопоставления с идентификатором задачи.
Синхронизация файлов остаётся на 0% или задача сообщает files not synced with agents
systemctl status peresvet-agent --no-pager -l
journalctl -u peresvet-agent -b -n 300 --no-pager
df -hT /opt
df -ih /opt
Проверьте:
- Все участвующие агенты онлайн.
- На контроллере и агентах достаточно места.
- Для задачи выбраны существующие файлы библиотеки.
- В журналах нет повторяющихся
404, ошибок контрольной суммы или записи на диск.
Повторите штатную синхронизацию из интерфейса. Постоянный индикатор 0% сам по себе не доказывает, что передача идёт. Если агент получает 404, не редактируйте его кеш вручную: причина может быть в ссылке контроллера на отсутствующий файл. Сохраните идентификаторы и журналы, затем обратитесь в поддержку для проверки согласованности метаданных и файлового хранилища.
Агент доступен, но нужный плагин недоступен или лицензия отклонена
Лицензия привязана к HWID конкретного агента. Наличие агента в интерфейсе не доказывает, что на нём установлена подходящая лицензия.
- Откройте Библиотека → Агенты → Сведения.
- Сравните HWID с HWID, к которому привязана лицензия на портале.
- Проверьте даты действия, лимит пропускной способности и наличие требуемой функции.
- Загрузите
license.binименно на каждый агент, участвующий в задаче.
Перестановка клиентской и серверной ролей не добавляет отсутствующую функцию. Подробный порядок приведён в разделе «Библиотека».
После обновления сетевые интерфейсы перестали быть доступны DPDK
Проверьте драйвер каждого PCI-устройства и службу постоянной привязки:
lspci -nnk | grep -A3 -i 'Ethernet controller'
systemctl status peresvet-dpdk-bind.service peresvet-vfio-bind.service --no-pager -l
journalctl -u peresvet-dpdk-bind.service -b -n 200 --no-pager
find /opt/dpdk -name dpdk-devbind.py -type f 2>/dev/null
Затем запустите найденный dpdk-devbind.py только с параметром просмотра:
sudo /opt/dpdk/usertools/dpdk-devbind.py --status-dev=net
Путь может отличаться. Не привязывайте к vfio-pci интерфейс управления, через который подключены к серверу.
Если привязка отсутствует, откройте мастер → Инструменты и повторите настройку vfio-pci/DPDK для выбранных тестовых NIC. Изменение IOMMU или загрузочного драйвера может потребовать согласованной перезагрузки. После неё снова проверьте драйверы до запуска агента.
Задача не запускается из-за нехватки hugepages
grep -i Huge /proc/meminfo
mount | grep hugetlbfs
journalctl -u peresvet-agent -b -n 300 --no-pager
free -h
Не увеличивайте hugepages наугад во время нагрузки. Возможные действия:
- уменьшить количество dataplane CPU, CC, число одновременных соединений или размер пулов задачи;
- зарезервировать hugepages через мастер и перезагрузить сервер в окно обслуживания;
- убедиться, что после перезагрузки размер и количество страниц соответствуют настройке.
Физическое наличие hugepages не означает, что их достаточно: агент сохраняет резерв для ОС и других компонентов.
client port range overflow или исчерпан диапазон сокетов
Ошибка означает, что заданной комбинации клиентских IP, портов, серверных адресов и одновременных соединений недостаточно.
Проверьте в задаче:
- диапазон клиентских портов;
- количество клиентских IP;
- CC и CPS;
- число серверных адресов и портов;
- повторное использование одинаковых 4-tuple несколькими конфигурациями.
Уменьшите CC/CPS либо расширьте клиентский адресно-портовый пул. Не задавайте порт вне диапазона 1–65535. После изменения создайте новый запуск и убедитесь, что задача проходит этап Подготовка.
socket_table_init: no client IPs
Обычно это downstream-ошибка конфигурации с нулевой эффективной нагрузкой или пустой клиентской сетью.
Проверьте, что:
- клиентская сеть содержит адреса;
- выбран правильный клиентский агент и интерфейс;
- CC, CPS, число пользователей или другой параметр нагрузки больше нуля;
- приложение и его сессии сохранены без ошибок;
- серверная сторона покрывает сети назначения.
Исправляйте конфигурацию задачи, а не перезапускайте ядро многократно с теми же параметрами.
При запуске показано EOF, IPC socket closed или агент внезапно исчез
Это часто вторичное сообщение: процесс агента или ядра завершился раньше, а контроллер увидел только закрытое соединение.
journalctl -u peresvet-agent -b -n 500 --no-pager
journalctl -k -b | grep -Ei 'oom|out of memory|killed process'
free -h
df -hT
pgrep -a system-trace
Если ядро было уничтожено OOM killer, уменьшите размер задачи: слишком широкие CIDR, большое декартово произведение адресов, чрезмерные CC/CPS и число конфигураций могут потребовать десятки гигабайт памяти. Если OOM отсутствует, ищите первое содержательное сообщение до EOF или IPC socket closed — ошибку DPDK, конфигурации, лицензии, ARP либо несовместимости версий.
gateway MAC unresolved, не разрешается ARP или задача остаётся в подготовке
Проверьте физический link, VLAN и соседство до изменения задачи:
ip -br link
ip -br addr
ip route
ip neigh show
sudo ethtool <интерфейс>
Для DPDK-интерфейса обычный Linux ip link может не показывать рабочее состояние, поэтому дополнительно используйте сведения агента, dpdk-devbind.py --status-dev=net, счётчики NIC и захват на соседнем устройстве.
Убедитесь, что IP шлюза находится в нужной сети, VLAN совпадает на обеих сторонах, а MAC не подменён MAC самого локального порта. Не устанавливайте произвольный MAC шлюза, если он не подтверждён таблицей соседей или сетевой схемой.
Ошибки после обновления
После обновления проверьте не только версии файлов, но и фактически запущенные службы:
sudo dpkg -C
systemctl --failed
systemctl is-active postgresql clickhouse-server grafana-server peresvet-controller peresvet-agent
journalctl -u peresvet-controller -b -n 100 --no-pager
journalctl -u peresvet-agent -b -n 100 --no-pager
Затем запустите мастер и выберите Проверить состояние. Если обновлялись контроллер и агенты, убедитесь, что версии совместимы, конфигурационные файлы содержат все обязательные поля, миграции ClickHouse применены, дашборды присутствуют, лицензии читаются, а DPDK-интерфейсы сохранили привязку.
Не считайте кратковременный connection refused сразу после рестарта новой неисправностью. Сначала дождитесь active, проверьте порт и выполните повторный запрос. Если ошибка сохраняется, используйте журнал конкретной службы.
Что приложить к обращению в поддержку
Минимальный набор:
- версия поставки и роль машины: контроллер, агент или совмещённая установка;
- дата и время ошибки с часовым поясом;
- полный текст первого содержательного сообщения;
- идентификатор задачи и имена участвующих агентов;
- результат Проверить состояние в мастере;
- вывод
systemctl --failed,df -hT,df -ih,free -h; systemctl statusи последние 200–500 строкjournalctlпроблемной службы;- при проблемах запуска задачи — журнал задачи из интерфейса;
- при сетевой проблеме — адреса, порты, направление соединения и различие между
timeout,connection refused,401,404илиEOF.
Перед отправкой удалите пароли, токены, секреты, закрытые ключи и содержимое лицензии. Не обрезайте журнал только до последней строки: первичная причина часто находится выше вторичных EOF, IPC socket closed или connection refused.