ИИ-агент для разбора алертов: как внедрить AIOps без автопочинки

ИИ-агент для разбора алертов
AIOps
HolmesGPT
ИИ для DevOps
автоматический разбор инцидентов
Alertmanager и ИИ
SRE-агент
ИИ-агент для разбора алертов: как внедрить AIOps без автопочинки

ИИ-агент для разбора алертов — это программа на основе языковой модели, которая после срабатывания мониторинга сама читает метрики, логи и состояние кластера и через несколько минут кладёт в рабочий чат гипотезу: что случилось, почему и что проверить. В опыте команды, которая подключила открытый агент HolmesGPT к шести кластерам Kubernetes, разбор занимал от минуты до 2–3 минут по медиане, стоил от нескольких рублей до 30 центов, а счёт за месяц составлял единицы долларов на проект. Главное условие безопасного внедрения — права только на чтение, жёсткий фильтр алертов и проверка логов на секреты до подключения внешней модели.

Материал подготовлен AIrassvet 14 октября 2026 года по статье на Хабре «AIOps: наш опыт внедрения HolmesGPT на трёх проектах» (13 октября 2026 года), репозиторию HolmesGPT и документации Prometheus Alertmanager, Kubernetes и OpenRouter. Он адресован ИТ-директорам, руководителям DevOps- и SRE-команд и владельцам цифровых продуктов, которые думают, стоит ли отдавать первичный разбор инцидентов ИИ. Мы не тестировали HolmesGPT сами: все цифры принадлежат авторам исходного кейса и приводятся с их оговорками. Статья не про автоматическое исправление сбоев и не про выбор системы мониторинга. AIrassvet не аффилирован с авторами кейса и разработчиками упомянутых инструментов; раздел в конце статьи описывает услуги издателя.

Содержание

Кратко

  1. Что делает агент: получает алерт, сам ходит в Kubernetes, метрики и логи и пишет в чат версию причины с двумя-тремя шагами проверки. Решение остаётся за дежурным.
  2. Сколько это длится: в кейсе — около четырёх минут от срабатывания алерта до отчёта по медиане, включая задержку группировки в Alertmanager; сам разбор — от минуты до 2–3 минут в зависимости от модели.
  3. Сколько стоит: около 10 центов за разбор на DeepSeek V4.1 Flash, 25–30 центов на Claude Sonnet 5; за месяц — единицы долларов на проект.
  4. Почему дёшево: до агента доходит малая часть алертов. В одном кластере за месяц из 645 доставок расследование запустилось 41 раз — остальное отсекли allowlist, дедупликация и лимиты.
  5. Главный риск: всё, что прочитал агент, уходит провайдеру модели. Логи нужно заранее проверить на пароли, токены и персональные данные.
  6. Что не измерено: точность гипотез (90–95 % — субъективная оценка авторов) и сокращение времени устранения инцидента.

Что такое AIOps и ИИ-агент для разбора алертов

AIOps (Artificial Intelligence for IT Operations) — это применение методов ИИ к эксплуатации ИТ-систем: к обработке алертов, поиску причин сбоев и анализу логов и метрик. Раньше под этим понимали в основном корреляцию событий и поиск аномалий. С появлением агентных языковых моделей появился новый класс инструментов — агенты, которые проводят первичное расследование так, как это делает инженер.

Алерт — это автоматическое оповещение системы мониторинга о том, что метрика пересекла порог. Правило алерта знает только своё выражение: например, «Pod перезапускается» или «очередь переполнена». Почему это произошло, оно не знает, а подсказка в описании правила написана один раз на все случаи. Поэтому дежурный начинает каждый инцидент одинаково: открывает дашборд, ищет Pod, листает логи, вспоминает, что выкатывали накануне.

ИИ-агент для разбора алертов забирает именно этот отрезок работы. Он работает в агентном цикле: модель получает вопрос, решает, какой инструмент вызвать, читает результат и вызывает следующий — до готового ответа. По данным кейса, на один алерт у HolmesGPT уходит два-три десятка вызовов инструментов, в запутанных случаях — под сотню.

HolmesGPT — открытый SRE-агент под лицензией Apache 2.0, созданный в Robusta.dev и входящий в CNCF Sandbox. По описанию авторов кейса, проект развивается при заметном участии Microsoft, в Sandbox входит с октября 2025 года, а за четыре месяца у него вышло тринадцать релизов. Из чего он состоит:

  • Toolsets — наборы инструментов: Kubernetes (ресурсы, логи Pod'ов, метрики), Prometheus, VictoriaLogs, ArgoCD, Grafana, сетевые проверки. Свой набор описывается YAML-файлом со скриптами, кодом на Python или подключается как MCP-сервер.
  • Skills — бывшие runbooks: файлы SKILL.md с именем и описанием. Агент видит описания и подгружает текст, когда он нужен. Здесь живёт знание о вашей системе.
  • Модель — любая, доступная через библиотеку litellm: от облачных API до локальной модели через Ollama или любого OpenAI-совместимого сервера.
  • Способы запуска — CLI, HTTP-сервер с Helm-чартом, оператор для Kubernetes (в статусе alpha) и Python SDK.

Как устроен путь алерта до гипотезы

В открытой версии HolmesGPT умеет только забирать активные алерты по команде, а принимать вебхуки от Alertmanager не умеет. Поэтому авторы кейса написали небольшой сервис-посредник holmes-alert-bridge на Go и открыли его код. Обычное оповещение уходит в чат как раньше, а копия — в посредник, который решает, запускать ли расследование.

Этап Что происходит Зачем это нужно
1. Alertmanager Отправляет алерт в чат и копию в посредник по маршруту с continue: true Разбор дополняет обычное оповещение, а не заменяет его
2. Ответ 200 Посредник сразу подтверждает получение Расследование идёт минуты, Alertmanager столько не ждёт
3. Allowlist Пропускает только алерты из списка; с пустым списком сервис не стартует Не платить за каждый «флапающий» алерт
4. Дедупликация Эпизод = имя алерта + namespace + время начала Повторные доставки не запускают новый разбор
5. Троттлинг По умолчанию не больше 2 расследований в час и 10 в сутки Потолок расходов, а не тюнинг производительности
6. Один воркер и таймаут 15 минут Разборы идут строго по очереди; по таймауту поток рвётся Агент не «дорешивает» задачу в фоне за ваш счёт
7. Доставка Разбор приходит в Slack, Telegram, почту или вебхук Под разбором — длительность, стоимость, модель и ссылка на полную запись

Документация Alertmanager подтверждает механику маршрутизации: параметр continue со значением true позволяет алерту продолжить сопоставление со следующими маршрутами, а group_wait задаёт ожидание перед первой отправкой для новой группы алертов (Prometheus Alertmanager, Configuration). Авторы кейса предупреждают: если в дереве маршрутов нет явного catch-all, continue может отнять доставку у алертов, которые раньше попадали в корневой получатель. В четырёх кластерах из шести они просто добавили посредника вторым webhook_configs к существующим получателям.

Как это выглядит на реальном эпизоде из кейса: метрика пересекла порог в 14:34:49, правило с for: 5m сработало в 14:39:49, через 10 секунд агент начал расследование, а разбор появился в чате в 14:44:07 — через 4 минуты 17 секунд после срабатывания. Из девяти с лишним минут от начала проблемы пять ушло на ожидание самого правила.

Сколько стоит и сколько длится разбор

Авторы приводят итоги за 30 дней до 6 октября 2026 года — после того как сменили модель и стабилизировали посредника.

Контур Модель Успешных разборов Длительность, медиана Цена разбора Счёт за месяц
Собственный кластер (1 кластер) DeepSeek V4.1 Flash через OpenRouter 22 из 22 2–3 минуты около 10 центов около $4
Проект в российском облаке (2 кластера) DeepSeek V4.1 Flash через ИИ-роутер Selectel 92,9 % 2–3 минуты несколько рублей меньше 1000 ₽
Зарубежный проект (3 кластера) Claude Sonnet 5 напрямую у провайдера 15 из 15 около минуты 25–30 центов $4–5

Источник: Хабр, 13.10.2026. Рублёвые суммы авторы называют оценкой: цены в конфигурации расходились с прайсом роутера. В собственном кластере оценку стоимости сверили с биллингом ключа — сошлось до цента.

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

  • дешёвое чтение кэша — по оценке авторов обратным счётом, из кэша читается около 90 % входных токенов;
  • большое окно контекста — при окне 200 тысяч токенов агент начинал сжимать историю примерно на 126 тысячах и заново запрашивал собранное; с окном 400 тысяч сжатия прекратились;
  • надёжный вызов инструментов — модель, которая иногда пишет вызов текстом или ломает JSON аргументов, обходится дороже любой «умной».

Главная экономия — не в модели, а в фильтре. В собственном кластере за первый месяц Alertmanager доставил посреднику 645 алертов, а до агента дошёл 41 — это примерно 6,4 % (Calculated: 41 / 645). В других контурах, по словам авторов, больше 90 % доставок расследования не запускают. Ещё один бесплатный фильтр — group_wait: в зарубежном проекте Alertmanager ждёт три минуты перед первой отправкой, и всё, что живёт минуту-две, гаснет раньше.

Как прикинуть бюджет для своей системы без выдуманных цифр:

  1. Выгрузите из Alertmanager число уникальных эпизодов за месяц по каждому правилу.
  2. Оставьте только правила, разбор которых реально помогает дежурному (это и будет allowlist).
  3. Умножьте число эпизодов на цену одного пробного разбора на вашей модели, измеренную по биллингу ключа.
  4. Сравните результат с лимитом посредника (например, 10 разборов в сутки) и поставьте месячный лимит на ключ провайдера.

Как выбрать модель: задача с известным ответом

Первый же пробный прогон на модели glm-5.2 в кейсе «отрезвил»: на один вопрос ушло больше миллиона входных токенов, а расследование обошлось в десятки рублей. Тогда авторы устроили отбор: восемь моделей, 52 прогона в три волны, включая задачу с заранее известным ответом.

Модель Прогонов Падений Задача с известным ответом Цена прогона (оценка сверху, без кэша)
qwen3.7-flash 6 1 0 из 1 ≈ 3 ₽
gpt-5.6-luna 4 0 0,5 из 2 ≈ 6 ₽
deepseek-v4-flash-0731 16 0 4 из 4 ≈ 16 ₽
minimax-m3 6 1 0 из 1 ≈ 24 ₽
gemini-3.7-flash 4 1 1 из 1 ≈ 41 ₽
longcat-2.0 4 0 0 из 2 ≈ 42 ₽
glm-5.2 6 0 2 из 2 ≈ 54 ₽
deepseek-v4-pro-0813 6 0 2 из 2 ≈ 77 ₽

Выборка маленькая — от 4 до 16 прогонов на модель, и авторы сами предупреждают, что по ней нельзя делать общий рейтинг. Но из неё следуют три вывода, применимые к любому агенту:

  • По одному прогону модели сравнивать нельзя. Разница в цене, которая на первом прогоне выглядела как порядок, на полусотне прогонов сжалась до нескольких раз: разброс внутри одной модели оказался больше разницы между моделями.
  • Дешёвая модель — не значит дешёвый разбор. Половина кандидатов провалила задачу с известным ответом одинаково: уверенно сообщила, что нужного компонента в кластере нет. Это был управляемый автоскейлер, которого действительно не видно среди Pod'ов.
  • Победитель отбора может не пережить продакшен. В одном контуре примерно каждый пятый разбор не укладывался в 15 минут, в другом модель зацикливалась на повторных вызовах инструментов. В середине сентября команда перешла на более дорогую по прайсу DeepSeek V4.1 Flash, и разборы стали заканчиваться. Чистого сравнения «до и после» нет: в те же дни меняли инструкции и посредника.

Задача с известным ответом — это и есть минимальный собственный бенчмарк. Подробнее о том, почему публичные рейтинги моделей быстро устаревают и как собрать свой набор проверок, — в нашей статье о выборе модели для бизнеса через свой бенчмарк.

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

При внешнем API всё, что прочитает агент, уходит провайдеру модели: строки логов, манифесты, события, метки метрик. Агент не отличает секрет от обычной строки. Это главный риск AIOps-агента, и закрывать его нужно до первого алерта.

Шесть мер из кейса, которые стоит выполнить до подключения:

  1. Аудит логов. Если приложение пишет в лог токен авторизации или адрес почты клиента, это чинится в приложении, а не в настройках агента.
  2. Zero Data Retention в двух местах. ZDR означает, что провайдер не хранит ваши запросы. В OpenRouter режим можно включить на уровне аккаунта и для отдельного запроса (OpenRouter, Zero Data Retention); авторы включили оба и проверили живым запросом.
  3. Роутер, у которого ZDR есть на деле. Одна и та же модель у разных хостеров может как поддерживать нулевое хранение, так и нет.
  4. Права только на чтение через RBAC. В Kubernetes Role всегда задаёт права внутри конкретного namespace, а ClusterRole — на уровне кластера (Kubernetes, RBAC). Запрет на изменения должен обеспечивать RBAC, а не фраза в промпте. Встроенные наборы bash и internet в чарте HolmesGPT авторы выключают явно.
  5. Правило в skill — не барьер. Инструкция «работай с агрегатами, не цитируй персональные данные» в целом соблюдается, но это текст, а не техническое ограничение.
  6. Закрытый API самого агента. По данным авторов, по умолчанию эндпоинт /api/chat доступен любому Pod'у кластера — а вместе с ним права агента и ваш бюджет у провайдера. Закрыть его можно NetworkPolicy или ключом HOLMES_API_KEY.

Для российских компаний есть отдельный вопрос — персональные данные. Часть 5 статьи 18 закона № 152-ФЗ запрещает запись, систематизацию, накопление и хранение персональных данных граждан России с использованием баз данных за пределами страны, за исключениями из той же статьи (152-ФЗ, ст. 18). Если в логах есть персональные данные клиентов, вариантов два: очистить логи до подключения или использовать модель в российском контуре либо на собственных серверах. Это не юридическая консультация: применимость требований к вашей системе оценивает ответственный за обработку данных. О режиме нулевого хранения у провайдеров подробнее — в статье Zero Data Retention и безопасность ИИ.

Знание о системе: паспорт кластера и skills

Агент без знания о вашей системе гадает. Авторы кейса разложили это знание по четырём слоям:

Слой Что в нём Пример
Системный промпт Рамки расследования: без человека в диалоге, только чтение, держись namespace алерта, вывод — гипотеза Встроен в посредника на русском и английском
Паспорт кластера Skill, который агент читает первым: как устроен кластер, что здесь нормально, что нельзя цитировать «Узлы пула apps заменяются каждую ночь — короткий NotReady с 02:00 до 03:00 UTC ожидаем»
Skills под типы алертов Где живёт компонент, как устроено правило, 4–6 шагов с готовыми запросами Разбор недоступности edge-прокси, которые работают вне Kubernetes
Аннотация в правиле Короткая подсказка прямо в правиле алерта, которую чат не показывает «Задания в namespace jobs перезапускаются планировщиком — проверь следующий запуск»

Что авторы поняли, пока писали эти тексты:

  • Инструмент, не названный в skill, почти не вызывается. Агенту подключили ArgoCD, Grafana и TCP-проверки, а он ими практически не пользовался, пока их не назвали прямо в шагах.
  • Правило надо класть туда, где модель его точно прочтёт. Запрет на один параметр запроса стоял в инструкциях к логам, но модель всё равно его нарушала — десятки упавших вызовов. Помогло только общее правило в паспорте кластера.
  • «Виноват внешний сервис» — проверяемое утверждение. Пока у агента не было сетевой проверки, разборы недоступности партнёрского API заканчивались советом «сделайте curl».
  • Skill надо тестировать как код. Один skill месяц искал прошлые разборы не по тому полю и в двух контурах из трёх всегда возвращал «прошлых разборов нет», хотя запрос с фильтром по полю находил 73 записи. Ошибки при этом не возникало: пустой ответ — тоже ответ.

Пример, ради которого всё это стоит делать. Сработал алерт о переполнении очереди TCP, а в его описании был стандартный совет поднять системный лимит. Агент за четыре минуты и пять центов выяснил, что дело в другом: соединения перестал принимать sshd, упёршийся в собственное ограничение MaxStartups из-за потока около 180 попыток входа с двух адресов за 15 минут. Совет из описания алерта увёл бы дежурного в сторону.

Типичные ошибки внедрения

Из раздела «Грабли» исходного кейса — то, что стоит заложить в план заранее:

  • Висящий алерт разбирается заново каждые сутки. Окно дедупликации по умолчанию — 24 часа. В одном контуре на такие повторы уходила почти половина бюджета. Лечится увеличением окна и починкой того, что горит неделями.
  • Нет алертов на сам посредник. Месяц о затроттленных алертах и таймаутах можно было узнать только из логов. Нужен минимум: правило на неуспешные разборы и правило на срабатывание троттлинга.
  • Парные правила дают два разбора. Если в allowlist стоят общее правило и его специализированный двойник, один инцидент разбирается дважды.
  • «Успешный» разбор без единого запроса. Агент прочитал пару skills, не сделал ни одного обращения к данным и уверенно написал, что доступа к метрикам нет. Аномально дешёвый разбор — повод посмотреть на него глазами.
  • Модель ломает аргументы инструментов. Иногда аргументы приходят строкой с JSON внутри, и разбор теряется целиком. Посредник в кейсе повторяет такой разбор, если позволяет бюджет.
  • Служебные вставки в ответе. Заготовки под графики другого интерфейса выглядят в чате как мусор и встречались больше чем в половине разборов, пока посредник не стал их вырезать.

Общая логика расследования инцидентов с участием самих ИИ-агентов разобрана в статье как расследовать инциденты ИИ-агентов.

Когда ИИ-агент для алертов нужен, а когда нет

Ситуация Агент полезен? Почему
Много однотипных алертов, дежурный тратит первые минуты на сбор контекста Да Агент забирает именно этот отрезок и приходит с готовой версией
Логи и метрики доступны программно, а знание о системе можно описать текстом Да Без доступа к данным и паспорта системы агент будет гадать
Алертов единицы в месяц Скорее нет Выгода мала; дешевле довести до ума правила и runbooks
Логи полны персональных данных, а очистить их быстро нельзя Не сейчас Сначала очистка или модель в своём контуре
Хочется, чтобы ИИ сам перезапускал сервисы и менял конфигурацию Не с этого начинать В кейсе агент сознательно только читает и строит гипотезы
Нет никого, кто будет поддерживать skills и проверять разборы Нет Агент со сломанным skill месяц «честно» ошибается без единой ошибки в логах

Отдельная граница: точность. Авторы оценивают долю верных гипотез в 90–95 %, но прямо пишут, что это ощущение по дежурствам, а не замер, и что эффект для людей — насколько сократилось время разбора инцидента — пока не измерен. Планируйте пилот так, чтобы эти две цифры у вас появились.

Чек-лист пилота на 30 дней

Это шаблон, который можно скопировать в задачу команды. Он собран редакцией AIrassvet из уроков кейса и документации; это методика, а не результат нашего внедрения.

Неделя 1 — подготовка

  • [ ] Выбрать один кластер или сервис и 3–5 правил алертов, разбор которых реально помогает дежурному.
  • [ ] Проверить логи этих сервисов на пароли, токены и персональные данные; исправить запись в приложениях.
  • [ ] Решить, где работает модель: внешний API с ZDR, российский контур или собственные серверы.
  • [ ] Создать ServiceAccount с правами только на чтение; выключить инструменты записи и выхода в интернет.
  • [ ] Поставить месячный лимит на ключ провайдера модели.

Неделя 2 — знание о системе

  • [ ] Написать паспорт системы: как она устроена, что нормально, что нельзя цитировать, что всегда требует эскалации.
  • [ ] Для каждого правила из allowlist — skill с 4–6 шагами и готовыми запросами к метрикам и логам.
  • [ ] Выполнить каждый запрос из skills вручную и убедиться, что он что-то находит.
  • [ ] Подготовить 2–3 прошлых инцидента с известной причиной — это ваша задача с известным ответом.

Неделя 3 — отбор модели и запуск

  • [ ] Прогнать каждую модель-кандидата на задачах с известным ответом несколько раз, а не один.
  • [ ] Записать для каждого прогона: верно или нет, длительность, стоимость по биллингу, падения.
  • [ ] Подключить посредника с allowlist, дедупликацией, лимитами и таймаутом; разбор — в отдельную ветку чата.
  • [ ] Добавить алерты на неуспешные разборы и на троттлинг.

Неделя 4 — оценка

  • [ ] Для каждого разбора дежурный отмечает: гипотеза верна, частично верна, неверна.
  • [ ] Посчитать долю верных гипотез, медиану длительности и общий счёт за месяц.
  • [ ] Посмотреть глазами все аномально дешёвые и аномально дорогие разборы.
  • [ ] Решить: расширять allowlist, менять модель или останавливать пилот.

Частые вопросы

Что такое ИИ-агент для разбора алертов?

Это программа на основе языковой модели, которая после срабатывания алерта сама читает состояние системы, метрики и логи и присылает в чат гипотезу о причине с шагами проверки. Решение и исправление остаются за дежурным инженером.

Может ли ИИ-агент сам исправлять сбои?

Технически HolmesGPT умеет выполнять действия, если дать ему права на запись и описать их в skills. В разобранном кейсе это сознательно не включено: у агента права только на чтение, а его ответ помечен как гипотеза, а не диагноз.

Сколько стоит ИИ-разбор одного алерта?

В кейсе на Хабре — около 10 центов на DeepSeek V4.1 Flash, несколько рублей через российский ИИ-роутер и 25–30 центов на Claude Sonnet 5; счёт за месяц — единицы долларов на проект. Ваша цена зависит от модели, кэша и числа разборов, поэтому её стоит измерить на пробных прогонах.

Насколько точны гипотезы ИИ-агента?

Авторы кейса оценивают долю верных гипотез в 90–95 %, но прямо оговаривают, что это ощущение по дежурствам, а не результат замера. Чтобы получить свою цифру, отмечайте верность каждого разбора во время пилота.

Можно ли отправлять логи во внешнюю модель?

Только после проверки логов на секреты и персональные данные. Всё, что прочитает агент, уходит провайдеру модели, поэтому нужны очистка логов, режим нулевого хранения у провайдера или модель в собственном контуре.

Нужен ли Kubernetes, чтобы использовать такой агент?

Нет. HolmesGPT в кейсе работает в Kubernetes, но его можно запустить на выделенном сервере, а наборы инструментов подключаются к Prometheus, системам логов и другим источникам. Главное условие — программный доступ агента к данным мониторинга.

Первоисточники и метод проверки

Метод: мы прочитали исходный кейс целиком 14 октября 2026 года, выписали все цифры вместе с оговорками авторов и сверили механику маршрутизации, прав доступа и режима нулевого хранения с официальной документацией. Собственных тестов HolmesGPT AIrassvet не проводил.

Ограничения: все показатели относятся к трём контурам одной команды и окну в 30 дней; выборка при отборе моделей — от 4 до 16 прогонов; названия и версии моделей указаны так, как их приводят авторы; цены провайдеров меняются.

Как AIrassvet помогает внедрить ИИ-агента для эксплуатации

Если вы хотите, чтобы ИИ-агент разбирал алерты, главные вопросы — не выбор модели, а доступ к данным, права и знание о системе. На сайте AIrassvet описаны направления, которые относятся к этой задаче напрямую:

  • Интеллектуальные ИИ-агенты, интегрированные с каналами коммуникации и бизнес-системами, — в том числе с рабочим чатом, куда приходит разбор.
  • Развёртывание языковых моделей на серверах заказчика, если логи нельзя отправлять внешнему провайдеру.
  • RAG и корпоративные базы знаний — для паспорта системы, runbooks и поиска по прошлым разборам.
  • Аудит процессов, подготовка данных, разработка MVP, интеграция и тестирование до расширения на все кластеры.

Первый шаг — выбрать один сервис и несколько правил алертов, описать, как дежурный разбирает их сейчас, какие данные для этого нужны, какие ограничения есть по логам, и договориться о критерии: какую долю верных гипотез вы сочтёте достаточной.

Обсудить задачу.

Итог: агент как первый дежурный, а не как автопилот

ИИ-агент для разбора алертов — один из самых приземлённых сценариев AIOps: он не чинит систему, а экономит дежурному первые минуты сбора контекста. Опыт команды с HolmesGPT показывает, что при жёстком фильтре алертов разбор стоит центы, а месяц — единицы долларов на проект.

Но успех определяется не моделью. Нужны права только на чтение, чистые логи, паспорт системы, проверенные skills и честный замер точности гипотез. Начните с одного сервиса и нескольких правил, измерьте результат за месяц — и только потом расширяйте охват.

← Все статьи

Комментарии (0)

Пока нет комментариев. Будьте первым!

Оставить комментарий
Регистрация не требуется