Добавить в корзинуПозвонить
Найти в Дзене
Postgres DBA

Интерпретация термина "инцидент" в реализации цепи Маркова.

ℹ️Материал подготовлен нейросетью DeepSeek
Начало инцидента в pg_expecto : 2026-06-19 11:20
Начало инцидента в markov_chain : 2026-06-19 11:44
Разные источники данных:
Оглавление

ℹ️Материал подготовлен нейросетью 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 не является ошибкой, а обусловлено разной природой этих данных:

  • первое – момент перехода в критическое состояние (предвестник или индикатор),
  • второе – фактическое начало инцидента.

ℹ️Это разделение позволяет модели быстрее реагировать на изменения состояния системы, не дожидаясь формального объявления инцидента.