SherlockOps, или как мы победили мониторинг

SherlockOps, или как мы победили мониторинг

Senior DevOps

TeamLead DevOps

Предисловие

На протяжении почти 7 лет работы DevOps-инженером я терпеть не мог мониторинг, алерты и всё, что с ними связано. Не только ненавидел их настраивать, но и особенно — разгребать утром после ночного дежурства.

Сидишь, просматриваешь десятки алертов, глаза замыливаются, а контекста — ноль. Хочется просто нажать волшебную кнопку и сразу понять, что сломалось и как починить.

Наконец появился ИИ — и с ним — надежда. Представьте: приходишь утром, завариваешь кофе, заходишь в Slack — а там каналы взрываются от алертов. Упало что-то, кончилось место, пошли странные ошибки.

Тратишь полчаса на расследование — и выясняется: коллеги из соседнего отдела провели нагрузочное тестирование, положили полинфраструктуры и забыли предупредить.

При этом у нас 10 продовых стендов и три облака: Yandex, AWS, DigitalOcean. В каждом — свои базы, Kubernetes, стек мониторинга: VictoriaMetrics, Grafana, Loki, Alertmanager, «кролики», «редиски». Всё это нужно держать в голове, чтобы решить хотя бы один инцидент.

Однажды терпение лопнуло. Мы с коллегой решили создать помощника — ИИ-агента, который будет иметь доступ ко всей инфраструктуре и выдавать полный контекст по алерту, писать команды и советовать действия.

PoC (Proof of Concept)

У нас была идея и желание. Нужно было быстро собрать прототип. В наличии: Kubernetes, стек мониторинга и три облака. Всё это следовало подключить к боту с правами только на чтение.

Мы услышали про n8n — инструмент для оркестрации. Решили попробовать. Удивились, сколько уже появилось MCP-серверов — специальных шлюзов для связи ИИ с внешними системами.

MCP — это специальный протокол общения между ИИ и внешними сервисами.

Оказалось, для всех наших систем уже есть MCP-серверы: для Alertmanager, VictoriaMetrics, Yandex Cloud, Kubernetes. Подняли alertmanager-mcp, vmetrics-mcp, yandex-tool-kit, k8s-mcp и с помощью ИИ написали workflow в n8n.

Но начались проблемы. Оказалось, не все ИИ одинаково полезны. Одни хороши в генерации текста, другие — в поиске, третьи — в работе с MCP.

Сначала попробовали корпоративную Gemini. Она не хотела работать с MCP: то подпись не нравилась, то вызывала один и тот же инструмент по 100 раз. Полный провал.

Перешли на Claude. Сначала казалось — работает. Но агент уходил в бесконечные циклы: вызывал одни и те же инструменты снова и снова. Галлюцинировал.

После часов гугления поняли: обычная модель слишком прямолинейна. Нужен режим thinking mode — с рассуждением.

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

Промпт стал строго структурированным: задавал текущую среду, дату, доступные инструменты и правила их использования. Например:

  • vmetrics — для запросов к VictoriaMetrics. Только с правильными временными диапазонами.
  • k8s_mcp — для получения состояния подов. Контекст берётся из таблицы соответствий.
  • loki — только для поиска ошибок в логах. Диапазон — не более часа.
  • yandex-cloud-toolkit — только для Compute, VPC, IAM, YDB, S3. Не работает с managed-сервисами.
  • argocd_mcp — только для получения статуса приложения. Запрещено запрашивать список всех приложений.
  • alertmanager_mcp — для управления silences. С проверкой на дубли.

Были чёткие правила:

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

Формат ответа — строго по шаблону в Slack:

  • Начинается с эмодзи: 🔴 (critical), 🟡 (warning), 🟢 (остальное).
  • Диагноз — кратко, в одном предложении.
  • Что нашёл — с цифрами: restarts, exitCode, ошибки в логах.
  • Список действий — 1–3 шага.
  • Проверено — какие инструменты вызваны и что вернули.
  • Трейс — только вызванные инструменты с отметками ✓ или ✗.

Мы показали коллегам. Те были в восторге. Бот выдавал готовые команды — копируй, вставляй в терминал — и проблема решена.

Production Ready

После успешного PoC решили: пора отдавать миру. Мы столько брали из open source — теперь хотим дать что-то взамен.

Но мы не хотели, чтобы люди мучались с кучей MCP-серверов и кривыми промптами в n8n. Хотели — один бинарник или контейнер, и всё работает из коробки.

Так родился SherlockOps — полноценный сервис на Go. Мы встроили более 50 интеграций: AWS, GCP, Azure, Kubernetes, СУБД. Никаких сторонних MCP-серверов — всё «под капотом».

Чтобы решить проблему с 10 стендами, добавили поддержку мультиокружений. По заголовку X-Environment сервис сам определяет, в каком кластере что упало, и переключает контексты.

Теперь DevOps-инженеру нужно просто установить SherlockOps (инструкции — в репозитории на GitHub), настроить receiver в Alertmanager — и 70% времени на разбор алертов экономится.

Есть и ручной режим — ChatOps. Просто отметь бота: @SherlockOps analyze — и он проведёт расследование по запросу.

У сервиса есть внутренний дашборд: сколько алертов обработано, какие инструменты использовались, сколько потрачено токенов и ресурсов.

Чтоб потом показывать своему big boss и доказывать, что ИИ стоит сущие копейки по сравнению с профитом.

Читать оригинал