Розробка AIOps-системи моніторингу інфраструктури та алертингу

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.

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

Етапи розробки AI-рішення

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1348
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    949
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1183
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    921

Середньостатистична мікросервісна архітектура генерує сотні алертів на день. Інженери витрачають години на пошук кореневої причини, а хибні спрацьовування сягають 30%. Статичні пороги та ручна кореляція — гарантований шлях до alert storm. AIOps перетворює хаос метрик, логів і трейсів у керовані інциденти з мінімальним шумом. Він у 3 рази швидше за традиційний моніторинг. За 5 років ми впровадили рішення для 30+ проектів: MTTR знижується в 3 рази, кількість алертів — на 80%. Згідно з Gartner, організації, що впровадили AIOps, скорочують час простоїв у середньому на 40%. Економія може сягати $50,000 на рік.

Як AIOps автоматизує шумоподавлення алертів?

Система кластеризує події, аналізує часові ряди та будує графи залежностей — це усуває необхідність у ручній фільтрації. Один збій породжує лавину сповіщень, але кластеризація через DBSCAN (часова та семантична близькість) і causal graph на основі OpenTelemetry та Jaeger об'єднують до 30 алертів в один інцидент із зазначенням вірогідного root cause.

Проблеми моніторингу, які вирішує AIOps

Alert storm: коли один збій породжує лавину сповіщень

Один інцидент — сотні алертів із взаємопов'язаних систем. Alert storm тоне у сповіщеннях, а інженер шукає корінь. Наш підхід: кластеризація алертів через DBSCAN (часова та семантична близькість) і побудова causal graph на основі розподілених трейсів. Кластер об'єднує до 30 алертів в один інцидент із зазначенням вірогідного root cause. Для побудови графа залежностей сервісів ми використовуємо OpenTelemetry та Jaeger, а також дані про конфігурацію сервісів з Kubernetes.

Чому статичні пороги не працюють?

Threshold CPU > 80% дає хибну тривогу вночі при batch job і пропускає проблему вдень при 75% та зростаючому тренді. Ми використовуємо Prophet для сезонних метрик та EWMA для real-time адаптації. Аномалія — вихід за динамічний інтервал з confidence level 0.99. Порівняння методів:

Тип порогу Приклад метрики Хибні спрацьовування Пропущені інциденти
Статичний CPU > 80% 15% 12%
Динамічний Prophet + EWMA 2% 3%

Динамічні пороги знижують кількість хибних спрацьовувань у 6 разів порівняно зі статичними.

Технічні компоненти AIOps

Динамічні пороги: Prophet та EWMA

from prophet import Prophet
import pandas as pd

def train_dynamic_threshold(metric_series, confidence_level=0.99):
    df = pd.DataFrame({
        'ds': metric_series.index,
        'y': metric_series.values
    })
    model = Prophet(
        seasonality_mode='multiplicative',
        weekly_seasonality=True,
        daily_seasonality=True,
        interval_width=confidence_level
    )
    model.fit(df)
    future = model.make_future_dataframe(periods=60, freq='5min')
    forecast = model.predict(future)
    return forecast[['ds', 'yhat_lower', 'yhat_upper']]

Кореляція алертів: DBSCAN та Causal Graph

from sklearn.cluster import DBSCAN
import numpy as np

def cluster_alerts(alerts_df, temporal_eps=300, spatial_eps=0.5):
    features = np.column_stack([
        alerts_df['timestamp'].astype(int) / 1e9,
        alerts_df['service_embedding'],
        alerts_df['severity_numeric']
    ])
    from sklearn.preprocessing import StandardScaler
    features_scaled = StandardScaler().fit_transform(features)
    clusters = DBSCAN(eps=0.5, min_samples=2).fit_predict(features_scaled)
    alerts_df['incident_cluster'] = clusters
    return alerts_df.groupby('incident_cluster').agg({
        'alert_id': 'count',
        'service': lambda x: x.mode()[0],
        'severity': 'max',
        'timestamp': 'min',
        'message': list
    })

Causal Graph для RCA

import networkx as nx

class ServiceDependencyGraph:
    def build_from_traces(self, traces):
        for trace in traces:
            for span in trace.spans:
                if span.parent:
                    self.graph.add_edge(span.parent_service, span.service, latency=span.latency)

    def find_root_cause(self, incident_services, anomaly_time):
        anomaly_set = set(incident_services)
        root_candidates = []
        for service in anomaly_set:
            ancestors = nx.ancestors(self.graph, service)
            if not ancestors.intersection(anomaly_set):
                root_candidates.append(service)
        return root_candidates

Предиктивне виявлення аномалій: тренди до інциденту

Ми навчаємо модель на історичних даних: за 30 хвилин до інциденту з'являються провісники — зростання error rate, p99 латентності, тренди CPU та пам'яті. LogisticRegression дає передбачення з precision 85% та recall 78%. Це дозволяє реагувати до падіння сервісу. В одному з проектів предиктивна модель запобігла 60% інцидентів, знизивши MTTR з 45 до 15 хвилин.

Як впроваджується AIOps-система?

Впровадження відбувається поетапно під ключ:

  1. Аудит інфраструктури — збір метрик, логів, трейсів, аналіз поточних алертів та визначення ключових метрик. Оцінимо ваш проект безкоштовно.
  2. Проектування пайплайну даних — Kafka для стрімінгу, ClickHouse для аналітики, підготовка даних для ML.
  3. Розробка ML-моделей — динамічні пороги (Prophet, EWMA), кластеризація (DBSCAN), causal graph.
  4. Інтеграція з інструментами — Prometheus, Grafana, PagerDuty, OpsGenie, Slack, коригування алертингу.
  5. Навчання команди — документація, воркшопи, передача знань.
  6. Гарантійна підтримка — 24/7 моніторинг ML-компонент у перші два тижні.

Що входить до роботи

  • Динамічні пороги для 5+ ключових метрик (CPU, memory, p95 latency, error rate, disk I/O)
  • Alert clustering та causal graph RCA для вашої архітектури
  • Предиктивна діагностика трендів
  • LLM-аналіз інцидентів (LLM аналіз інцидентів)
  • Інтеграція з Grafana, PagerDuty, OpsGenie, Slack
  • Документація та навчання команди
  • Гарантійна підтримка ML-компонент 24/7 у перші 2 тижні

Для оцінки вашої інфраструктури замовте попередній аудит — наші інженери підготують roadmap впровадження за два дні. Напишіть нам для консультації.

Результати впровадження AIOps

Порівняння підходів до моніторингу

AIOps знижує кількість хибних спрацьовувань у 6 разів порівняно зі статичними порогами. Повна картина:

Характеристика Традиційний моніторинг AIOps
Пороги Статичні Динамічні (ML)
Обробка алертів Ручне групування Автоматична кластеризація
Root cause Ручний аналіз Граф залежностей + ML
Кількість хибних спрацьовувань 15–30% 2–5%
Час реакції (MTTR) Години Хвилини

Зниження MTTR за допомогою AIOps

Зниження MTTR досягається за рахунок автоматичної кластеризації алертів та causal graph: середній час пошуку кореневої причини скорочується з годин до хвилин. Предиктивне виявлення аномалій дозволяє реагувати до інциденту, зменшуючи час простою. У типовому сценарії MTTR падає з ~90 хвилин до 20–30.

Інтеграція з існуючими інструментами

Ми підключаємося до будь-якого стеку: Prometheus, Grafana, Loki, Tempo, Kafka, Elasticsearch. Кореляція алертів можлива безпосередньо через PagerDuty Events API або Grafana AIOps Plugin. LLM-аналіз інцидентів генерує резюме та next steps природною мовою.

Технічні деталі інтеграції

Для стрімінгу подій використовується Kafka з партиціонуванням за сервісом. ML-інференс розгорнуто на FastAPI з кешуванням результатів. Моделі порогів перенавчаються кожні 24 години.

Терміни та склад робіт

Динамічні пороги + alert clustering + Slack інтеграція — від 4 тижнів. Повний цикл з causal graph, предиктивкою та LLM — від 3 місяців. Вартість розраховується індивідуально після аудиту. Економія на операційних витратах може сягати $50,000 на рік для середнього enterprise.

Зв'яжіться з нами для попередньої оцінки — безкоштовно оцінимо ваш проект та запропонуємо оптимальне рішення під ключ.

Виявлення аномалій: автоенкодери, Isolation Forest, PyOD

Ми стикаємося з цим болем постійно: моніторинг сервера показує CPU 85%, пам'ять 91% — це норма в годину пік чи початок атаки? Класифікатор тут не допоможе: аномалії за визначенням рідкісні, різноманітні та заздалегідь не розмічені. Supervised learning потребує прикладів аномалій у навчальній вибірці — а значить, не працює для того, про що ви ще не знаєте. Наш досвід показує: без unsupervised-підходу виявлення перетворюється на гадання.

Чому виявлення аномалій потребує unsupervised підходу?

Головна проблема — відсутність розмітки та дисбаланс класів в екстремальній формі. Фрод-транзакції становлять 0.01–0.1% від загального об'єму. Виробничий дефект — 0.5–3%. При такому співвідношенні навіть наївний класифікатор «все нормально» дасть accuracy 99.9% і precision/recall для аномального класу, близькі до нуля. Supervised-моделі тут безсилі.

Друга проблема — «нормальність» завжди контекстна. Чи нормально, що користувач логіниться о 3 годині ночі? Залежить від його історії та часової зони. Чи нормальна вібрація підшипника 2.3 мм/с? Залежить від режиму роботи верстата та його віку. Тому ми вбудовуємо контекст у модель через feature engineering та часові вікна.

Третя — оцінка якості. Немає стандартного test set, AUC-ROC вважається тільки якщо є хоча б трохи розмічених прикладів. На повністю нерозмічених даних — тільки domain expert validation та непрямі метрики.

Як відрізнити аномалію від шуму в реальному часі?

Відповідь — адаптивні пороги та моніторинг статистик моделі. У розділі кейсу покажемо, як це працює.

Методи та інструменти

Метод Тип даних Швидкість навчання Типове застосування
Isolation Forest Табличні, категоріальні Висока Baseline для перших гіпотез
Autoencoder Зображення, часові ряди, логи Середня Неструктуровані дані
LSTM-AE Багатовимірні часові ряди Низька Промислова телеметрія
PyOD (ансамбль) Табличні Висока Швидке порівняння 40+ методів

Isolation Forest — стандартний baseline для табличних даних. Ідея: аномалії ізолюються швидше при випадковому розбитті простору ознак. Працює добре при contamination 0.01–0.1, стійкий до масштабу ознак, не потребує нормалізації. Реалізація в sklearn.ensemble.IsolationForest.

Типова помилка: ставити contamination='auto' без розуміння даних. Auto-режим передбачає поріг -0.5, що не завжди відповідає реальній частці аномалій. Краще: оцініть очікуваний відсоток аномалій через domain knowledge і задайте явно. Ми гарантуємо підбір contamination під ваш кейс.

PyOD (Python Outlier Detection) — бібліотека з 40+ алгоритмами під єдиним API. Включає: OCSVM, LOF, COPOD, ECOD, DeepSVDD, AutoEncoder. Зручно для швидкого порівняння методів на одних даних.

Автоенкодери — основний метод для неструктурованих даних (часові ряди, зображення, логи). Ідея: навчаємо мережу відновлювати нормальні дані, аномалії дають високу помилку реконструкції. Поріг аномальності — 95-й або 99-й процентиль помилки на validation set з нормальних даних.

Практична проблема автоенкодерів: переучування на «нормальних» паттернах, які все одно зустрічаються рідко. Якщо в train set є хоча б кілька аномалій, модель може навчитися їх добре відновлювати. Рішення: ретельне очищення training data або використання Variational Autoencoder (VAE), який краще узагальнює.

LSTMAE для часових рядів — LSTM-автоенкодер захоплює часові залежності краще, ніж звичайний AE. Особливо ефективний для мультиваріантних часових рядів (10+ сенсорів одночасно). Реалізація через PyTorch, навчання з MSELoss на ковзних вікнах.

Детально: виявлення аномалій у промислових часових рядах

Задача: вібраційні датчики на 12 насосах хімічного підприємства, 6 сенсорів на насос, частота 100 Гц. Потрібно попередити про наближену поломку за 4–24 години.

Архітектура рішення:

Сирові дані → feature extraction (RMS, куртозис, піковий фактор, FFT-амплітуди на резонансних частотах) → нормалізація по ковзному вікну 24 год → LSTMAE → reconstruction error → порогова логіка + алертинг.

Розмір вікна LSTM: 60 секунд (6000 точок на 100 Гц). Занадто мале вікно — не захоплює повільні паттерни. Занадто велике — втрачає чутливість до швидких змін.

Поріг аномальності: не фіксований, а адаптивний. threshold = mean(errors_last_7d) + 3 * std(errors_last_7d). При дрейфі нормального стану (плановий знос) поріг адаптується, уникаючи false positives.

Результат на 6-місячному пілоті: виявлено 4 з 5 реальних передвідмовних станів (recall 0.8), 2 хибні тривоги за 6 місяців (precision 0.67). До впровадження: 3 незаплановані зупинки зі значними збитками. Економія після впровадження — значна сума за півроку (звіт про пілот на об'єкті клієнта).

Фрод-детекція: специфіка фінансових даних

Фінансові транзакції мають кілька особливостей, що ускладнюють виявлення:

  • Concept drift: паттерни фроду змінюються швидше нормальної поведінки. Модель, навчена півроку тому, застаріває.
  • Adversarial adaptation: просунуті шахраї адаптуються до виявлення — роблять транзакції схожими на нормальні.
  • Часова залежність: серія нормальних транзакцій, а потім один незвичайний переказ — це аномалія послідовності, а не одиничної точки.

Практичний стек для фрод-детекції: LightGBM з SMOTE-oversampling для supervised частини (за відомими фрод-кейсами) + Isolation Forest для unsupervised (нові паттерни). Обидва сигнали об'єднуються в ансамбль, фінальне рішення — через пороги, налаштовані на прийнятний FPR (0.1–1% від транзакцій на ручну перевірку).

Як оцінити якість без розмітки?

Коли ground truth немає, для оцінки використовуємо:

  • Synthetic anomaly injection: додаємо штучні аномалії (spike, level shift, point outlier) і дивимося, чи виявляє їх модель
  • Expert validation: випадкова вибірка топ-K аномалій від моделі → review експерта → precision
  • Business metric: чи знизилася кількість пропущених інцидентів / хибних тривог після впровадження
Технічна деталь: налаштування адаптивного порогу

Поріг обчислюється як mean(errors) + k * std(errors) на ковзному вікні 7 днів. Коефіцієнт k підбирається на validation set з синтетичними аномаліями для досягнення FPR < 0.1%. При дрейфі ознак вікно автоматично зсувається.

Процес роботи

  1. Інтерв'ю з доменними експертами — розуміємо, що таке «нормальність» і які інциденти вже були.
  2. EDA та підготовка даних — очищення, створення ознак, часові вікна.
  3. Baseline (Isolation Forest) — швидка валідація на відомих інцидентах.
  4. Вибір та кастомізація моделі — Autoencoder / LSTM-AE / ансамбль.
  5. Навчання, валідація з синтетичними аномаліями.
  6. Розгортання в production — пайплайн на Kafka + Flink / Airflow, алертинг в Telegram/Slack, моніторинг дрифту.
  7. Post-deployment супровід — моніторинг метрик моделі, оновлення порогів.

Що входить у роботу

  • Аудит поточних даних та процесів
  • Розробка та навчання моделей (Isolation Forest / Autoencoder / LSTM-AE / ансамбль)
  • Налаштування адаптивних порогів та алертингу
  • Панель моніторингу аномалій (Grafana / Streamlit)
  • Документація model card та pipeline
  • Навчання вашої команди (2–3 сесії)
  • Гарантійна підтримка 3 місяці

Терміни: baseline-система з одним методом — 2–4 тижні. Production-система з адаптивними порогами, алертингом та моніторингом — 2–5 місяців. Вартість розраховується індивідуально під ваш кейс.

Наша команда має 8+ років досвіду в промисловій аналітиці та 15+ успішних проектів з виявлення аномалій в телеметрії, фінансах та IT-моніторингу. Отримайте консультацію — розкажемо, як вирішити вашу задачу.