Skip to content

Справочник статистики P2P

Уровень DLT P2P выводит две периодические строки журнала для мониторинга:

Префикс журналаИнтервал по умолчаниюНазначение
DLT Status |~30 сКомпактная однострочная запись для мониторинга через tail/grep
=== DLT P2P Stats |~120 с (настраивается через dlt-stats-interval-sec)Полная детализация по каждому пиру

Компактная строка статуса

DLT Status | FORWARD | head=#79881136 lib=#79881130 | dlt_range=79000000-79881136 | peers=6active/8conn | uptime=2h15m43s | flags=...
ПолеПримерЗначение
РежимFORWARDРабочий режим узла (SYNC или FORWARD)
head=#Nhead=#79881136Номер текущего head блока
lib=#Nlib=#79881130Номер последнего необратимого блока
dlt_range=A-Bdlt_range=79000000-79881136Диапазон блоков в скользящем DLT block log
peers=Xactive/Yconnpeers=6active/8connПиры с включённым обменом / всего TCP-соединений
uptime2h15m43sВремя с момента запуска узла
flagsразличныеАктивные флаги (snapshot, paused, catchup и т.д.)

Полная статистика — Строка заголовка

=== DLT P2P Stats | status=FWD fork=NORMAL head=79881136 lib=79881130 peers=6 conn=4 paused=no uptime=0h20m30s ===

status — Рабочий режим узла

ЗначениеЗначение
SYNCДогоняет — тянет блоки от пиров; не транслирует транзакции
FWDДогнал — производит и ретранслирует блоки и транзакции в реальном времени

Причины SYNC: Узел только что запущен; отстал во время простоя; обнаружил minority fork и пересинхронизируется; head стагнировал более 30 секунд при наличии опережающего пира.

Причины FWD: Узел догнал head сети; все блоки поступают через трансляцию в реальном времени.

fork — Статус форка

ЗначениеЗначение
NORMALНа мажоритарном форке — нет конфликта
LOOKINGОбнаружены конкурирующие tips; сравниваются ветви (порог: 42 блока = 2 полных раунда)
MINORITYПодтверждено нахождение на minority fork; ожидается переключение

Причины отличия от NORMAL: Два валидатора произвели блок в одном слоте; сетевой раздел разделил валидаторов между tips; получен блок альтернативного форка.

head и lib

  • head — номер блока текущего tip цепочки
  • lib — последний необратимый блок; блоки на этом уровне и ниже финализированы

Разрыв head-to-lib обычно составляет 1–10 блоков в нормальной работе DLT.

peers и conn

  • peers — всего записей пиров в таблице (активные + подключающиеся + отключённые, отслеживаемые для переподключения)
  • conn — текущие живые TCP-соединения

Когда peers значительно превышает conn, узел имеет отключённые пиры в очередях ожидания.

paused

ЗначениеЗначение
noОбработка блоков активна
YESПриём блоков временно остановлен (идёт экспорт снимка)

В режиме паузы P2P-соединения продолжают работать нормально. Полученные блоки ставятся в очередь в fork DB и применяются при возобновлении. Таймеры stale-sync и forward-stagnation сбрасываются, чтобы во время паузы не происходило ложных переходов режима.


Полная статистика — Строки по каждому пиру

Активный пир

62.109.17.82:2001 | ACTIVE | exch=YES | head=79881136 lib=79880729 | range=79869724-79880729 | peer_fork=NORM peer_node=FWD | spam=0 | +align+emrg+sync

Состояние жизненного цикла

МеткаЗначение
CONNECTTCP-подключение в процессе (таймаут 5 с)
HANDSHAKEОбмен hello/hello-reply в процессе (таймаут 10 с)
SYNCINGЗагружает диапазон блоков от этого пира
ACTIVEПолностью работоспособен; обмен установлен
DISCОтключён; переподключится после ожидания
BANNEDМягко заблокирован; переподключения нет до истечения бана

exch — Статус обмена

ЗначениеЗначение
YESОбмен блоками и транзакциями включён; обе стороны на одном форке
noОбмен отключён; выравнивание форка не подтверждено

Причины no: Рукопожатие только что завершено, выравнивание форка ещё не проверено; head/LIB пира не в нашем fork DB; пир сообщил о несовпадении форка; переход SYNC → FORWARD ещё не распространился.

Как обмен становится YES:

  1. Рукопожатие hello: acceptor вызывает is_block_known(peer.head_block_id) — при совпадении устанавливает exchange_enabled=true в ответе hello.
  2. Принятие блока: когда блок от этого пира применяется к нашей цепочке, обмен включается.
  3. Переход FORWARD: пир транслирует dlt_fork_status_message с node_status=FORWARD, вызывая повторную проверку выравнивания форка.

head / lib (значения пира)

Последние сообщённые пиром номера head и LIB блоков — снимок из последнего hello, сообщения fork_status или ретрансляции блока. Реальная цепочка пира может опережать эти значения, особенно в режиме FORWARD при быстром производстве блоков.

range — Диапазон DLT block log

earliest-latest: номера блоков, доступных в скользящем DLT block log пира.

Если блоки, необходимые для gap fill или начальной синхронизации, ниже earliest, этот пир не может их обслуживать. Узел ищет другого пира, чей диапазон покрывает недостающие блоки.

peer_fork — Самосообщаемый статус форка пира

МеткаЗначение
NORMПир сообщает о нахождении на мажоритарном форке
LOOKПир разрешает конфликт форка
MINOПир сообщает о нахождении на minority fork

Пиры, сообщающие MINO, вероятно, в процессе переключения форков и могут скоро изменить свой head. Блок от них не следует считать каноническим.

peer_node — Рабочий режим пира

МеткаЗначение
SYNCПир догоняет; не будет транслировать транзакции
FWDПир догнал и ретранслирует блоки в реальном времени

spam — Счётчик ударов анти-спама

Удары, накопленные с момента последнего корректного пакета. Мягкая блокировка срабатывает при 10 ударах. Сбрасывается при любом корректном пакете, успешном переподключении или истечении бана.

Триггеры ударов: Ошибка десериализации; нарушение протокола (неожиданное сообщение в текущем состоянии); блоки dead-fork (после льготного периода).

Примечание: Дублирующиеся блоки и блоки не по порядку внутри range reply не увеличивают счётчик.

Флаги

ФлагЗначение
+alignВыравнивание форка подтверждено — блоки от этого пира применяются к нашей цепочке
+emrgПир сообщает об активном экстренном консенсусе
+ekeyПир владеет приватным ключом экстренного комитета (кандидат в экстренные мастер-узлы)
+syncСинхронизация диапазона блоков ожидает или выполняется с этим пиром

Отключённый пир

138.201.117.201:2001 | DISC | disconnected=74s | backoff=480s | reconnect_in=502s | spam=0
ПолеЗначение
disconnectedСекунды с момента потери соединения
backoffТекущий интервал переподключения; удваивается при каждой неудаче: 30 → 60 → 120 → … → 3600 с
reconnect_inСекунды до следующей попытки переподключения
spamОстаточный счётчик ударов из предыдущей сессии

Backoff сбрасывается до начального значения (30 с), когда соединение остаётся стабильным более 5 минут.


Заблокированный пир

1.2.3.4:2001 | BANNED | ban_remaining=1800s | reason=spam strike threshold exceeded
ПолеЗначение
ban_remainingСекунды до истечения бана (бан по умолчанию: 3600 с)
reasonЧеловекочитаемая причина бана, отправленная в dlt_soft_ban_message

После истечения запись возвращается в состояние DISCONNECTED и возобновляется обычное переподключение с backoff.


Интерпретация сценариев

СимптомВероятная причинаДействие
Все пиры exch=noРукопожатие только что завершено; несовпадение форка; узел в SYNC с нераспознанными пирамиДождитесь перехода FORWARD для повторной оценки; проверьте статус fork
status=SYNC не продвигаетсяРазрыв до DLT-диапазона пира; нет доступного пира-мостикаПроверьте range на пирах; возможно, требуется импорт снимка
peer_fork=MINO на нескольких пирахРаздел форка в масштабе сетиНаблюдайте; протокол сходится автоматически
Высокий backoff на отключённых пирахПовторные сбои соединения; нестабильность сетиПроверьте подключение на порту 2001; высокий backoff ожидаем и сбрасывается при успехе
paused=YES неожиданноСнимок завис или упал во время экспортаПроверьте журналы плагина snapshot
fork=LOOKING не разрешаетсяФорк сохраняется > 42 блоков без чёткого большинстваПроверьте подключение валидаторов; проверьте цепочку на обоих tips
spam растёт на одном пиреНесовпадение протокола; пир на несовместимом форкеАвтоматический бан при 10 ударах; проверьте версию ПО пира
Быстрые колебания SYNC ↔ FWDНет опережающего пира; все пиры на одном heademergency_peer_reset() срабатывает через 60 с изоляции; также проверьте исправление P53 в журналах

Константы протокола

КонстантаЗначениеОписание
SPAM_STRIKE_THRESHOLD10Удары до мягкой блокировки
BAN_DURATION_SEC3600Длительность мягкой блокировки по умолчанию (1 ч)
INITIAL_RECONNECT_BACKOFF_SEC30Первая задержка переподключения
MAX_RECONNECT_BACKOFF_SEC3600Максимальная задержка переподключения (1 ч)
STABLE_CONNECTION_RESET_SEC300Продолжительность соединения до сброса backoff (5 мин)
PEER_EXCHANGE_MAX_REQUESTS3Макс. запросов обмена пирами за скользящее окно
PEER_EXCHANGE_WINDOW_SEC300Окно ограничения скорости обмена пирами (5 мин)
CONNECTING_TIMEOUT5 сТаймаут TCP-подключения
HANDSHAKING_TIMEOUT10 сТаймаут обмена hello
PEER_REMOVAL_HOURS8 чУдалить неотвечающего пира через это время
ISOLATION_RESET_SEC60Секунды с нулём активных пиров до emergency_peer_reset()
GAP_FILL_MAX_BLOCKS100Макс. блоков за запрос gap fill
GAP_FILL_COOLDOWN_SEC5Минимальный интервал между запросами gap fill
GAP_FILL_TIMEOUT_SEC15Таймаут флага gap fill в процессе
FORWARD_STAGNATION_SEC30Порог непродвижения head в режиме FORWARD
SYNC_STAGNATION_SEC30Порог отсутствия блоков в режиме SYNC
FORK_RESOLUTION_BLOCK_THRESHOLD42Блоки до срабатывания разрешения форка (2 × CHAIN_MAX_VALIDATORS)
FORK_RESOLUTION_CONFIRMATION_BLOCKS6Последовательных блоков для подтверждения разрешения форка

См. также: Обзор P2P, Сообщения, Сценарии синхронизации.