ℹ️Материал подготовлен нейросетью DeepSeek
Входные данные:
Начало инцидента в pg_expecto : 2026-06-19 11:20
expecto_db=> select * from performance_incident order by 1 desc limit 1;
id | priority | start_timepoint | finish_timepoint
-----+----------+------------------------+------------------------
153 | 3 | 2026-06-19 11:20:00+03 | 2026-06-19 11:47:00+03
(1 row)
Начало инцидента в markov_chain : 2026-06-19 11:44
expecto_db=> select last_incident_time from markov_config
2026-06-19 11:44:09.445827+03
Ответ на вопрос: почему markov_config.last_incident_time не совпадает с performance_incident.start_timepoint?
Причина расхождения
Разные источники данных:
performance_incident – таблица, содержащая реальные инциденты производительности , с полями start_timepoint и finish_timepoint. Она заполняется отдельным механизмом .
markov_config.last_incident_time обновляется триггером на вставку в transition_log:
IF EXISTS (SELECT 1 FROM critical_states WHERE state_id = NEW.to_state) THEN
UPDATE markov_config SET last_incident_time = NEW.ts;
END IF;
То есть это момент перехода в состояние, которое в данный момент считается критическим (из таблицы critical_states).
Критические состояния – не сами инциденты:
critical_states – это состояния цепи Маркова, которые по эмпирическим данным предшествуют инцидентам (или имеют высокую корреляцию с их наступлением). Они обновляются автоматически на основе анализа performance_incident и transition_log (функция refresh_critical_states).
Переход в такое состояние может произойти до фактического начала инцидента (например, за несколько минут) или даже после его начала, если инцидент уже идёт, а состояние ещё не успело измениться. В любом случае, временная метка перехода – это момент изменения состояния, а не момент начала инцидента.
Пример из данных:
Последний инцидент в performance_incident начался в 11:20 и завершился в 11:47.
last_incident_time в markov_config равен 11:44:09 – это время, когда произошёл переход в одно из критических состояний.
Это может означать, что:
1️⃣Инцидент уже шёл (начался в 11:20), и в 11:44 система перешла в состояние, которое помечено как критическое (например, ухудшение метрик).
2️⃣Или это состояние возникло незадолго до окончания инцидента, но время перехода не равно времени начала инцидента.
ℹ️Использование last_incident_time:
Это поле используется исключительно для адаптивного забывания: чем дольше прошло с последнего «критического перехода», тем меньше alpha (забывание замедляется). Оно не претендует на точное отражение времени начала инцидента, а служит индикатором недавней аварийной активности.
Можно ли синхронизировать эти времена?
Если требуется, чтобы last_incident_time соответствовал началу инцидента, можно модифицировать триггер или добавить отдельный механизм обновления при вставке в performance_incident.
❗Однако это не рекомендуется, потому что:
- ℹ️Цепь Маркова оперирует состояниями системы, а не самими инцидентами. Использование времени перехода в критическое состояние более релевантно для адаптации модели к текущей динамике метрик.
- ℹ️Привязка к началу инцидента может внести запаздывание (инцидент может начаться позже перехода) и сделать забывание менее чувствительным к предвестникам.
☑️Таким образом, несовпадение – это ожидаемое и корректное поведение системы, отражающее разделение уровней абстракции: состояния системы (цепь Маркова) и события производительности (инциденты).
Заключение
Реализация цепи Маркова в Expecto продумана и масштабируема.
Она включает:
- ☑️Адаптивное обучение с забыванием, учитывающее недавние инциденты.
- ☑️Динамическое определение аварийных состояний на основе эмпирических данных.
- ☑️Полный цикл оценки качества прогнозов с возможностью мониторинга и настройки.
ℹ️Расхождение last_incident_time и performance_incident.start_timepoint не является ошибкой, а обусловлено разной природой этих данных:
- первое – момент перехода в критическое состояние (предвестник или индикатор),
- второе – фактическое начало инцидента.
ℹ️Это разделение позволяет модели быстрее реагировать на изменения состояния системы, не дожидаясь формального объявления инцидента.