This commit is contained in:
Dmitry Zuikov 2023-02-25 10:57:20 +03:00
parent 0ce52cc4ba
commit f8a437c2f1
1 changed files with 85 additions and 0 deletions

View File

@ -1,6 +1,91 @@
## 2023-02-25
TODO: counters-and-metrics
Сделать механизм счётчиков и измерений на их основе.
Идея такая: счётчик заводится и каким-то образом
изменяется ( в зависимости от типа ). Наиболее вероятные
типы: Integer, Double.
Некий процесс производит измерения счётчиков в зависимости
от их типа/настроек. Например, средее за период. Скользящее
среднее. Изменение за период времени (TBD).
Счётчики могут быть доступны как в логе, так и удалённо
(RPC), для целей отладки.
Простейшее примение: watchdog. Смотрим на некую величину,
если она не меняется некоторое время (например, между
двумя запросами) --- следовательно, произошла авария
и нужно рестартовать сервис и/или рапортовать об
этом.
Что бы не таскать счётчики по монадам/публичным интерфейсам,
можно поступить с ними аналогично тому, как сделаны логи.
Счётчики должны быть максимально возможно быстрые и вносить
минимальные задержки в работу программы.
Задача разбивается на несколько частей:
1. Счётчик, показывающий текущиее состояние.
Пример, текущее значение потребления RAM.
Или текущее количество запросов.
2. Измерение, т.е некий процесс, который с заданной
периодичностью смотрит значение счётчика и что-то с ним
делает: например, считает скользящее среднее или
экспоненциальное среднее.
3. Вывод информации о счётчиках (Лог? RPC?)
4. Анализ информации о счётчиках
Пример, зачем нужен счётчик: введём подпротокол
для измерения RTT, для использования в алгоритме
Congestion Control.
Еще пример, зачем нужен счётчик: заводим в каждом
процессе, который подозревается на наличие busyloop.
Смотрим скорость изменения счетчика. Если она больше
некоторого порога, определяемого периодичностью процесса,
следовательно, у нас busyloop.
Можно определять эти busyloop даже без явно заданного
порога, просто глядя на график от времени и обнаруживая
аномалии.
Порядок реализации:
1. драфт дизайна, включающий примеры использования
2. обсуждение
3. реализация
возможно, есть что-то готовое/полуготовое.
Во всякий там прометеус/графану и прочее подобное я не верю.
Но даже если и есть годное, можно адаптировать.
Счётчики это типичные временные ряды, можно их складывать
в ClickHouse.
Опять же, у нас нет цели поддерживать/мониторить целую огромную
инфраструктуру отрядом девопсов.
Цели две: отладка и реализация watchdog-ов, т.е нода должна сама,
своими силами анализировать счётчики и как-то справляться с
аномалиями.
То есть: пир состоит из двух (или чуть больше) независимых (forkOS)
потоков, один из которых делает работу, второй смотрит за первым,
и рестартует его, если надо.
Отдельно можно анализировать снапшоты данных метрик и скармливать
их в BDD, что бы строить деревья принятия решений: нормальная ситуация,
или требуется загасить/перезапустить ноду, или же речь вообще идёт о
DDoS атаке и надо обороняться --- банить каких-то пиров, например.
FIXME: blocks-wip-inconsistency
Иногда показывает blocks.wip не равный 0, когда
блоки в действительности скачаны.