Files
han-app/VM3_signoz/Signoz/docs/kesl/RUNBOOK.KESL.ru.md
T
2026-09-09 10:57:11 +03:00

25 KiB
Raw Blame History

KESL 12.4 standalone на ВМ3 SigNoz

Операторский runbook для Ubuntu 24.04 ВМ3. Команды выполняет root или персональная роль admin через sudo в отдельное maintenance window. Репозиторий и скрипты Foundry KESL не устанавливают и не запускают.

Цели:

  1. АВЗ.1: обнаружение и реагирование через host File Threat Protection.
  2. АВЗ.2: автоматическое обновление баз с серверов Kaspersky.

На ВМ3 нет Message Safety и нет scan-broker. Container Monitoring этой лицензией не покрыт — контейнерный мониторинг пропускаем, компенсируем host File Threat Protection и точечным scan-file. Сеть, firewall management, Web Threat Protection и Behavior Detection KESL не включаем.

KESL 12.4 commercial не заявляется как сертифицированная ФСТЭК сборка.

Раскатка SigNoz, lockdown и обновление стека — только в ../RUNBOOK.ru.md. Это окно с ними не совмещать.

0. Approvals, egress и stop conditions

До окна зафиксировать change ID, оператора, Security/Service/Operations approvers, hostname, ОС/ядро, RAM/swap/диск, package version/hash/source, лицензию и rollback. EULA, Privacy Policy и KSN согласовать отдельно. Activation code, ключи и secrets не помещать в репозиторий, историю shell, chat или evidence.

Текущий инвентарь (подставьте актуальные значения):

Узел SSH Приватный IP
ВМ3 SigNoz signoz-private через jump 192.168.0.5

Рабочий каталог SigNoz на ВМ: /opt/signoz. Compose:

COMPOSE=/opt/signoz/pours/deployment/compose.yaml

0.1. Egress на время окна

Исходящий доступ ВМ3 управляется файрволом (cloud SG / NAT policy), не постоянным unrestricted internet. На это окно оператор открывает исходящий HTTPS/DNS, достаточный для:

  • активации лицензии Kaspersky;
  • первого Update с UPDATER_SOURCE=KLServers;
  • опционально apt (rhash) и загрузки EICAR с secure.eicar.org.

После приёмки общий интернет не оставлять. Для АВЗ.2 в steady state оставить узкий allow-list к серверам обновления/активации Kaspersky (имена, не застывшие IP) по приложению вендора. Минимум для Update при USE_KSN=No:

  • s00.upd.kaspersky.coms19.upd.kaspersky.com, TCP 443;
  • downloads.upd.kaspersky.com, TCP 443;
  • серверы активации из того же приложения, TCP 443;
  • рабочий системный DNS/NTP. Если системный DNS недоступен, KESL может сам обратиться к публичным DNS (8.8.8.8, 1.1.1.1 и др.) — это запрещено политикой ВМ3, поэтому resolver должен работать.

Проверка до активации и Update:

getent hosts s00.upd.kaspersky.com downloads.upd.kaspersky.com
curl -4sS -o /dev/null -w '%{http_code}\n' --connect-timeout 8 --max-time 15 \
  https://downloads.upd.kaspersky.com

Ожидается разрешение имён и HTTP 200/301/302/403/404, не таймаут. Если файрвол ещё закрыт — stop: не запускать kesl-setup активацию и task 6.

0.2. Stop conditions

Остановиться, если:

  • ОС/архитектура/ядро отсутствуют в матрице KESL 12.4;
  • установлен другой AV или неизвестный KESL;
  • свободно менее 10 ГБ или нет рабочего swap;
  • до установки есть unhealthy/restarting контейнеры SigNoz, OTLP 4317 недоступен с ВМ1/ВМ2, UI /api/v1/health не отвечает;
  • package hash/source не подтверждены, лицензия недействительна или базы не загружены;
  • после этапа: ClickHouse/PostgreSQL/SigNoz/ingester unhealthy или restart;
  • available memory менее 512 МБ на 4 ГиБ RAM либо менее 1 ГиБ на ≥8 ГиБ;
  • устойчивый swap IO, OOM, IO wait >10% за 5 минут;
  • File Threat Protection изменил UFW/слушатели 8080/4317/4318.

Не совмещать с 20-deploy-signoz.sh, правкой casting.yaml, snapshot, lockdown, TLS, Docker restart или host reboot.

1. Read-only baseline

Сохранить вывод каждого блока в change record без секретов, полного docker inspect и Compose environment.

1.1. Host

date -Is
hostnamectl
uname -a
dpkg --print-architecture
findmnt -no TARGET,SOURCE,FSTYPE,OPTIONS / /var/lib/docker /opt /tmp
free -h
swapon --show
df -hT / /var/lib/docker /opt /tmp
df -ih / /var/lib/docker /opt /tmp
systemctl is-active docker ufw
dpkg-query -W -f='${Package}\t${Version}\t${Status}\n' \
  kesl kesl-gui kav4fs 2>/dev/null || true

Проверка только для amd64, Ubuntu 24.04 LTS и поддерживаемого ядра. SigNoz на 4 ГиБ — constrained; для KESL лучше ≥8 ГиБ. Defaults ScanMemoryLimit=8192 и MaxMemory=auto на этой ВМ не принимать.

1.2. SigNoz и volumes

cd /opt/signoz
docker info --format \
  'driver={{.Driver}} root={{.DockerRootDir}} containers={{.Containers}} running={{.ContainersRunning}}'
docker compose -f pours/deployment/compose.yaml ps -a
docker stats --no-stream --format \
  'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.BlockIO}}\t{{.PIDs}}'
curl -fsS --max-time 5 http://127.0.0.1:8080/api/v1/health
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'

Снять фактические host-пути hot-data (поле Source). Prefix Compose и путь внутри контейнера (Destination) в --add-exclusion не подставлять. Как читать вывод и какие строки брать — раздел 6.

for c in \
  signoz-telemetrystore-clickhouse-0-0 \
  signoz-telemetrykeeper-clickhousekeeper-0 \
  signoz-metastore-postgres-0 \
  signoz-signoz-0
do
  echo "=== $c ==="
  docker inspect --format \
    '{{range .Mounts}}{{.Type}} {{.Name}} {{.Source}} -> {{.Destination}}{{println}}{{end}}' \
    "$c"
done

В change record — только host-пути данных ClickHouse, ClickHouse Keeper, PostgreSQL metastore. Overlay2, /opt/signoz и /tmp не исключать.

1.3. Firewall и OTLP

ufw status verbose
iptables-save | head
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'

С ВМ1 (не ICMP):

timeout 3 bash -c 'exec 3<>/dev/tcp/192.168.0.5/4317' \
  && echo 'OTLP gRPC reachable'

Без живого OTLP и healthy стека к установке не переходить.

2. Дистрибутив и установка

GUI, i386, RPM, KSC agent на сервер не ставятся. ISO не распаковывать в /opt/signoz и не оставлять смонтированным.

Ожидаемый ISO пилота ВМ1/ВМ2: 049-16-d-01.iso, volume id KESL12SP4, DEB kesl_12.4.0-1225_amd64.deb. Хеши пилота не считать универсальными, если пришёл другой носитель: записать фактические SHA-256 и ГОСТ.

Вендор публикует ФИКС 2.0.2 / ГОСТ Р 34.11-94, не SHA-256. Для ISO 049-16-d-01.iso сумма вендора совпала с rhash --gost:

6a94b16afad211e8b9be5ec86f5379184f2b3a9e5869843fe763e2796e5ac1d3

SHA-256 того же ISO (локальный учёт, не сверка с сайтом ФИКС):

8599a7ed8d7d661a70811d668e5f98e372b674c87ef4cd24abbd917625a2d5e5

2.1. Копирование на ВМ3

На ВМ заранее:

install -d -m 0700 -o root -g root /var/lib/han-deploy/incoming

С рабочей станции через jump (signoz-private из ../RUNBOOK.ru.md):

scp `
  "C:\Users\MI\Documents\job\HAN_new_life\HANapp\docs\kes 12.4\049-16-d-01.iso" `
  "C:\Users\MI\Documents\job\HAN_new_life\HANapp\docs\kes 12.4\049-16-d-01.sig" `
  signoz-private:/var/lib/han-deploy/incoming/

2.2. Проверка ГОСТ и извлечение DEB

apt-get update
apt-get install -y rhash

ISO='/var/lib/han-deploy/incoming/049-16-d-01.iso'
SIG='/var/lib/han-deploy/incoming/049-16-d-01.sig'

ls -l "$ISO" "$SIG"
file "$ISO" "$SIG"
sha256sum "$ISO"
rhash --gost "$ISO"

Если ГОСТ совпал — извлеките только amd64 DEB:

install -d -m 0700 -o root -g root \
  /root/kesl-install /mnt/kesl-iso

mount -o ro,loop "$ISO" /mnt/kesl-iso

find /mnt/kesl-iso -type f \
  \( -iname 'kesl_*_amd64.deb' -o -iname '*.deb' \) |
  sort
DEB='/mnt/kesl-iso/kesl/kesl_12.4.0-1225_amd64.deb'

dpkg-deb -f "$DEB" Package Version Architecture
sha256sum "$DEB"

install -m 0600 -o root -g root \
  "$DEB" /root/kesl-install/kesl.deb

umount /mnt/kesl-iso
rmdir /mnt/kesl-iso

Ожидается: Package kesl, Version 12.4.x, Architecture amd64. kesl-gui, i386 и RPM не копировать.

apt-get remove -y rhash
apt-get purge -y rhash
apt-get autoremove -y

Снимки до установки:

test -f /etc/docker/daemon.json && \
  cp -a /etc/docker/daemon.json /root/kesl-install/docker-daemon.before.json
iptables-save > /root/kesl-install/iptables.before
ufw status verbose > /root/kesl-install/ufw.before
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )' \
  > /root/kesl-install/listeners.before
ls -l /root/kesl-install
apt-get install /root/kesl-install/kesl.deb

2.3. Первоначальная настройка без защиты

Значения EULA, Privacy Policy и KSN — после согласования, не механически. Для этого окна, как на ВМ1/ВМ2: USE_KSN=No.

install -m 0600 -o root -g root /dev/null /root/kesl-install/autoinstall.ini
cat > /root/kesl-install/autoinstall.ini <<'EOF'
KSVLA_MODE=No
ENDPOINT_AGENT_MODE=No
EULA_AGREED=Yes
PRIVACY_POLICY_AGREED=Yes
USE_KSN=No
GROUP_CLEAN=Yes
LOCALE=ru_RU.UTF-8
INSTALL_LICENSE=None
UPDATER_SOURCE=KLServers
UPDATE_EXECUTE=No
KERNEL_SRCS_INSTALL=No
USE_GUI=No
CONFIGURE_SELINUX=No
DISABLE_PROTECTION=Yes
INTERCEPTOR_MODE=UseFanotify
ENABLE_TRACES_ON_FIRST_STARTUP=No
EOF
chmod 0600 /root/kesl-install/autoinstall.ini
stat -c '%U:%G:%a %n' /root/kesl-install/autoinstall.ini
/opt/kaspersky/kesl/bin/kesl-setup.pl \
  --autoinstall=/root/kesl-install/autoinstall.ini
echo "kesl-setup exit=$?"

При INSTALL_LICENSE=None setup может вернуть 71. Не запускать повторно, если kesl.service active и File Threat Protection Stopped.

systemctl --no-pager --no-legend status kesl || true
kesl-control --app-info
kesl-control --get-task-list
free -h
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps
curl -fsS --max-time 5 http://127.0.0.1:8080/api/v1/health

Ожидается: kesl запущен, задача 1 не Started, контейнеры healthy.

3. Resource budget до Update и FTP

Не стартовать Update (task 6) и File Threat Protection (task 1), пока не срезаны дефолты памяти.

Стартовый кандидат:

  • ≥8 ГиБ RAM: ScanMemoryLimit=1024, MaxMemory=2048MB, OnDemandCPULimit=15;
  • 4 ГиБ RAM: только по письменному решению владельца — ScanMemoryLimit=512, MaxMemory=1024MB, OnDemandCPULimit=15; full filesystem scan и архивы запрещены.

3.1. Снимок

kesl-control --get-app-settings \
  --file /root/kesl-install/app-settings.before.ini
install -m 0600 -o root -g root \
  /var/opt/kaspersky/kesl/common/kesl.ini \
  /root/kesl-install/kesl.ini.before
awk '/^\[General\]/,/^\[/' /var/opt/kaspersky/kesl/common/kesl.ini | head -n 40

3.2. Лимит CPU (KESL ещё работает)

kesl-control --set-app-settings \
  UseOnDemandCPULimit=Yes OnDemandCPULimit=15

3.3. Память — только при остановленном KESL

Файл целиком не подменять. Сначала смотрите [General] из шага 3.1.

systemctl stop kesl
systemctl is-active kesl || true

grep -nE '^(ScanMemoryLimit|MaxMemory)=' \
  /var/opt/kaspersky/kesl/common/kesl.ini

sed -i \
  -e 's/^ScanMemoryLimit=8192$/ScanMemoryLimit=1024/' \
  -e 's/^MaxMemory=auto$/MaxMemory=2048MB/' \
  /var/opt/kaspersky/kesl/common/kesl.ini

grep -nE '^(ScanMemoryLimit|MaxMemory)=' \
  /var/opt/kaspersky/kesl/common/kesl.ini

systemctl start kesl
systemctl is-active kesl
kesl-control --get-app-settings | grep -iE \
  'UseOnDemandCPULimit|OnDemandCPULimit|ScanMemoryLimit|MaxMemory'
free -h
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps

На constrained 4 ГиБ замените значения в sed на 512 и 1024MB.

Ожидаемо: kesl.service active; task 1 и 6 Stopped; базы ещё не загружены; ClickHouse/SigNoz healthy.

4. Активация

Код не помещать в autoinstall.ini, репозиторий, evidence, чат и history. Нужен открытый egress из раздела 0.1.

set +o history
unset HISTFILE
read -rsp 'KESL activation code: ' KESL_CODE; echo
kesl-control --add-active-key "$KESL_CODE"
unset KESL_CODE
set -o history
kesl-control -L --query
kesl-control --app-info

В evidence — только статус вроде Active subscription и срок, не GUID ключа. Если лицензия Inconsistent update или недействительна — stop.

5. АВЗ.2 — базы

ID подтвердить через --get-task-list (Update = 6).

kesl-control --get-settings 6
kesl-control --start-task 6 -W
kesl-control --get-task-state 6
kesl-control --app-info --json
free -h
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps

Если available RAM падает ниже порога раздела 0.2 или контейнер unhealthy:

kesl-control --stop-task 6

Ожидается: Update завершилась, Application databases loaded: Yes.

Для 12.4 одного RuleType=Hourly недостаточно: нужен StartTime с интервалом ;1 и LC_ALL=C (иначе ru_RU подставит русское имя месяца).

START="$(LC_ALL=C date +'%Y/%b/%d %H:%M:%S;1')"
kesl-control --set-schedule 6 RuleType=Hourly \
  "StartTime=${START}" RunMissedStartRules=No RandomInterval=0
kesl-control --get-schedule 6

Если в --app-info есть Post-update actions: The application module has been updated. Restart the application — обязательный рестарт до запуска task 1:

systemctl restart kesl
systemctl is-active kesl
kesl-control --app-info --json
grep -nE '^(ScanMemoryLimit|MaxMemory)=' \
  /var/opt/kaspersky/kesl/common/kesl.ini
kesl-control --get-app-settings | grep -iE \
  'UseOnDemandCPULimit|OnDemandCPULimit'
kesl-control --get-schedule 6
kesl-control --get-task-state 1
kesl-control --get-task-state 6

До приёмки АВЗ.2 наблюдать хотя бы один автоматический hourly cycle при уже суженном (не широком) egress. Alert: ошибка Update, базы старше 240 часов, базы не загружены, лицензия недействительна.

6. Исключения hot-data

KESL смотрит host filesystem. В --add-exclusion идёт Source (путь на ВМ), обычно /var/lib/docker/volumes/<имя>/_data. Destination — путь внутри контейнера, его KESL не видит. Prefix тома не угадывать.

Снять mounts ещё раз, если baseline раздела 1.2 уже не под рукой:

cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps --format '{{.Name}}'

for c in \
  signoz-telemetrystore-clickhouse-0-0 \
  signoz-telemetrykeeper-clickhousekeeper-0 \
  signoz-metastore-postgres-0
do
  echo "=== $c ==="
  docker inspect --format \
    '{{range .Mounts}}{{if eq .Type "volume"}}{{.Source}}  dest={{.Destination}}  vol={{.Name}}{{println}}{{end}}{{end}}' \
    "$c"
done

Какой Source брать — снято на этой ВМ3:

Контейнер dest= Host-путь для --add-exclusion
signoz-telemetrystore-clickhouse-0-0 /var/lib/clickhouse /var/lib/docker/volumes/signoz-telemetrystore-0-0-data/_data
signoz-telemetrykeeper-clickhousekeeper-0 /var/lib/clickhouse-keeper /var/lib/docker/volumes/signoz-telemetrykeeper-0-data/_data
signoz-metastore-postgres-0 /var/lib/postgresql/data /var/lib/docker/volumes/signoz-metastore-postgres-0-data/_data

Не добавлять в этом окне:

  • signoz-telemetrystore-user-scripts — скрипты, не hot-data ClickHouse;
  • анонимный том Keeper 29bd76fc40766c8bbf2f584040e75b4f3cab02052fcf67541777c4f9340dbc84 (dest=/var/lib/clickhouse у keeper). Если начнёт расти (du -sh этого _data) — отдельное решение Security, не расширять список вслепую.

Проверка тома:

docker volume inspect --format '{{.Name}} {{.Mountpoint}}' \
  signoz-telemetrystore-0-0-data \
  signoz-telemetrykeeper-0-data \
  signoz-metastore-postgres-0-data

Mountpoint обязан совпасть с путями ниже. Не исключать /var/lib/docker, overlay2, /opt/signoz, /var/lib/han-deploy/incoming, /tmp, /root.

kesl-control --get-settings 1 \
  --file /root/kesl-install/file-threat.before.ini

kesl-control --set-settings 1 \
  --add-exclusion /var/lib/docker/volumes/signoz-telemetrystore-0-0-data/_data
kesl-control --set-settings 1 \
  --add-exclusion /var/lib/docker/volumes/signoz-telemetrykeeper-0-data/_data
kesl-control --set-settings 1 \
  --add-exclusion /var/lib/docker/volumes/signoz-metastore-postgres-0-data/_data
kesl-control --set-settings 1 ScanArchived=No
kesl-control --get-settings 1

Каждое исключение: владелец, причина (write-hot telemetry/metadata), компенсация (FTP вне volume + периодический scan-file host-дерева /opt/signoz/scripts), срок пересмотра, подтверждение Security.

7. Узкий on-demand scan-file

ODS schedules, кроме Update, оставить Manual. Не сканировать volumes ClickHouse/PostgreSQL и не запускать Container Scan.

kesl-control --get-task-list
kesl-control --get-schedule 2
kesl-control --set-schedule 2 RuleType=Manual
kesl-control --scan-file /opt/signoz/scripts --action Inform
kesl-control --get-task-state 1
free -h
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps

Ожидается: scan-file без ошибок, FTP всё ещё Stopped, стек healthy. Если вырос swap или unhealthy — остановить scan и не включать task 1.

8. Host protection — АВЗ.1

На Ubuntu 24.04 с fanotify параметр InterceptorProtectionMode не поддерживается. Штатный режим — блокировка на время проверки. Откат: kesl-control --stop-task 1.

kesl-control --start-task 1
kesl-control --set-settings 1 \
  ActionOnThreat=DisinfectDeleteIfNotPossible ScanArchived=No
kesl-control --get-task-state 1
kesl-control --get-settings 1
kesl-control --app-info --json
free -h
docker stats --no-stream --format \
  'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}'
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps
ufw status verbose
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'

Пилот: каждые 15 минут — health, OTLP, RAM/swap, события KESL, firewall. При деградации: kesl-control --stop-task 1. Не расширять исключения вслепую.

9. Приёмочный EICAR

EICAR только с письменным разрешением Security. Образец не класть в git, chat и evidence. Каталог не в docker volume, /tmp, /opt/signoz/pours.

install -d -m 0700 -o root -g root /root/kesl-eicar-test
date -Is
kesl-control --get-task-state 1
curl -fsSL -o /root/kesl-eicar-test/eicar.com \
  'https://secure.eicar.org/eicar.com'
chmod 0600 /root/kesl-eicar-test/eicar.com
ls -l /root/kesl-eicar-test
kesl-control -E --query -n 20 --reverse

Если OAS на запись молчит (как на пилоте ВМ1) — явный ODS:

kesl-control --scan-file /root/kesl-eicar-test/eicar.com \
  --action DisinfectDeleteIfNotPossible
kesl-control -E --query -n 20 --reverse
ls -la /root/kesl-eicar-test

Уборка (не весь Backup):

kesl-control -B --query --reverse -n 20
kesl-control -B --mass-remove --query "DetectName == 'EICAR-Test-File'"
rm -rf /root/kesl-eicar-test

10. Приёмка стека и сужение egress

На ВМ3:

systemctl is-active kesl docker
kesl-control --app-info
kesl-control --get-task-state 1
kesl-control --get-task-state 6
kesl-control --get-schedule 6
cd /opt/signoz
./scripts/30-verify-signoz.sh
docker compose -f pours/deployment/compose.yaml ps
ufw status verbose
diff -u /root/kesl-install/ufw.before <(ufw status verbose) || true
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'
free -h
swapon --show
df -hT / /opt /var/lib/docker

С ВМ1 повторить TCP 4317. Слушатели 8080 только на 127.0.0.1, 4317/4318 только на 192.168.0.5. Сравнить UFW с baseline: новых правил KESL быть не должно.

24 часа: без OOM/restart/unhealthy, hourly Update сам зелёный, диск ClickHouse не упёрся в stop-порог.

После gates:

  1. закрыть широкий internet egress окна установки;
  2. оставить DNS/NTP и узкий allow-list Kaspersky из раздела 0.1;
  3. не открывать ingress 8080/4317/4318 из интернета;
  4. ISO/DEB из /var/lib/han-deploy/incoming и /root/kesl-install удалить только после переноса разрешённого evidence.
rm -rf /root/kesl-eicar-test
# после копирования evidence:
# rm -rf /root/kesl-install
# rm -f /var/lib/han-deploy/incoming/049-16-d-01.iso \
#       /var/lib/han-deploy/incoming/049-16-d-01.sig

Не выполнять reboot только ради KESL.

11. Evidence

Заполнить EVIDENCE.AVZ.ru.md без activation code, secrets, file bytes, полного checksum и EICAR.

systemctl is-active kesl
kesl-control --app-info --json
kesl-control --get-task-state 1
kesl-control --get-settings 1
kesl-control --get-schedule 6
kesl-control -E --query -n 100 --reverse --json
cd /opt/signoz
docker compose -f pours/deployment/compose.yaml ps

12. Rollback

Сначала минимально обратимое:

kesl-control --stop-task 1

Если KESL не отвечает:

systemctl stop kesl

apt-get purge kesl — только по решению approver. Затем:

systemctl daemon-reload
cd /opt/signoz
./scripts/30-verify-signoz.sh
docker compose -f pours/deployment/compose.yaml ps
ufw status verbose
ss -lntp '( sport = :8080 or sport = :4317 or sport = :4318 )'

Запрещено: docker compose down -v, docker volume prune, docker system prune --volumes, удаление volumes ClickHouse/PostgreSQL, правка pours/ или смена firewall ради обхода KESL.

После rollback повторить OTLP с ВМ1 и зафиксировать incident.

13. Эксплуатационный режим

  • Update (ID 6): каждый час; нужен постоянный узкий egress к KLServers.
  • File Threat Protection (ID 1): постоянно, DisinfectDeleteIfNotPossible, ScanArchived=No.
  • ODS: по согласованию в низкую нагрузку; не полный диск и не volumes БД.
  • ContainerScan: не использовать при текущей лицензии.
  • Ежедневно: лицензия, task 1 Started, дата баз, ошибки KESL, health SigNoz, свободное место /opt.
  • После upgrade KESL/kernel/Docker: повтор пилота и evidence delta.

Обновление образов SigNoz (20-deploy-signoz.sh) — отдельное break-glass окно; его egress к Docker Hub/GitHub не заменяет allow-list KESL.