Приложение. Метрики мониторинга¶
Приложение дополняет подраздел 2.1.4 «Мониторинг состояния системы» в разделе 2. В основном разделе приведены оперативные проверки UI, API, контейнеров, дисков, GPU и inference-контура. Здесь зафиксированы технические метрики Prometheus, бизнес-метрики ClickHouse, источники их сбора, health-check механизмы, логирование и ограничения текущей реализации BOX5-DIT-MGSN.
1. Общая схема сбора¶
Метрики делятся на два класса:
- бизнес-метрики - все показатели, которые хранятся или рассчитываются в ClickHouse: события, счётчики, статистика нарушений, витрины, отчётные и dashboard-агрегаты;
- технические метрики - всё, что собирается вне ClickHouse: Prometheus
/metrics,up, CPU, память, uptime, health/readiness endpoints, состояние контейнеров, дисков, GPU, Kafka, Redis, PostgreSQL, MinIO и журналы Loki.
Технические метрики собираются внутренним контуром elk-log. Сервис
log-prometheus опрашивает /metrics у настроенных targets и хранит временные
ряды в локальной TSDB. Журналы контейнеров собираются в log-loki и
используются вместе с метриками для диагностики.
GET /metrics"] --> prom["log-prometheus
Prometheus TSDB"] push["inf-pushgateway
агрегированные samples"] --> prom logs["Docker logs"] --> loki["log-loki
журналы контейнеров"] clickhouse["ClickHouse
бизнес-метрики
события, счётчики, витрины"] --> grafana["Grafana заказчика
внешний мониторинг"] prom -.->|"при согласованном подключении"| grafana
Исходный Mermaid-код схемы: И3-MER-005. 1. Общая схема сбора.
Внешняя Grafana заказчика не является сервисом BOX5-DIT-MGSN. Она может получать
показатели из согласованных источников: аналитические и прикладные показатели
из ClickHouse, технические метрики - из Prometheus или из экспортированного
набора временных рядов, если такой доступ настроен эксплуатационно.
Публиковать внутренние /metrics сервисов наружу без отдельного сетевого
ограничения не следует.
2. Классификация метрик¶
При описании мониторинга BOX5-DIT-MGSN используется следующее правило: если показатель лежит в ClickHouse или рассчитывается запросом к ClickHouse, это бизнес-метрика; если источник не ClickHouse, это техническая метрика.
| Класс | Источник | Примеры | Назначение |
|---|---|---|---|
| Бизнес-метрики | ClickHouse-инстансы доменов statistics, severstal, inference |
Количество событий и нарушений, счётчики присутствия/проходов, агрегаты по объектам и камерам, статистика подтверждений, данные витрин и отчётов. | Анализ производственного процесса, отчётность, графики заказчика, проверка корректности бизнес-сценариев. |
| Технические метрики Prometheus | log-prometheus, service /metrics, inf-pushgateway |
up, request_count_total, request_error_total, request_duration_*, cpu_usage, memory_usage, uptime. |
Контроль доступности сервисов, нагрузки, ошибок и деградации API. |
| Технические health/readiness сигналы | Docker healthcheck, /-/ready, /-/healthy, /ready, /healthcheck, pg_isready, redis-cli PING |
Состояние контейнера, readiness Prometheus/Loki/Pushgateway, готовность Redis/PostgreSQL/Schema Registry/Node-RED/Flower. | Быстрое обнаружение отказа процесса или локальной зависимости. |
| Технические журналы | Docker logs, log-loki, локальные stdout/stderr и редкие файловые диагностические логи |
INFO, WARNING, ERROR, DEBUG, access-логи nginx/uvicorn, stack trace, сообщения Kafka consumers. |
Расследование причин отказа, поиск ошибок, подтверждение последовательности действий. |
| Техническое состояние узла | Docker, ОС, GPU, диски, tmpfs, Kafka lag | docker ps, df -h, nvidia-smi, состояние /dev/shm, consumer lag. |
Контроль инфраструктурных ресурсов, без которых бизнес-метрики могут перестать обновляться. |
Бизнес-метрики не заменяют технический мониторинг: отсутствие новых событий в ClickHouse может быть следствием бизнес-сценария, недоступности камеры, отказа Kafka, заполнения диска или ошибки модели. Поэтому инцидент проверяется с двух сторон: сначала техническая доступность сервисов и потоков, затем корректность бизнес-данных в ClickHouse.
3. Проверка Prometheus и Loki¶
Проверки выполняются из внутренней сети контура или на узле поставки. Конкретный способ доступа зависит от deployment-профиля: Docker Compose, Docker Swarm и сетевых правил площадки.
| Компонент | Проверка | Норма |
|---|---|---|
log-prometheus |
GET http://log-prometheus:9090/-/ready и /-/healthy |
Prometheus готов и принимает запросы. |
| Targets Prometheus | GET http://log-prometheus:9090/api/v1/targets или запрос up |
Ожидаемые targets находятся в состоянии up; недоступные targets видны как down. |
| Конфигурация Prometheus | GET http://log-prometheus:9090/api/v1/status/config |
Загружена актуальная конфигурация scrape-targets. |
log-loki |
GET http://log-loki:3100/ready |
Readiness Loki возвращает 200; если endpoint даёт 503, проверяются /loki/api/v1/status/buildinfo, query API, права на ${COMPOSE_DATA}/elk-log/loki и логи log-loki. |
| Loki API | GET http://log-loki:3100/loki/api/v1/status/buildinfo |
API журналов отвечает, версия Loki доступна. |
| Хранилище метрик | Каталог ${COMPOSE_DATA}/elk-log/prometheus |
Каталог доступен на запись Prometheus. |
| Хранилище логов | Каталог ${COMPOSE_DATA}/elk-log/loki |
Каталог доступен на запись Loki; ошибки прав отражаются в логах log-loki. |
Штатная конфигурация log-prometheus монтируется как
/etc/prometheus/prometheus.yml; исходный файл находится в дереве поставки
elk-log/configs/prometheus/prometheus.yml. Локальное хранилище Prometheus
монтируется в контейнер как /prometheus.
4. Формат endpoint /metrics¶
Сервисы, поддерживающие Prometheus, отдают метрики в формате text exposition:
# HELP request_count_total Total Request Count
# TYPE request_count_total counter
request_count_total{method="AddCamera"} 1.0
Типовые элементы ответа:
| Элемент | Назначение |
|---|---|
# HELP <metric_name> <description> |
Описание метрики. |
# TYPE <metric_name> <type> |
Тип метрики: counter, gauge или histogram. |
<metric_name>{label="value"} number |
Значение метрики с набором labels. |
Типовые labels:
| Label | Назначение | Примеры |
|---|---|---|
method |
Имя gRPC/RPC/endpoint-метода. | AddCamera, GetCameraList, SyncCameras |
code |
Код ошибки для неуспешного запроса. | Errors.NotFound |
le |
Верхняя граница bucket у histogram-метрик. | 0.05, 0.5, 1.0, +Inf |
job, instance |
Labels, добавляемые Prometheus при scrape. | load-balancer, inf-load-balancer:3000 |
5. Типовые семейства метрик¶
| Метрика | Тип | Назначение |
|---|---|---|
request_count_total |
counter |
Общее количество обработанных запросов по методу. |
request_count_created |
gauge |
Timestamp создания series для request_count_total. |
request_traffic_total |
counter |
Накопленный объём входящего payload по методу, в байтах. |
request_traffic_created |
gauge |
Timestamp создания series для request_traffic_total. |
response_traffic_total |
counter |
Накопленный объём исходящего payload по методу, в байтах. |
response_traffic_created |
gauge |
Timestamp создания series для response_traffic_total. |
request_duration_bucket |
histogram bucket |
Количество запросов, уложившихся в границу le. |
request_duration_count |
histogram count |
Количество наблюдений длительности запроса. |
request_duration_sum |
histogram sum |
Суммарное время обработки запросов, в секундах. |
request_duration_created |
gauge |
Timestamp создания series для request_duration. |
request_error_total |
counter |
Количество запросов, завершившихся ошибкой, с label code. |
request_error_created |
gauge |
Timestamp создания series для request_error_total. |
cpu_usage |
gauge |
Текущее использование CPU процессом или сервисом, в процентах. |
memory_usage |
gauge |
Текущее использование памяти процессом или сервисом, в байтах. |
uptime |
gauge |
Timestamp старта процесса сервиса. |
up |
gauge |
Состояние scrape-target с точки зрения Prometheus: 1 - доступен, 0 - недоступен. |
Пример фрагмента ответа:
request_count_total{method="AddObjectObservation"} 1.0
request_count_total{method="DeleteCamera"} 2.0
request_error_total{code="Errors.NotFound",method="DeleteCamera"} 1.0
request_duration_bucket{le="0.05",method="DeleteCamera"} 2.0
cpu_usage 21.4
memory_usage 1.27717376e+08
uptime 1.77666508638e+09
6. Источники метрик текущей реализации¶
В текущей реализации наличие маршрута /metrics зависит от конкретного
сервиса и версии образа. Нельзя считать /metrics универсальной проверкой
работоспособности всех контейнеров.
Метрики из таблицы ниже относятся к техническому мониторингу, если они
собираются через Prometheus/Loki, и к бизнес-мониторингу, если тот же
показатель рассчитывается из ClickHouse.
| Группа | Примеры источников | Что контролировать |
|---|---|---|
| Inference control-plane | inf-load-balancer:3000/metrics, inf-image-storage:3000/metrics, inf-monitoring:3000/metrics |
Доступность target, количество запросов, ошибки, длительность ответов, CPU, память, uptime. |
| Агрегированные метрики | inf-pushgateway:80/metrics, inf-pushgateway:80/-/ready |
Доступность gateway и наличие агрегированных samples, если producers настроены. |
| Statistics-сервисы | st-auth, st-camera-storage, st-event-statistic, st-report-email, st-report-pdf-xlsx-generator, st-audit, st-comments, st-virt-cam-video-upload |
RPC-нагрузка, ошибки, длительность методов, трафик, CPU и память. |
| Интеграционные сервисы | svr-severstal-org-sync |
Вызовы синхронизации, ошибки RPC, доступность зависимостей ПК-КОТ и st-camera-storage по профильным проверкам. |
| Временное хранилище | ds-data-temporary-storage:3000/metrics |
Ошибки операций чтения/записи, трафик, доступность Redis sidecar. |
| Loki | log-loki:3100/metrics |
Метрики самого хранилища журналов и HTTP-запросов Loki. |
| Песочница Node-RED | /sandbox/flower/metrics, /sandbox/flower/healthcheck через nr-sbx-nginx |
Состояние Celery worker-ов и очередей песочницы; не является мониторингом промышленного инференса. |
| WebRTC relay | inf-coturn:9641/metrics, если target добавлен в Prometheus |
Метрики Coturn и process-метрики; наличие endpoint не означает, что он включён в scrape-конфигурацию. |
Основные targets Prometheus для inference-контура: inf-load-balancer,
inf-image-storage, inf-monitoring, inf-pushgateway. Набор targets в промышленном контуре определяется активной
конфигурацией поставки, поэтому при диагностике сначала проверяется текущий
/etc/prometheus/prometheus.yml внутри log-prometheus.
7. Ограничения и альтернативные проверки¶
Часть контейнеров не имеет собственного Prometheus endpoint, а у части
сервисов маршрут /metrics может возвращать 404 или 500 в текущей версии.
В таких случаях для эксплуатационного контроля применяются профильные проверки.
| Сервис или группа | Ограничение /metrics |
Рабочая проверка |
|---|---|---|
ui-react, ui-nginx, ui-rest-to-gprc |
Собственный /metrics не предусмотрен. |
GET /login, GET /config.json, GET /api/base/ping/, состояние контейнеров и логи. |
| PostgreSQL sidecar | Собственный /metrics обычно не предусмотрен. |
pg_isready, SQL-подключение, наличие ожидаемых таблиц, резервные копии. |
| Redis sidecar | Собственный /metrics обычно не предусмотрен. |
redis-cli PING, INFO keyspace, DBSIZE, логи клиентов. |
| Nginx-gateway сервисы | /metrics, /health или stub_status часто не настроены. |
nginx -t, доступность upstream-маршрутов, HTTP-коды и Loki/Docker logs. |
inf-nri-inference |
HTTP /metrics не предусмотрен. |
Процессы launch.py, tsm_inference.py, models_manager_service.py, heartbeat topics camera_nri_state_heartbeat, models_summary_heartbeat, tsm_process_stats_heartbeat, логи NRI. |
inf-mediaserver |
В текущей конфигурации GET /metrics на :3000 возвращает 404. |
GET /api/status на debug-порту, heartbeat в Kafka, IPC-файлы /inference_ipc и /dev/shm, логи медиасервера. |
| Conversion-сервисы | /metrics отсутствует или возвращает 404. |
GET /status_server через Unix socket, наличие socket-файла, успешный polling статуса конвертации, появление артефактов модели. |
Часть statistics/severstal сервисов |
Endpoint может быть заявлен, но фактически возвращать 500. |
Проверка контейнера, read-only API/gRPC, доступность БД/MinIO/Kafka, consumer lag и логи. |
| Песочница Node-RED | Большинство сервисов песочницы не имеет Prometheus endpoint; Flower покрывает только Celery. | /sandbox/, /sandbox/config.json, /sandbox/flower/healthcheck, Redis/Kafka/Celery status и логи. |
Для состояния камер, распределения по нодам и FPS основным источником остаются прикладные API из подраздела 2.1.4:
POST /api/inference/monitoring/light- состояние камер и heartbeat;GET /api/inference/load-balancer/info2/- распределение камер по нодам;GET /api/inference/load-balancer/info/with_monitoring/- распределение вместе с состоянием, если используется соответствующий UI/API-сценарий.
Prometheus показывает состояние сервисов и технических endpoints, но не заменяет эти API при расследовании отказа конкретной камеры или сценария.
8. Health-check механизмы¶
В поставке нет единого Kubernetes-стиля с обязательными livenessProbe и
readinessProbe для каждого сервиса. Используются несколько механизмов:
Docker healthcheck для отдельных контейнеров, HTTP readiness/health endpoints
инфраструктурных сервисов, Prometheus /metrics как технический liveness
сигнал и прикладные read-only API для проверки зависимостей.
В промышленной поставке Docker Health может быть задан только у части
контейнеров. У большинства application-сервисов состояние в docker ps -
просто Up, а готовность зависимостей проверяется через профильные команды и
API.
| Сервис или группа | Тип | Реализация | Что проверяет | Ограничение |
|---|---|---|---|---|
log-prometheus |
readiness + liveness | GET /-/ready, GET /-/healthy на :9090; список targets через /api/v1/targets или PromQL up. |
Готовность Prometheus и его HTTP API; отдельно показывает up/down scrape-targets. |
Успешный /-/ready не означает, что все targets доступны: устаревшие или отключённые targets могут быть down, при этом Prometheus остаётся готовым. |
log-loki |
readiness + custom API check | GET /ready, GET /loki/api/v1/status/buildinfo, GET /loki/api/v1/labels, query_range. |
Готовность Loki и возможность читать/искать журналы. | /ready может возвращать 503 при проблемах готовности, даже если часть query API отвечает. Нужно проверять права на /loki, WAL/index/chunks и логи контейнера. |
inf-pushgateway |
readiness + liveness | GET /-/ready, GET /-/healthy, GET /metrics на :80. |
Живой процесс gateway и наличие агрегированных samples. | Агрегаты хранятся в памяти и теряются при рестарте; endpoint не проверяет producers. |
Основные Twirp/FastAPI сервисы statistics, inference, severstal, data-storage |
liveness/scrape | GET /metrics на :3000, если endpoint реализован. Для типовых сервисов st-auth, st-camera-storage, inf-load-balancer, inf-image-storage, inf-monitoring, ds-data-temporary-storage, svr-severstal-org-sync /metrics является основным техническим endpoint; /health, /ready, /ping на том же порту обычно не предусмотрены. |
Процесс приложения отвечает и отдаёт Prometheus text exposition. | /metrics не проверяет Kafka, PostgreSQL, Redis, MinIO, ClickHouse и бизнес-готовность метода. У части сервисов endpoint отсутствует или возвращает 500. |
Redis sidecar inf-load-balancer-redis, inf-monitoring-redis, svr-asutp-redis, nr-sbx-redis |
Docker liveness/readiness | redis-cli ping. |
Локальный Redis принимает команды и возвращает PONG. |
Не проверяет клиентов Redis и бизнес-кэш. На части Redis-контейнеров healthcheck не задан. |
PostgreSQL sidecar svr-postgres-pk-kot |
Docker readiness | pg_isready -U postgres. |
PostgreSQL принимает подключения. | Не проверяет схему, миграции и прикладную целостность данных. У многих PostgreSQL sidecar healthcheck отсутствует. |
svr-asutp-schema-registry |
Docker readiness | curl -f http://localhost:8081/subjects. |
Schema Registry отвечает и может читать список subjects. | Не подтверждает, что все ожидаемые схемы зарегистрированы и потребители АСУ ТП работают. |
nr-sbx-node-red-vl |
Docker custom liveness | node /healthcheck.js: HTTP/HTTPS запрос к 127.0.0.1:<settings.uiPort>, успешными считаются коды 200..499. |
Node-RED UI-процесс принимает HTTP-запрос. | Коды 4xx считаются живым процессом; выполнение сценариев и доступность broker/worker проверяются отдельно. |
nr-sbx-flower |
custom readiness песочницы | /sandbox/flower/healthcheck через nr-sbx-nginx; /sandbox/flower/metrics. |
Flower и broker-backed мониторинг Celery отвечают. | Покрывает только песочницу Node-RED/Celery, не промышленный inference. |
ds-minio |
liveness + readiness | GET /minio/health/live, GET /minio/health/ready на :9000. |
MinIO жив и готов обслуживать S3-запросы. | Не проверяет наличие всех bucket/prefix и связность бизнес-сервисов с объектами в БД. |
| Публичный gateway | custom smoke | GET /api/base/ping/, GET /login, GET /config.json. |
UI/API-шлюз и базовый маршрут доступны через ui-nginx и ui-rest-to-gprc. |
Не доказывает готовность всех downstream-сервисов. |
| Inference business path | custom functional readiness | POST /api/inference/monitoring/light, GET /api/inference/load-balancer/info2/, GET /api/inference/models-storage/. |
Камеры, ноды балансировки и модели доступны на прикладном уровне. | Требует авторизованный токен и проверяет уже более высокий уровень, чем liveness контейнера. |
Для новых проверок в эксплуатационном регламенте следует явно указывать, какой уровень они покрывают:
- liveness - процесс отвечает и контейнер не завис;
- readiness - сервис готов принимать штатные запросы;
- custom functional check - проверен конкретный бизнес- или интеграционный путь с зависимостями.
9. Система логирования¶
Основной канал логирования - stdout/stderr контейнеров. В промышленном
контуре централизованная агрегация строится через Docker log driver loki:
контейнеры отправляют логи в http://172.17.0.1:3100/loki/api/v1/push.
Исключения возможны для сервисов, где явно выбран локальный или отключённый
driver, например для отдельных gateway/observability/Redis-контейнеров.
stdout / stderr"] --> docker["Docker log driver"] docker -->|"loki"| loki["log-loki
/loki/api/v1/push"] docker -.->|"local / none
исключения"| local["docker logs
локальные файлы Docker"] loki --> grafana["Grafana Loki datasource
поиск по labels"] filelogs["Диагностические файловые логи
NRI/TSM, report-video-extractor"] -.-> admin["администратор
ручной сбор при инциденте"]
Исходный Mermaid-код схемы: И3-MER-006. 9. Система логирования.
Хранилища и точки поиска:
| Источник | Где хранится | Как искать |
|---|---|---|
| Loki | ${COMPOSE_DATA}/elk-log/loki: WAL, index и chunks Loki. |
Grafana datasource Loki или HTTP API log-loki:3100/loki/api/v1/query_range. |
| Docker logs | Docker runtime на узле; для Loki stream в labels виден filename вида /var/log/docker/<container-id>/json.log. |
docker logs <container> --since ...; для driver loki - поиск через Loki. |
| Nginx local logs | /var/log/nginx/access.log и /var/log/nginx/error.log внутри контейнера, выводятся в Docker logs. |
docker logs ui-rest-ui-nginx-1; по HTTP-коду, пути и upstream-ошибкам. |
| Диагностические файловые логи | Отдельные mount-ы, например /logs у inf-report-video-extractor, TSM/NRI-файловые логи при ENABLE_TSM_FILE_LOGGING=true. |
Собирать вручную с узла или из контейнера при расследовании; не считать единой системой агрегации. |
Фактические обязательные поля для поиска в Loki задаются Docker/Compose labels, а не единым JSON-форматом строки:
| Поле Loki | Назначение |
|---|---|
host |
Узел, с которого пришёл лог. |
container_name |
Полное имя контейнера, например statistics-st-auth-1. |
compose_project |
Compose-домен: statistics, inference, severstal, data-storage, elk-log. |
compose_service |
Имя сервиса внутри compose-файла, например st-auth или inf-load-balancer. |
source |
Поток stdout или stderr. |
filename |
Runtime-файл Docker log, полезен при сверке с локальным docker logs. |
Единый обязательный trace_id или service_name в application-строках сейчас
не закреплён для всех сервисов. В качестве service_name при поиске
используются compose_service и container_name. Отдельные gateway-запросы
могут иметь заголовки x-request-id и x-correlation-id, а ui-rest-to-gprc
пишет trace-строки для некоторых GraphQL/API операций, но эти идентификаторы
не являются сквозным обязательным контрактом для всего контура.
Распределение уровней логирования:
| Группа сервисов | Типовые уровни | Что попадает в логи |
|---|---|---|
statistics, severstal, data-storage, inference control-plane |
INFO, WARNING, ERROR; DEBUG - только как временный диагностический режим. |
Uvicorn/FastAPI/Twirp access-строки, время обработки методов, Kafka consumers/producers, миграции, ошибки БД/MinIO/Kafka/ClickHouse, stack trace. |
inf-nri-inference и media/inference runtime |
INFO, WARNING, ERROR; DEBUG - только как временный диагностический режим. |
Запуск графов, модели, GPU/IPC/TSM, heartbeat, ошибки обработки кадров и событий. В промышленном контуре DEBUG следует включать только на время диагностики, иначе объём логов быстро растёт. |
ui-nginx, nr-sbx-nginx, domain-gateway nginx |
Access log без явного уровня, error log с уровнями nginx. | HTTP-метод, путь, код ответа, user agent, upstream 502/504, ошибки проксирования. |
| PostgreSQL, ClickHouse, Redis, Kafka, MinIO, Schema Registry, Superset, Flower | Уровни зависят от upstream-продукта. | Старт процесса, готовность принимать подключения, ошибки хранения, миграций, broker/storage warnings. |
log-prometheus, log-loki, log-grafana |
Уровни upstream Prometheus/Loki/Grafana. | Scrape errors, readiness, TSDB/WAL, Loki chunks/index, datasource/provisioning ошибки. |
Интерпретация уровней:
INFO- штатные запросы, heartbeat, синхронизации, завершённые операции;WARNING/WARN- деградация, retry, пропущенные необязательные данные, предупреждения healthcheck и нестабильные зависимости;ERROR- исключения, отказ обязательной зависимости, неуспешная отправка в Kafka/БД/MinIO/внешнюю систему, stack trace;DEBUG- подробная диагностика, допустимая в промышленном контуре только временно по инциденту.
При расследовании инцидента минимальный фильтр Loki:
{compose_project="statistics", compose_service="st-auth"} |= "ERROR"
Если контейнер не отправляет логи в Loki, используется docker logs:
docker logs <container> --since 30m --tail 300
Общие ограничения на публикацию диагностических данных приведены в
разделе 4. При передаче фрагментов /metrics или
LogQL-результатов оставляются только технически необходимые поля: имя метрики,
service/job/instance, метод, код ошибки, время и значение.
10. Практические PromQL-запросы¶
| Задача | Запрос |
|---|---|
| Проверить недоступные targets | up == 0 |
| Оценить поток запросов по методам | sum by (job, method) (rate(request_count_total[5m])) |
| Найти рост ошибок | sum by (job, method, code) (increase(request_error_total[5m])) |
| Оценить p95 длительности методов | histogram_quantile(0.95, sum by (le, job, method) (rate(request_duration_bucket[5m]))) |
| Оценить входящий трафик | sum by (job, method) (rate(request_traffic_total[5m])) |
| Оценить исходящий трафик | sum by (job, method) (rate(response_traffic_total[5m])) |
| Найти перезапуск процесса по изменению uptime | changes(uptime[15m]) > 0 |
| Проверить CPU по сервисам с типовой метрикой | avg by (job, instance) (cpu_usage) |
| Проверить память по сервисам с типовой метрикой | avg by (job, instance) (memory_usage) |
Пороговые значения для предупреждений задаются эксплуатационным регламентом площадки. Для промышленного контура они должны учитывать количество камер, распределение по вычислительным нодам, активные сценарии и плановые технологические окна.