Skip to content
imarch.dev
Назад в блог
· 12 мин чтения

Observability 3.0. AI-слой - Ollama, MCP, Claude и автоматизация

AI мониторинг DevOps инструменты LLM

Это четвёртая статья из серии Observability 3.0 простыми словами. Разобрали метрики и логи с трейсами. Теперь про AI.

До сих пор мониторинг работал так. Инструменты собирают данные, человек их анализирует. Observability 3.0 добавляет промежуточное звено - AI, который умеет читать метрики, логи и трейсы и объяснять, что происходит.

Это не замена инженера. Это помощник, который за секунды делает то, на что у человека уходят минуты. Сопоставляет данные из разных источников, находит корреляции, формулирует гипотезы.

Ollama. AI на вашем сервере

Ollama - программа, которая запускает AI-модели (LLM) прямо на вашем сервере. Без облака, без подписок, без отправки данных наружу.

Почему это важно

Мониторинг содержит чувствительные данные. IP-адреса, имена серверов, названия сервисов, иногда фрагменты запросов. Отправлять это в облачный AI не всегда допустимо по политике безопасности компании.

Ollama решает эту проблему. Модель крутится на вашем железе. Данные не покидают периметр.

Как это работает

  1. Устанавливаете Ollama на сервер (Linux, macOS, Windows)
  2. Скачиваете модель - ollama pull llama3.1:8b
  3. Модель готова к работе. Можно общаться через терминал, API или через интерфейс

Ollama выставляет HTTP API на порту 11434. Любая программа может отправить запрос и получить ответ. Это то, что позволяет подключить AI к мониторингу.

Требования к железу

Для модели на 7-8 миллиардов параметров (достаточно для анализа инцидентов)

  • CPU - 4 ядра
  • RAM - 8-16 GB. Модель занимает 4-8 GB
  • GPU - не обязателен, но с ним ответы приходят за секунды вместо десятков секунд

Для моделей побольше (70B) нужен GPU с 24+ GB видеопамяти. Но для задач мониторинга это избыточно.

Какие модели использовать

Все модели бесплатные и open-source. Запускаются через Ollama.

LLaMA 3 от Meta

Самая популярная open-source модель. Хорошо понимает контекст, адекватно работает с техническими текстами. Версия 8B - разумный баланс между качеством и скоростью.

ollama pull llama3.1:8b

Mistral от Mistral AI

Французская модель, сильная в логическом анализе. Версия 7B работает быстро и даёт качественные ответы на технические вопросы.

ollama pull mistral:7b

Gemma от Google DeepMind

Лёгкая модель от Google. Версия 2B подойдёт для слабого железа - можно запустить даже на ноутбуке с 8 GB RAM. Качество ниже, чем у LLaMA, но для простых задач хватает.

ollama pull gemma2:2b

Phi-4 от Microsoft

Модель на 14B параметров, но по качеству сопоставима с более крупными. Сильна в пошаговом анализе, что полезно при разборе инцидентов.

ollama pull phi4:14b

Какую выбрать

Для начала LLaMA 3.1 8B или Mistral 7B. Обе работают на CPU с 16 GB RAM, обе достаточно умные для анализа метрик и логов. Попробуйте обе и выберите ту, чьи ответы вам больше нравятся.

MCP. Как AI подключается к мониторингу

MCP (Model Context Protocol) - протокол, через который AI-модель получает доступ к внешним системам. Без MCP модель может только отвечать на вопросы из своей памяти. С MCP она может сходить в Grafana, Prometheus, Loki и достать реальные данные.

Как это работает

Представьте, что вы AI-модель. Вас спросили - какой сейчас CPU на сервере web-01. Без MCP вы можете только сказать, что у вас нет доступа к серверам. С MCP вы можете

  1. Подключиться к Prometheus через MCP-сервер
  2. Выполнить запрос node_cpu_seconds_total{instance="web-01"}
  3. Получить данные
  4. Сформулировать ответ - CPU на web-01 сейчас 73%, час назад было 45%, рост стабильный

MCP-сервер - посредник между AI и внешней системой. Он описывает, какие действия доступны (какие запросы можно делать), и выполняет их по запросу модели.

MCP-сервер для Grafana

Для подключения AI к Grafana есть community-решения, например mcp-grafana. Такой сервер подключается к API Grafana и даёт AI доступ к дашбордам, метрикам из Prometheus, логам из Loki, трейсам из Tempo и списку алертов.

AI буквально видит те же данные, что вы видите в Grafana. Только быстрее.

Важно понимать, что это не официальный продукт Grafana Labs, а решения от сообщества. Они работают, но требуют ручной настройки.

Grafana Tool Server

Ещё один способ связать AI с Grafana. Grafana Tool Server (GTS) работает как FastAPI-прокси между Open WebUI и n8n. Схема такая

Open WebUI → GTS (FastAPI) → n8n → Grafana API → данные

GTS принимает запросы от Open WebUI, пересылает их в n8n workflow, n8n выполняет запрос к Grafana API и возвращает результат. Это позволяет Open WebUI задавать вопросы по метрикам и логам напрямую через чат.

Для работы GTS нужен Grafana Service Account с API-токеном. Создаётся в Grafana так

  1. Administration → Users and access → Service Accounts
  2. Создать новый аккаунт с ролью Viewer (для чтения дашбордов)
  3. Добавить токен (Add Token) и сохранить его

Этот токен прописывается в переменной окружения GRAFANA_API_KEY и используется во всех подключениях к API.

Практическая установка. Docker Compose

Весь AI-слой можно поднять одним файлом docker-compose. Вот минимальная конфигурация.

Файл .env

GRAFANA_URL=http://grafana:3000
GRAFANA_API_KEY=glsa_ваш_токен_из_grafana
N8N_GRAFANA_TOKEN=glsa_ваш_токен_из_grafana

GRAFANA_URL внутри Docker-сети указывает на имя сервиса, а не на localhost. Если Grafana запущена в том же docker-compose, используйте http://grafana:3000.

Docker Compose для AI-стека

services:
  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama-data:/root/.ollama
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    depends_on:
      - ollama
    volumes:
      - open-webui-data:/app/backend/data
    restart: unless-stopped

  n8n:
    image: n8nio/n8n
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=adminpass
      - N8N_GRAFANA_TOKEN=${N8N_GRAFANA_TOKEN}
    volumes:
      - n8n-data:/home/node/.n8n
    restart: unless-stopped

volumes:
  ollama-data:
  open-webui-data:
  n8n-data:

Запуск одной командой

docker compose up -d

После запуска

  • Ollama доступна на порту 11434
  • Open WebUI на порту 3000
  • n8n на порту 5678

Скачивание моделей после запуска

docker exec -it ollama ollama pull llama3.1:8b
docker exec -it ollama ollama pull mistral:7b

Модели скачиваются один раз и сохраняются в volume.

Claude Desktop и Open WebUI. Интерфейс

Это программы, через которые вы общаетесь с AI.

Claude Desktop

Десктопное приложение от Anthropic. Поддерживает MCP из коробки. Подключаете MCP-сервер к Grafana и можете задавать вопросы прямо в чате

  • Какие сервисы сейчас работают с ошибками
  • Покажи топ-5 медленных запросов к базе за последний час
  • Почему payment-service перезапускался ночью

Claude Desktop использует облачную модель от Anthropic. Данные уходят в облако. Для демонстрации и личного использования подходит. Для корпоративных данных зависит от политики компании.

Бесплатного тарифа Claude достаточно для экспериментов.

Open WebUI

Веб-интерфейс, который работает с Ollama. Выглядит как ChatGPT, но подключается к локальной модели. Данные не уходят наружу.

После установки через Docker Compose (описано выше) Open WebUI доступен на http://localhost:3000. При первом входе создаёте аккаунт администратора.

Настройка Open WebUI для работы с Grafana

Чтобы Open WebUI мог отправлять запросы к Grafana через n8n, нужно добавить function (инструмент) в интерфейсе

  1. Зайдите в Open WebUI → Workspace → Functions
  2. Импортируйте JSON-файл grafana-query.json (его можно найти в репозитории автора оригинальной статьи)
  3. Этот инструмент добавит в чат возможность выполнять запросы к Prometheus и Loki через n8n

Также полезно настроить System Prompt для observability. Он подсказывает модели, что она работает с мониторингом и какие инструменты ей доступны. Без промпта модель может не понимать контекст вопросов про метрики и алерты.

n8n. Автоматизация

n8n - визуальный конструктор автоматизаций. Похож на Zapier, но open-source и можно поставить на свой сервер.

Зачем в мониторинге

Без n8n всё вручную. Пришёл алерт, вы открываете дашборд, анализируете, пишете в Slack. С n8n

  1. Alertmanager отправляет алерт в n8n через вебхук
  2. n8n формирует вопрос к AI - проанализируй текущее состояние сервиса X, вот данные алерта
  3. AI идёт в Grafana через MCP, собирает метрики и логи
  4. n8n отправляет готовый анализ в Slack

Вы приходите утром, открываете Slack и видите не просто CPU high on web-03, а полный разбор. Что случилось, когда началось, вероятная причина, что проверить.

Настройка workflow в n8n

После входа в n8n (http://localhost:5678) нужно создать workflow для обработки запросов от Open WebUI. Есть два способа

Импорт готового. Автор оригинальной серии опубликовал JSON-файл с готовым workflow. Импортируйте его через n8n → Workflows → Import from File.

Создание вручную. Типовой workflow выглядит так

  1. Webhook (входная точка) - принимает запрос от Open WebUI или Alertmanager
  2. HTTP Request - отправляет PromQL-запрос в Grafana API с токеном авторизации
  3. Function - обрабатывает ответ, форматирует данные
  4. Respond to Webhook - возвращает результат обратно

После импорта обязательно проверьте Prometheus UID в нодах workflow. У каждого инстанса Grafana свой UID для источников данных. Его можно найти в Grafana → Configuration → Data Sources → Prometheus → URL содержит UID.

Проверка подключения

После настройки можно проверить, что n8n достучался до Grafana

curl -X POST http://localhost:5678/webhook/grafana-query \
  -H "Content-Type: application/json" \
  -d '{"query":"up"}'

Если в ответе пришли данные о состоянии таргетов Prometheus, всё работает.

Примеры автоматизаций

  • Ночной дежурный. Алерт ночью → AI анализирует → если некритично, записывает в тикет. Если критично, звонит дежурному с готовым анализом
  • Еженедельный отчёт. Каждый понедельник n8n спрашивает AI о итогах за неделю. Главные инциденты, тренды, что ухудшилось. Отправляет в канал команды
  • Проактивный мониторинг. Каждый час AI проверяет, есть ли аномалии, которые ещё не вызвали алерт. Если находит, предупреждает заранее

Что это значит для L2 на практике

Три реальных изменения в рабочем дне.

Первичный анализ без PromQL

Раньше

Надо посмотреть нагрузку на web-серверах...
rate(node_cpu_seconds_total{mode!="idle",job="web"}[5m])...
или нет, это не то...
irate? avg by instance?

Теперь

Покажи нагрузку на web-серверах за последний час

AI сам напишет правильный PromQL-запрос и покажет результат в понятном виде.

Корреляция без ручного поиска

Раньше вы открываете три вкладки (метрики, логи, трейсы), выставляете одинаковый период времени, сравниваете глазами, ищете паттерн.

Теперь - есть ли связь между ростом латентности order-service и ошибками в логах payment-service. AI проверит оба сервиса и ответит.

Эскалация с данными

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

Теперь - латентность order-service выросла в 14:25 из-за исчерпания пула соединений к PostgreSQL. Активных соединений 100/100. В логах connection pool exhausted. Трейсы показывают, что запрос к БД занимает 2.8с вместо 50мс. Нужна проверка утечки соединений в коде.

Тестирование. Проверяем что AI работает

После установки стека можно проверить AI двумя способами.

Через Open WebUI

Откройте http://localhost:3000, выберите модель (например LLaMA 3.1 8B) и задайте вопрос

Какие сервисы сейчас недоступны в Prometheus?

Если настроен инструмент grafana-query, AI выполнит запрос up == 0 и покажет результат. Если нет, он ответит на основе своих знаний (без реальных данных).

Через CLI (curl)

Можно задать вопрос напрямую через API Ollama без веб-интерфейса

curl http://localhost:11434/api/generate \
  -d '{
    "model": "llama3.1:8b",
    "prompt": "Объясни что означает метрика node_load15 в Prometheus и когда стоит беспокоиться",
    "stream": false
  }'

Ответ придёт в JSON. Поле response содержит текст.

Сравнение моделей

Попробуйте один и тот же вопрос на разных моделях и сравните ответы

# LLaMA
curl http://localhost:11434/api/generate -d '{"model":"llama3.1:8b","prompt":"Что такое scrape interval в Prometheus","stream":false}'

# Mistral
curl http://localhost:11434/api/generate -d '{"model":"mistral:7b","prompt":"Что такое scrape interval в Prometheus","stream":false}'

LLaMA обычно даёт более развёрнутые ответы. Mistral отвечает компактнее и точнее. Phi-4 лучше всех справляется с пошаговым анализом. Для задач мониторинга все три подходят.

Troubleshooting. Частые проблемы

При первой настройке стека почти наверняка что-то пойдёт не так. Вот самые частые проблемы и как их решать.

Ollama и Open WebUI

Open WebUI не видит Ollama. Проверьте переменную OLLAMA_BASE_URL в docker-compose. Если оба контейнера в одной сети, URL должен быть http://ollama:11434, а не http://localhost:11434.

docker exec -it open-webui printenv | grep OLLAMA

Модель отвечает очень медленно. На CPU ответ 7B-модели занимает 30-60 секунд. Это нормально. Если нужно быстрее, используйте меньшую модель (Gemma 2B) или добавьте GPU.

Модель не скачивается. Проверьте, что контейнер Ollama имеет доступ в интернет. Модели весят 4-8 GB и скачиваются с серверов Ollama.

docker exec -it ollama ollama list

n8n

Webhook не отвечает. Убедитесь, что workflow активирован (тумблер Active в правом верхнем углу). Неактивный workflow не принимает запросы.

Ошибка 401 при обращении к Grafana. Токен невалидный или истёк. Создайте новый Service Account Token в Grafana и обновите переменную N8N_GRAFANA_TOKEN.

Пустой ответ от Grafana API. Проверьте Prometheus UID в нодах workflow. Он уникален для каждой установки Grafana.

# Проверить доступ к Grafana API из контейнера n8n
docker exec -it n8n curl -H "Authorization: Bearer $N8N_GRAFANA_TOKEN" http://grafana:3000/api/datasources

Сеть и подключения

Контейнеры не видят друг друга. Все сервисы должны быть в одной Docker-сети. Если используете отдельные docker-compose файлы для observability-стека и AI-стека, создайте общую external network.

Порт занят. Если порт 3000 или 5678 уже используется, измените маппинг в docker-compose. Например "3001:8080" для Open WebUI.

# Проверить какие порты заняты
docker ps --format "table {{.Names}}\t{{.Ports}}"

Ограничения. О чём помнить

AI в мониторинге - мощный инструмент, но не волшебная палочка.

AI галлюцинирует. Модель может уверенно написать чушь. Назовёт несуществующий сервис, выдумает метрику, перепутает серверы. Всегда проверяйте выводы AI по реальным данным в дашборде.

Локальные модели слабее облачных. LLaMA 8B на CPU отвечает медленнее и менее точно, чем Claude в облаке. Для простых задач хватает, для сложного анализа может не дотянуть.

MCP - молодая технология. Протоколу меньше двух лет. Не все инструменты поддерживают его из коробки. Настройка может потребовать ковыряния в конфигах.

Не заменяет понимание. AI ускоряет работу, но не заменяет знание системы. Если вы не понимаете, что такое connection pool, ответ AI об исчерпании connection pool вам мало поможет.

С чего начать

Если хотите попробовать, вот простой путь

  1. Установите Ollama на свой компьютер или сервер. Скачайте LLaMA 3.1 8B
  2. Поставьте Open WebUI через Docker. Подключите к Ollama
  3. Попробуйте задавать вопросы по мониторингу в чате - пока без MCP, просто чтобы понять, как модель думает
  4. Когда будете готовы - настройте MCP-подключение к Grafana и начните задавать вопросы по реальным данным

Не надо ставить всё сразу. Каждый шаг самоценен.


Часть серии Observability 3.0 простыми словами. На основе материалов Cumhur M. Akkaya.

Поделиться:

Похожие статьи