Я работаю над инструментом мониторинга SLA, для которого я использовал kafka-streams для обработки потоков в реальном времени и источник данных графита в качестве хранилища временных рядов. Все работает, как ожидалось, за исключением позднего сценария.
Например: у меня есть несколько компонентов, обрабатывающих входящие данные. Каждый компонент обрабатывает данные и отправляет свое начальное и конечное событие в мою систему мониторинга.
- Пример данных обрабатывается Компонентом 1, и он отправляет 2 события мониторинга в мою систему и отправляет данные в Компонент 2.
- образец данных обрабатывается Компонентом 2, и он отправляет 2 события мониторинга в мою систему и отправляет данные в Компонент 3.
- Пример данных обрабатывается Компонентом 3, и он отправляет 2 события мониторинга в мою систему.
Если общее время, затраченное всеми компонентами на обработку данных, превышает заданное время, SLA нарушается.
SLA составляет 10 секунд (например).
Фактическое время, необходимое для обработки данных, составляет 8 секунд (что означает SLA MET), но по какой-то причине последнее событие не пришло вовремя в kafka-потоки (возможно, застряло в теме kafka). Оно пришло через 15 секунд. Поскольку срок действия этого окна уже истек, данные помечаются как нарушение SLA, и счетчик SLA-BREACH увеличивается в графите.
по мере того, как позднее событие поступает в потоки кафки, оно попадает в предыдущее окно, SLA пересчитывается и помечается как метрики SLA, а метрики SLA-MET увеличиваются в графите.
Теперь проблема в том, как уменьшить количество SLA-BREACH одновременно в графите?