AI-система аналізу логів: детекція аномалій і алертинг

Логи збираються, але інциденти все одно спливають пізніше, ніж хотілося б. Ми розробляємо системи автоматичного аналізу логів під ключ: налаштовуємо детекцію аномалій і алертинг так, що час реакції на збої скорочується в рази. Опишіть задачу — повернемося з оцінкою та планом.
Часті запитання

Чому ручний аналіз логів пропускає аномалії

Ручний аналіз логів упирається в пропускну здатність людини: черговий переглядає потік подій очима й утримує в голові кілька останніх рядків, а не зв'язки між сервісами за минулу годину.

Частина пропущених інцидентів — не неуважність, а фізика: порівняти поведінку сервісу за дві різні години без опори на метрики нічим.

Аномалія майже ніколи не виглядає як один червоний рядок. Це зростання частки помилок на конкретному маршруті відносно базової лінії, сплеск таймаутів в одного споживача або серія повторів запиту.

У загальному потоці таких записів одиниці, а штатних — на порядки більше, тому рідкісний сигнал тоне в шумі. Ручний розбір подій по одному сервісу до причини не доходить: вона живе в сусідньому — у черзі, в пулі з'єднань, у відповіді зовнішньої системи.

Час до виявлення в такій схемі визначається не моніторингом, а першою скаргою користувача. Поки інцидент не дійшов до підтримки, він накопичується.

Галузеві дані, які збирає DORA, показують: команди, що знаходять збої за сигналами системи, а не за зверненнями, відновлюються в рази швидше й рідше повертаються до тієї самої відмови повторно.

Розбираємо, як це закривається: який потік подій вважати нормою, де проходить межа шуму і як алертинг починає спрацьовувати раніше за користувача, не перетворюючись на потік хибних спрацьовувань.

Що дає автоматичний аналіз логів замість ручних перевірок

Ручний розбір масштабується лінійно: що більше сервісів і джерел, то більше вибіркових перевірок. Інженер дивиться те, що встигає, а аномалія живе між змінами — від першого збою до виявлення проходять години. Суцільне спостереження замість вибірки переводить швидкість виявлення в хвилини.

Модель будує базову лінію поведінки окремо для кожного джерела й порівнює з нею поточний потік, враховуючи добові та тижневі піки.

Пороги калібруються за вже розібраними інцидентами, тому частка хибних спрацьовувань падає до одиниць відсотків — черговий перестає ставитися до оповіщень як до шуму.

Elasticsearch залишається сховищем логів: аналітичний шар читає той самий потік, дублювального збору не з'являється.

Покриття джерел зростає без переписування правил. Новий сервіс підключається як окремий потік, профіль поведінки для нього будується за накопиченою історією — у спостереження потрапляють і ті системи, до яких ручні перевірки не доходили.

Навантаження на чергових знижується завдяки двом речам: рутина йде в автоматику, а сигнали надходять згрупованими за інцидентом, а не окремими рядками. Черговий отримує контекст — що змінилося і які вузли зачеплені — і розбирає причину замість ручного складання картини.

Режими детекції аномалій: порівняння підходів

Режим детекції задає головний компроміс: скільки реальних збоїв система пропустить і скільки хибних спрацьовувань віддасть черговому. Універсального варіанта немає — вибір залежить від стабільності формату логів, наявності розмітки минулих інцидентів і ціни пропуску. Нижче — підходи, між якими обирають на старті.

На практиці режими комбінують: порогові правила закривають критичні метрики, базові лінії — сезонні сплески, кластеризація повідомлень — текстовий шум. Гібридна схема детекції зводить сигнали всіх шарів в один потік і помітно знижує частку хибних спрацьовувань.

Варіант Коли підходить Обмеження
Порогові правила Метрика зі зрозумілою нормою: черги, помилки, затримки Ручне налаштування під кожен сервіс, ламається на сезонних піках
Статистичні базові лінії Рівний потік і повторюваний профіль навантаження Потрібна історія для навчання, повільно реагує на різку зміну поведінки
Кластеризація повідомлень Слабоструктурований текст, багато шумних шаблонів Потребує нормалізації, кластери втрачають сенс при зміні формату запису
Моделі без учителя Немає розмітки минулих інцидентів Показують аномалію без причини, потрібен розбір аналітиком
Гібридна схема детекції Різнорідний парк сервісів і різні типи логів Довше впровадження, потрібне налаштування зв'язків між шарами

Порядок такий: спершу оцінюємо передбачуваність потоку й якість розмітки, потім збираємо мінімальний набір шарів — і лише після перевірки на історичних даних розширюємо схему.

Так система виходить у роботу з керованою чутливістю, а не з потоком спрацьовувань, який черговий починає ігнорувати.

Як ми впроваджуємо систему: етапи інженерних робіт

Роботи йдуть ітераціями: спочатку збираємо повну картину джерел і потоків, потім будуємо конвеєр обробки і тільки після цього вмикаємо оповіщення. Такий порядок потрібен, щоб правила народжувалися з реальних записів, а не з припущень про те, як влаштована система.

  1. Аудит джерел. Обходимо застосунки, сервіси, бази, черги та мережеве обладнання: фіксуємо формати записів, частоту появи, добовий обсяг, поля та власників доступів.
  2. Схема потоків. Описуємо шлях події від агента збору через буфер і транспорт до сховища, позначаємо ділянки, де можливі втрати й затримки.
  3. Нормалізація подій. Приводимо різнорідні записи до єдиної схеми — час, джерело, рівень, ідентифікатор запиту, текст. Дублі та службовий шум відсікаються тут, щоб за одними й тими самими полями працювали і пошук, і правила.
  4. Налаштування правил і моделей. Задаємо пороги, зв'язки між подіями різних сервісів і базові профілі нормальної поведінки для кожного вузла.
  5. Перевірка на історичних даних. Проганяємо правила по накопичених логах і звіряємо результат із тим, що чергові пам'ятають як реальні збої: так налаштовується чутливість і прибираються хибні спрацьовування.
  6. Навчання чергових. Розбираємо розмітку оповіщень, пріоритети, порядок ескалації та дії на випадок, якщо сам аналізатор недоступний.
  7. Передача та супровід. Віддаємо документацію, доступи й регламент зміни правил, щоб команда могла розвивати систему без нас.

Що передаємо замовнику за підсумками проєкту

Проєкт з аналізу логів закінчується не показом панелі моніторингу, а набором артефактів, з якими ваша команда працює далі без нас. Кожен пункт — це файл, схема або документ, а не опис «як задумувалося».

Передаємо у ваш контур і розбираємо на дзвінку: де правило живе, що станеться при відмові джерела, як розширити під новий сервіс.

  • Конфігурації збирачів і розбирачів під кожен формат джерела, включно з багаторядковими записами та нестандартними рядками. Нове джерело підключається копіюванням профілю й правкою полів, без доопрацювання коду.
  • Схема потоків від джерела до оповіщення, з точками буферизації та поведінкою при недоступності приймача. За нею видно, де подія може загубитися і чим це відстежується.
  • Правила та пороги з обґрунтуванням: для кожного вказано, на яких історичних даних він перевірявся і яку частку хибних спрацьовувань дає. Поріг змінюється в конфігурації, а не в коді.
  • Політики доступу до подій: розмежування за ролями, маскування чутливих полів на вході до сховища, журнал звернень. Аудит доступу не потребує окремого вивантаження.
  • Регламент чергування: рівні критичності, порядок ескалації, орієнтири за часом реакції, дії при сплеску однотипних спрацьовувань.
  • Інструкція з підключення нових джерел — покроковий список перевірок, що події дійшли й коректно розібралися.

Кейс: як скоротили час реакції на інциденти

Клієнт — продуктовий сервіс із розподіленою системою: десятки застосунків, балансувальник, брокер черг, база та події оркестратора. Логи з усіх контурів збиралися в одне сховище, але розбирали їх руками й лише після звернень користувачів — тобто постфактум.

До: про інцидент дізнавалися з підтримки

Алертинг стояв на порогових правилах за окремими метриками: або не спрацьовувало нічого, або надходили десятки повідомлень, з яких корисними були одиниці. Частину правил чергові вимкнули, піднявши пороги, — шум пішов разом із чутливістю. Середній час від першої аномалії в логах до реакції інженера — близько години.

Дорожче за все обходилася не втрата доступності, а повільна деградація: зростання часу відповіді бази та витік з'єднань накопичувалися годинами, і користувачі помічали це раніше за моніторинг.

Що змінили і що отримали

Підключили дев'ять джерел: логи застосунків, балансувальника, брокера, бази, службові журнали та події кластера. Розбір і зберігання побудували на Grafana Loki і моделі, яка будує профіль нормальної поведінки за шаблонами повідомлень і частотами.

Сигналом стає відхилення від профілю, а не перевищення статичного порогу, тому алерт надходить із готовим контекстом: сервіс, шаблон, вікно, у скільки разів зросла частота.

Час виявлення скоротився з 55 хвилин до 4 — приблизно в дванадцять разів. Частка хибних спрацьовувань упала з 78% до 15%: черговий перестав розбирати шум і повернув чутливість правил.

Клас відмов «поступова деградація відповідей бази та витік з'єднань» перестав доходити до користувачів — аномалію ловлять на зростанні затримок, до перших масових помилок.

Що робити, якщо логи вже збираються, але не розбираються?

Збір логів і їхній розбір — різні задачі, і перша часто закрита задовго до другої. Агенти пишуть у сховище, ротацію налаштовано, обсяг зростає, але всередині плаский текст, за яким не можна ні згрупувати записи, ні побудувати метрику. Нижче — що добудовується поверх наявного сховища, а що впирається в джерела.

Поверх сховища нарощується шар розбору: правила за шаблонами, вилучення полів — рівень важливості, компонент, ідентифікатор запиту, код відповіді, тривалість операції — і приведення до загальної схеми подій.

Збір при цьому не переробляється, а історію проганяють тим самим розбором ретроспективно: відразу видно, де аномалія вже була і як давно вона повторюється.

На рівні джерел переробляти доводиться там, де повідомлення не несе контексту: «помилка з'єднання» без вузла, запиту та наскрізного ідентифікатора дає формально заповнені, але марні поля.

Лікується правкою логування в самих сервісах — єдиний формат запису, обов'язковий набір полів, ідентифікатор трасування, розділення рівня важливості й тексту. Обсяг правки невеликий, але саме вона визначає точність алертингу.

Окремо важливий порядок повідомлень: якщо подія склеєна з кількох рядків або пишеться асинхронно, під час розбору губиться послідовність, і сплеск помилок після оновлення версії не збирається в один інцидент.

Групування за ідентифікатором запиту та вікном часу закриває це частково, надійніше — писати подію одним записом.

Роботи йдуть так: інвентаризація форматів за джерелами, розбір і структурування подій поверх сховища, точкові правки логування, потім правила детекції та алертинг.

Показник результату — частка подій, розібраних у поля: коли вона вища за 95%, алерти будуються на структурі, а не на пошуку підрядків, і хибних спрацьовувань стає в рази менше.

Технічні сумніви перед початком робіт

Сумніви на цьому етапі зазвичай інженерні: як підключити чергове джерело, не переписуючи обробку, і що буде, якщо потік подій зросте в рази. Нижче — прямі відповіді на те, що найчастіше запитують до старту робіт.

Як підключається нове джерело?

Адаптером на вході: розбираємо формат, приводимо поля до єдиної схеми, відсікаємо дублі, прив'язуємо записи до сервісу та власника. Далі це конфігурація, а не переробка моделі.

Перед увімкненням у бойовий потік проганяємо накопичену історію і дивимося, які оповіщення дала б система — порівняння з поточною картиною показує ціну помилки заздалегідь.

Як боретеся з хибними спрацьовуваннями?

Пороги налаштовуємо на історії, а не на око: правила відсікають відомий шум, модель ловить відхилення від звичного профілю сервісу. Повтори однієї події групуються в одне оповіщення, вікно придушення не дає черговому отримати лавину. Окремо рахуємо частку хибних від усіх оповіщень — за нею видно, чи можна довіряти стрічці.

Що з чутливими даними?

Маскування йде на стороні джерела, до відправлення: персональні та платіжні поля в розбір не потрапляють. Дані залишаються у вашому контурі, доступ розмежований за ролями, звернення журналюються. Для розбору інциденту вивантаження сирих подій назовні не потрібне.

Чи витримає система різке зростання обсягу?

Прийом масштабується горизонтально, сплеск гаситься буфером. Пріоритет у критичних сервісів: другорядні джерела проріджуються, про деградацію система повідомляє явно, а не мовчки втрачає події. Перевіряємо це навантажувальним прогоном до запуску, а не в момент інциденту.

Обговоримо задачу і повернемося з оцінкою та планом

Щоб оцінка строків була точною, а не «на око», нам потрібен контекст щодо поточного ландшафту логування. Розкажіть, звідки збираються записи — застосунки, балансувальники, бази, черги, — які формати використовуються, скільки джерел задіяно і який добовий обсяг проходить. Окремо корисно зрозуміти, як зараз влаштовані повідомлення та куди вони йдуть.

Опишіть характер збоїв, які потрібно ловити: рідкісні сплески помилок, поступове зростання затримок, аномалії за окремим користувачем або вузлом. Чим конкретніші приклади минулих інцидентів, тим точніше ми підберемо методи детекції та пороги спрацьовування.

Якщо є історичні логи та розмітка «норма / аномалія» хоча б за частину періоду — це помітно скорочує налаштування моделі та знижує частку хибних спрацьовувань.

У відповідь ми надсилаємо не комерційну пропозицію на один рядок, а план етапів із контрольними точками:

  • схему збору, зберігання та ротації логів із прив'язкою до вашої інфраструктури;
  • перелік джерел і форматів, які потраплять в аналіз на першому кроці;
  • склад моделі детекції та правила алертингу: пороги, вікна, пріоритети;
  • календар робіт: пілот на одному сервісі, розширення на решту, виведення в експлуатацію;
  • порядок інтеграції із системами оповіщень і графіками чергувань;
  • критерії приймання — частка хибних спрацьовувань і час від події до алерту;
  • список доступів, стендів і даних, які потрібні від вашої сторони.

Опишіть задачу у вільній формі — повернемося з оцінкою строків, планом етапів і зонами відповідальності.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142