Last9

официальный

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

Что можно делать с Last9 MCP?

  • Исследование состояния сервиса — Запросите ранжированную сводку по флоту с количеством запросов, пропускной способностью и частотой ошибок через get_service_summary.

  • Получение сырых журналов сервиса — Извлеките отфильтрованные строки журналов по уровню серьезности или содержимому тела для конкретного сервиса с помощью get_service_logs.

  • Трассировка производительности базы данных — Обнаруживайте базы данных, медленные запросы и паттерны запросов с помощью get_databases и связанных инструментов.

  • Выполнение PromQL-запросов — Выполняйте запросы за диапазон или мгновенные запросы по любой метрике с помощью prometheus_range_query или prometheus_instant_query.

  • Сопоставление изменений с инцидентами — Получайте события развертывания и изменения конфигурации, чтобы понять, что изменило поведение продакшена, через get_change_events.

  • Управление пользовательскими дашбордами — Программно выводите список, создавайте, обновляйте или проверяйте дашборды с помощью list_dashboards и create_dashboard.

Документация

Сервер Last9 MCP

last9 mcp demo

Ваш ИИ-агент не знает, что сломано в продакшене. Это исправляет ситуацию.

Сервер Last9 MCP подключает Claude, Cursor, Windsurf и любого другого ИИ-ассистента с поддержкой MCP напрямую к вашим данным наблюдаемости в продакшене — логам, метрикам, трейсам, исключениям, запросам к базам данных, алертам и деплоям. Агент перестаёт гадать и начинает читать реальные сигналы.


Начало за 30 секунд (хостинг)

Не нужно устанавливать бинарник. Не нужно управлять токенами. Один URL, OAuth в браузере — готово.

Найдите слаг вашей организации в URL Last9: app.last9.io/<org_slug>/...

Claude Code

claude mcp add --transport http last9 https://app.last9.io/api/v4/organizations/<org_slug>/mcp

Введите /mcp, выберите last9, пройдите аутентификацию. Всё.

Cursor

Settings > MCP > Add New MCP Server:

{
  "mcpServers": {
    "last9": {
      "type": "http",
      "url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
    }
  }
}

Нажмите Connect, завершите OAuth.

VS Code

Требуется версия v1.99+. Откройте Command Palette → MCP: Add Server, вставьте URL, пройдите аутентификацию.

Или напрямую в settings.json:

{
  "mcp": {
    "servers": {
      "last9": {
        "type": "http",
        "url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
      }
    }
  }
}

Windsurf

Settings > Cascade > Open MCP Marketplace > значок шестерёнки (mcp_config.json):

{
  "mcpServers": {
    "last9": {
      "serverUrl": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
    }
  }
}

Claude Web/Desktop

Settings > Connectors > Add custom connector. Назовите его last9, вставьте URL, пройдите аутентификацию.

Требуется доступ администратора к вашей организации Claude.


Самостоятельный хостинг (STDIO)

Используйте это, когда ваш MCP-клиент не поддерживает HTTP-транспорт или когда сервер должен работать локально.

Установка

Homebrew:

brew install last9/tap/last9-mcp

NPM:

npm install -g @last9/mcp-server@latest
# or directly:
npx -y @last9/mcp-server@latest

Бинарные релизы (Windows / вручную):

Скачайте с GitHub Releases:

ПлатформаАрхив
Windows (x64)last9-mcp-server_Windows_x86_64.zip
Windows (ARM64)last9-mcp-server_Windows_arm64.zip
Linux (x64)last9-mcp-server_Linux_x86_64.tar.gz
Linux (ARM64)last9-mcp-server_Linux_arm64.tar.gz
macOS (x64)last9-mcp-server_Darwin_x86_64.tar.gz
macOS (ARM64)last9-mcp-server_Darwin_arm64.tar.gz

Получение refresh-токена

Только администраторы могут создавать токены.

  1. Перейдите в API Access
  2. Нажмите Generate Token с правами Write
  3. Скопируйте его

Конфигурация клиента

Homebrew:

{
  "mcpServers": {
    "last9": {
      "command": "/opt/homebrew/bin/last9-mcp",
      "env": {
        "LAST9_REFRESH_TOKEN": "<your_refresh_token>"
      }
    }
  }
}

NPM:

{
  "mcpServers": {
    "last9": {
      "command": "npx",
      "args": ["-y", "@last9/mcp-server@latest"],
      "env": {
        "LAST9_REFRESH_TOKEN": "<your_refresh_token>"
      }
    }
  }
}

Куда вставить это:

КлиентРасположение
Claude Web/DesktopSettings > Developer > Edit Config (claude_desktop_config.json)
CursorSettings > Cursor Settings > MCP > Add New Global MCP Server
WindsurfSettings > Cascade > MCP Marketplace > значок шестерёнки (mcp_config.json)
VS CodeОберните в { "mcp": { "servers": { ... } } } в settings.json — подробности
Конфигурация STDIO для VS Code
{
  "mcp": {
    "servers": {
      "last9": {
        "type": "stdio",
        "command": "/opt/homebrew/bin/last9-mcp",
        "env": {
          "LAST9_REFRESH_TOKEN": "<your_refresh_token>"
        }
      }
    }
  }
}

Для NPM: используйте "command": "npx" и добавьте "args": ["-y", "@last9/mcp-server@latest"].

Windows

После скачивания с GitHub Releases распакуйте и укажите полный путь:

{
  "mcpServers": {
    "last9": {
      "command": "C:\\Users\\<user>\\AppData\\Local\\Programs\\last9-mcp-server.exe",
      "env": {
        "LAST9_REFRESH_TOKEN": "<your_refresh_token>"
      }
    }
  }
}

На Windows проще использовать NPM — не нужно управлять путями.

Переменные окружения

ПеременнаяПо умолчаниюОписание
LAST9_REFRESH_TOKEN(обязательно)Refresh-токен из API Access
LAST9_DATASOURCEпо умолчанию для организацииИмя источника данных/кластера — полезно, если у вас несколько кластеров Levitate
LAST9_API_HOSTapp.last9.ioПереопределить хост API
LAST9_TOOLSETSвсе инструментыНаборы инструментов через запятую (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). Псевдоним: LAST9_MCP_TOOLSETS
LAST9_MAX_GET_LOGS_ENTRIES5000Максимальное количество записей для чанкированных запросов get_logs
LAST9_USE_LOG_SEARCH_APIfalseУстановите true, чтобы отвечать на get_logs и get_service_logs одним серверным поисковым вызовом вместо клиентского чанкирования
LAST9_DEBUG_CHUNKINGfalseУстановите true, чтобы логировать детали планирования чанков для get_logs, get_service_logs, get_traces
LAST9_DISABLE_TELEMETRYtrueУстановите false, чтобы включить внутреннюю трассировку OTel
OTEL_SDK_DISABLED—Стандартная переменная окружения OTel. Переопределяет LAST9_DISABLE_TELEMETRY
OTEL_EXPORTER_OTLP_ENDPOINT—Конечная точка коллектора OTLP (только когда телеметрия включена)
OTEL_EXPORTER_OTLP_HEADERS—Заголовки аутентификации OTLP (только когда телеметрия включена)

Возможности

Здоровье сервисов

  • get_service_summary — Ранжированные строки (service, env) флота: interval request_count, throughput_rpm, количество HTTP 4xx/5xx и количество ошибок gRPC
  • get_service_environments — Доступные окружения для ваших сервисов. Запустите это первым — другим инструментам APM нужен env отсюда
  • get_service_performance_details — Полная разбивка: пропускная способность, доля ошибок, p50/p90/p95/avg/max, apdex, доступность
  • get_service_operations_summary — Операции, сгруппированные по HTTP-эндпоинтам, вызовам БД, обмену сообщениями, HTTP-клиентам
  • get_service_dependency_graph — Карта зависимостей с пропускной способностью, задержкой и долей ошибок для восходящих/нисходящих/инфраструктурных зависимостей
  • get_apm_service_deviations — Сравнение текущего окна с базовым окном той же длительности: регрессии/улучшения, сверка Apdex и итоговый результат (флот или отдельный сервис)
  • get_exceptions — Исключения на стороне сервера с фильтрами по сервису и спанам

Наблюдаемость баз данных

Четыре инструмента, направленных непосредственно на производительность вашей базы данных, полученных из спанов трассировки OpenTelemetry и, при отсутствии трейсов, из метрик инфраструктуры, таких как CloudWatch. Дополнительная инструментация не требуется, если вы уже используете OTel.

  • get_databases — Обнаружение всех баз данных в вашей инфраструктуре: тип БД, хост, пропускная способность (запросов/мин), задержка p95, доля ошибок, количество зависимых сервисов. Также обнаруживает базы данных из метрик инфраструктуры, таких как CloudWatch, без необходимости инструментации трейсов — такие строки содержат значение активности вместо метрик трейсов
  • get_database_slow_queries — Фактически самые медленные выполнения запросов, упорядоченные по длительности, с идентификаторами трейсов для перехода к полным трейсам
  • get_database_queries — Паттерны запросов и агрегаты: как часто выполняется запрос, средняя длительность/p95, доля ошибок
  • get_database_server_metrics — Метрики на стороне сервера с самого хоста БД (CPU, соединения, коэффициент попадания в буфер — зависит от вашей СУБД)

Поддерживаются PostgreSQL, MySQL, MongoDB, Redis, Aerospike и всё остальное, что OTel трассирует с атрибутом db_system — плюс базы данных, обнаруженные из метрик инфраструктуры, таких как CloudWatch, строки которых содержат значение активности вместо метрик трейсов.

Prometheus / PromQL

  • prometheus_range_query — Запросы PromQL с диапазоном по любой метрике
  • prometheus_instant_query — Мгновенные запросы; используйте функции агрегации, такие как avg_over_time, sum_over_time
  • prometheus_label_values — Значения меток для заданного ряда
  • prometheus_labels — Все доступные метки для ряда

Укажите другой источник данных/кластер, отличный от стандартного, задав LAST9_DATASOURCE.

Логи

  • get_logs — Полные запросы к логам JSON-конвейера (агрегации, фильтры, извлечение полей)
  • get_service_logs — Сырые строки логов для сервиса, фильтруемые по severity и содержимому тела
  • get_log_attributes — Глобальный каталог атрибутов в схеме логов за временной интервал
  • get_log_attributes_for_pipeline — Поля логов, фактически присутствующие в выполняющемся конвейере (ограниченное обнаружение), каждое с точным filter_field
  • get_drop_rules — Правила отбрасывания логов из Last9 Control Plane
  • add_drop_rule — Создание нового правила отбрасывания для сокращения объёма логов в источнике

Трейсы

  • get_traces — Запросы к трейсам JSON-конвейера для широкого поиска и агрегаций
  • get_service_traces — Трейсы по точному идентификатору трейса или имени сервиса. Используйте это, когда у вас есть идентификатор трейса — так быстрее
  • get_trace_attributes — Глобальный каталог атрибутов в схеме трейсов
  • get_trace_attributes_for_pipeline — Атрибуты, фактически присутствующие в выполняющемся конвейере (ограниченное обнаружение), каждый с точным filter_field
  • get_trace_attribute_values — Различные значения для атрибута трейса, опционально ограниченные конвейером
  • get_trace_attribute_deviations — Ранжирует значения атрибутов, которые различаются между двумя ограниченными когортами спанов (медленные против быстрых, с ошибками против без ошибок или два временных окна). Корреляция, а не причинно-следственная связь
  • get_trace_waterfall — Один точный трейс в виде водопада родитель/потомок с объединённым по интервалам собственным временем, самыми медленными спанами и предупреждениями графа

События изменений и алерты

  • get_change_events — Деплои, изменения конфигурации, откаты. Сопоставляйте инциденты с тем, что изменилось
  • get_alert_groups — Настроенные группы алертов Compass с метаданными-метками, командой, уровнем и количеством правил — включая группы без правил и группы, которые не срабатывают
  • get_alert_config — Конфигурации правил алертов — поиск по имени, severity, типу, тегам
  • get_alerts — Текущие срабатывающие алерты в пределах временного окна
  • get_alert_rule_state — Историческое состояние срабатывания (1/0) для каждого правила алерта за временной диапазон, сгруппированное по rule_id. Фильтруется по группе алертов, имени правила, фильтрам меток и состоянию.
  • get_notification_channels — Настроенные каналы уведомлений (Slack, PagerDuty, email и т. д.)

Пользовательские дашборды

  • list_dashboards — Все пользовательские дашборды в вашей организации: идентификаторы, имена и метаданные
  • get_dashboard — Полное определение дашборда по идентификатору, включая панели и запросы
  • validate_dashboard — Только чтение: lint + выполнение + классификация для сохранённого идентификатора дашборда или встроенного dashboard_definition за окно ≤24 ч. Никогда не создаёт и не обновляет дашборды
  • create_dashboard — Создание нового пользовательского дашборда один раз (панели, запросы, метаданные). После возврата идентификатора уточняйте с помощью update_dashboard.
  • update_dashboard — Уточнение существующего дашборда по идентификатору (полная замена; системные дашборды только для чтения возвращают ошибку)
  • delete_dashboard — Удаление пользовательского дашборда по идентификатору
  • list_dashboard_snapshots — Замороженные снимки на момент времени для дашборда (только метаданные)
  • get_dashboard_snapshot — Полный замороженный снимок, включая данные панелей для RCA / представлений для совместного использования
  • delete_dashboard_snapshot — Удаление замороженного снимка по идентификатору

Непрерывное профилирование

Требуется включённое непрерывное профилирование для организации. Сначала обнаружьте сервисы с помощью get_profile_services, затем получите flamegraph или ранжированные функции.

  • get_profile_services — Сервисы, для которых есть данные профилирования в окне (индекс перед запросом)
  • get_flamegraph — Вложенное дерево flamegraph для одного сервиса (по умолчанию cpu; также alloc, wall)
  • get_top_functions — Ранжирование собственных выборок самых горячих функций для одного сервиса
  • get_profile_summary — Краткая естественно-языковая триаж профиля для одного сервиса

Дашборды Grafana

Инструменты только для чтения для экземпляра Grafana организации (через прокси Grafana от Last9). Поля учётных данных никогда не возвращаются модели. Включите с помощью LAST9_TOOLSETS=grafana (или оставьте наборы инструментов неустановленными для всех инструментов).

  • grafana_search_dashboards — Поиск дашбордов по подстроке в названии (с пагинацией; truncated: true при достижении лимита)
  • grafana_get_dashboard — Сводка по дашборду по uid (панели, переменные, PromQL-цели); full_json=true для сырого Grafana JSON
  • grafana_list_folders — Дерево папок
  • grafana_list_folder_dashboards — Дашборды в одной папке (с пагинацией)
  • grafana_list_datasources — Инвентаризация источников данных без учетных данных

Нечеткое разрешение имен

  • did_you_mean — Когда агент не уверен в имени сущности, этот инструмент возвращает ближайшие совпадения из вашего каталога (сервисы, окружения, хосты, базы данных, K8s-деплойменты/неймспейсы, задания). До 3 предложений с оценками схожести. Сервер автоматически вызывает этот инструмент перед большинством инструментов, когда поиск по имени возвращает пустой результат.

Профиль сервиса

  • get_service_profile — Как на самом деле выглядит телеметрия сервиса, прежде чем вы отправите запрос: какие сигналы существуют, язык и среда выполнения, окружения развертывания, форма его логов и рекомендуемое исправление приема данных, если оно применимо. Позволяет агенту пропускать инструменты трассировки, когда у сервиса нет трассировок, и извлекать уровень серьезности из тела лога, когда SeverityText пуст, вместо фильтрации по нему и получения пустого результата.

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

Глубокие ссылки в каждом ответе. Каждый инструмент возвращает поле deep_link — прямую ссылку на дашборд Last9 для этого конкретного запроса и временного диапазона. Агент может передать вам ссылку; вы нажимаете на нее; вы на месте.

Наборы инструментов. По умолчанию сервер предоставляет все инструменты. Хосты автоматизации, которым нужны только исследования (логи/трассировки/метрики/профили), могут установить LAST9_TOOLSETS=investigate (или передать --toolsets=investigate), чтобы tools/list оставался небольшим без массового отключения на стороне клиента. Именованные наборы: logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all. Неизвестные имена завершаются с ошибкой. Набор metrics сам по себе не включает list_datasources или did_you_mean — используйте investigate (или комбинируйте наборы), когда вам нужны эти вспомогательные инструменты обнаружения.

Справочные ресурсы инструментов. Длинные руководства по logjson/tracejson/service-logs/metrics являются ресурсами MCP (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics, last9://reference/investigation), а не постоянно включенным текстом описания инструментов. Критические правила запросов остаются в описании инструментов, чтобы агенты, которые никогда не вызывают resources/read, все равно получали корректные рекомендации по построению. Обнаруживайте поля, специфичные для организации, с помощью get_log_attributes / get_log_attributes_for_pipeline (и эквивалентов для трассировок) — они не внедряются в описания.

Разбиение больших результатов. get_logs и get_traces обрабатывают большие наборы результатов через разбиение на части, а не усечение. Лимит по умолчанию — 5000 записей для логов; настраивается через LAST9_MAX_GET_LOGS_ENTRIES.


Разработка

HTTP-режим, тестирование через curl, сборка из исходников

Запуск в HTTP-режиме

export LAST9_REFRESH_TOKEN="your_refresh_token"
export LAST9_HTTP=true
export LAST9_PORT=8080
./last9-mcp-server

Сервер запускается на http://localhost:8080/mcp.

Тестирование с помощью curl

Обработчик Streamable HTTP работает в stateless-режиме, поэтому любой запрос обслуживается независимо. Ручкопожатие initialize и заголовок Mcp-Session-Id необязательны — клиенты, которые их отправляют, все равно работают (заголовок принимается и игнорируется), а клиенты также могут перейти сразу к tools/list / tools/call. Каждый инструмент — это независимый запрос/ответ; сервер не отправляет уведомления сервер→клиент, поэтому GET /mcp (SSE-поток) возвращает 405.

# List tools — a session handshake is optional in stateless mode
curl -s -X POST http://localhost:8080/mcp \
    -H "Content-Type: application/json" \
    -H "Accept: application/json, text/event-stream" \
    -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}'

# Call a tool
curl -s -X POST http://localhost:8080/mcp \
    -H "Content-Type: application/json" \
    -H "Accept: application/json, text/event-stream" \
    -d '{
      "jsonrpc": "2.0",
      "id": 2,
      "method": "tools/call",
      "params": {
        "name": "get_service_logs",
        "arguments": {
          "service_name": "your-service-name",
          "lookback_minutes": 30,
          "limit": 10
        }
      }
    }'

Сборка из исходников

git clone https://github.com/last9/last9-mcp-server.git
cd last9-mcp-server
go build -o last9-mcp-server
LAST9_HTTP=true ./last9-mcp-server

LAST9_HTTP=true предназначен для локальной разработки. Для реального использования размещенная HTTP-конечная точка проще.


Справочник по инструментам

Все параметры, стандарты ввода времени и детали

Ввод времени

  • Абсолютное время (start_time_iso/end_time_iso, или time_iso) имеет приоритет над lookback_minutes.
  • Для относительных окон: используйте lookback_minutes.
  • Для абсолютных окон: используйте RFC3339/ISO8601 — 2026-02-09T15:04:05Z.
  • Устаревший YYYY-MM-DD HH:MM:SS принимается только для совместимости.

get_exceptions

  • limit (целое, необязательно): Максимум исключений. По умолчанию: 20.
  • lookback_minutes (целое, необязательно): По умолчанию: 60.
  • start_time_iso / end_time_iso (строка, необязательно): Абсолютный временной диапазон.
  • service_name (строка, необязательно): Фильтр по сервису.
  • span_name (строка, необязательно): Фильтр по имени спана.
  • env (строка, необязательно): Фильтр по окружению.

get_service_summary

  • start_time_iso / end_time_iso (строка, необязательно)
  • env (строка, необязательно): PromQL-регулярное выражение. По умолчанию — .*. Для точного совпадения нужны якоря (например, ^prod$).
  • sort_by (строка, необязательно): request_count (по умолчанию), throughput_rpm, http_4xx_count, http_5xx_count или grpc_error_count.
  • limit (целое, необязательно): Максимум ранжированных строк. Если опущено или 0 — 10; значения выше 100 ограничиваются до 100.

get_service_environments

  • start_time_iso / end_time_iso (строка, необязательно)

Все остальные инструменты APM требуют значение env. Используйте "", если этот инструмент возвращает пустой результат.

get_service_performance_details

  • service_name (строка, обязательно)
  • lookback_minutes (целое, необязательно): По умолчанию: 60.
  • start_time_iso / end_time_iso (строка, необязательно)
  • env (строка, необязательно): По умолчанию — prod.

get_service_operations_summary

  • service_name (строка, обязательно)
  • lookback_minutes (целое, необязательно): По умолчанию: 60.
  • start_time_iso / end_time_iso (строка, необязательно)
  • env (строка, необязательно): По умолчанию — prod.

get_service_dependency_graph

  • service_name (строка, необязательно)
  • lookback_minutes (целое, необязательно): По умолчанию: 60.
  • start_time_iso / end_time_iso (строка, необязательно)
  • env (строка, необязательно): По умолчанию — prod.

get_apm_service_deviations

  • service_name (строка, необязательно): Опустите для охвата всего парка; укажите для одного сервиса и его корреляций операций.
  • lookback_minutes (целое, необязательно): Текущее окно. По умолчанию: 60.
  • start_time_iso / end_time_iso (строка, необязательно): Явное текущее окно.
  • baseline_start_time_iso / baseline_end_time_iso (строка, необязательно): Явный базовый период. По умолчанию — непосредственно предшествующее окно той же длительности.
  • datasource (строка, необязательно): Ограничить сравнение одним источником данных.
  • env (строка, необязательно): По умолчанию — prod.
  • max_services / max_operations (целое, необязательно): По умолчанию 10, максимум 10 каждый.

get_databases

  • env (строка, необязательно): Фильтр по окружению. Принимает регулярное выражение. По умолчанию: все.
  • lookback_minutes (целое, необязательно): По умолчанию: 60. Окно не может превышать 7 дней.
  • start_time_iso / end_time_iso (строка, необязательно)

get_database_slow_queries

  • db_system (строка, необязательно): например, postgresql, mysql, mongodb, redis.
  • host (строка, необязательно): Хост базы данных (net_peer_name).
  • service_name (строка, необязательно): Имя вызывающего сервиса.
  • env (строка, необязательно)
  • min_duration_ms (число с плавающей точкой, необязательно): Минимальная длительность запроса в мс.
  • lookback_minutes (целое, необязательно): По умолчанию: 60.
  • start_time_iso / end_time_iso (строка, необязательно)
  • limit (целое, необязательно): По умолчанию: 20.

get_database_queries

  • db_system (строка, необязательно)
  • host (строка, необязательно)
  • service_name (строка, необязательно)
  • env (строка, необязательно)
  • lookback_minutes (целое, необязательно): По умолчанию: 60.
  • start_time_iso / end_time_iso (строка, необязательно)
  • limit (целое, необязательно): По умолчанию: 20.

get_database_server_metrics

  • db_system (строка, обязательно): например, postgresql, mysql, mongodb, redis, aerospike.
  • host (строка, необязательно)
  • lookback_minutes (целое, необязательно): По умолчанию: 60.
  • start_time_iso / end_time_iso (строка, необязательно)

prometheus_range_query

  • query (строка, обязательно): PromQL-запрос.
  • start_time_iso / end_time_iso (строка, необязательно): По умолчанию — последние 60 минут.
  • lookback_minutes (число с плавающей точкой, необязательно): По умолчанию: 60.

prometheus_instant_query

  • query (строка, обязательно)
  • time_iso (строка, необязательно): По умолчанию — сейчас.
  • lookback_minutes (число с плавающей точкой, необязательно)

prometheus_label_values

  • match_query (строка, необязательно): PromQL-фильтр.
  • label (строка, обязательно): Имя метки.
  • start_time_iso / end_time_iso (строка, необязательно)

prometheus_labels

  • match_query (строка, необязательно): PromQL-фильтр.
  • start_time_iso / end_time_iso (строка, необязательно)

get_logs

  • logjson_query (массив, обязательно): JSON-запрос конвейера.
  • lookback_minutes (целое, необязательно): По умолчанию: 5.
  • start_time_iso / end_time_iso (строка, необязательно)
  • limit (целое, необязательно): Серверное значение по умолчанию: 5000.
  • index (строка, необязательно): physical_index:<name> или rehydration_index:<block_name>.

Для инвентаризации сервисов на основе логов сначала запросите physical_index_service_count:

sum by (name, service_name, env) (physical_index_service_count{destination="logs"})

Используйте service_name как ServiceName, env как окружение, когда оно присутствует, и name как имя физического индекса. Если name="default", опустите index; для нестандартного физического индекса, выбранного пользователем, передайте index: "physical_index:<name>". Если бэкенд отклоняет явную фильтрацию по физическому индексу, повторите попытку без index и сообщите, что явная фильтрация по физическому индексу недоступна для этого бэкенда.

get_service_logs

  • service_name (строка, обязательно)
  • lookback_minutes (целое, необязательно): По умолчанию: 60.
  • limit (целое, необязательно): По умолчанию: 20.
  • env (строка, необязательно)
  • severity_filters (массив, необязательно): например, ["error", "warn"]. Логика ИЛИ.
  • body_filters (массив, необязательно): например, ["timeout", "failed"]. Логика ИЛИ.
  • start_time_iso / end_time_iso (строка, необязательно)
  • index (строка, необязательно)

Несколько типов фильтров объединяются через И. Каждый массив использует ИЛИ внутри. Сначала используйте get_logs для широких агрегированных подсчетов; используйте get_service_logs только после сужения до сервиса/окружения/индекса и небольшого набора образцов.

get_log_attributes

  • lookback_minutes (целое, необязательно): По умолчанию: 15.
  • start_time_iso / end_time_iso (строка, необязательно)
  • region (строка, необязательно)
  • index (строка, необязательно)

get_log_attributes_for_pipeline

  • pipeline (массив, обязательно): Предыдущие стадии фильтрации для ограничения обнаружения, например, [{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].
  • lookback_minutes (целое, необязательно): По умолчанию: 15.
  • start_time_iso / end_time_iso (строка, необязательно)
  • region (строка, необязательно)
  • index (строка, необязательно)

get_drop_rules

Без параметров. Перечисляет правила отбрасывания через GET /otel_settings/drop?region=....

add_drop_rule

  • name (строка, обязательно)
  • filters (массив, обязательно): Каждый фильтр: key, value, operator (equals/not_equals), conjunction (and).
  • Ключи фильтров должны использовать attributes["key_name"] или resource.attributes["key_name"] (требуется API Last9).
  • Создает правило через POST /otel_settings/drop?region=...&cluster_id=....

get_traces

Используйте для широких поисков и агрегаций. Для точного поиска по ID трассировки используйте get_service_traces.

  • tracejson_query (массив, обязательно)
  • start_time_iso / end_time_iso (строка, необязательно)
  • lookback_minutes (целое, необязательно): По умолчанию: 60.
  • limit (целое, необязательно): По умолчанию: 5000.

get_service_traces

Требуется ровно одно из trace_id или service_name.

  • trace_id (string, необязательный): Период просмотра по умолчанию: 72 часа.
  • service_name (string, необязательный): Период просмотра по умолчанию: 60 мин.
  • lookback_minutes (integer, необязательный)
  • start_time_iso / end_time_iso (string, необязательный)
  • limit (integer, необязательный): По умолчанию: 10.
  • env (string, необязательный)

get_trace_attributes

  • lookback_minutes (integer, необязательный): По умолчанию: 15.
  • start_time_iso / end_time_iso (string, необязательный)
  • region (string, необязательный)

get_trace_attributes_for_pipeline

  • pipeline (array, обязательный): Предыдущие этапы фильтрации для ограничения области обнаружения, например [{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].
  • lookback_minutes (integer, необязательный): По умолчанию: 15.
  • start_time_iso / end_time_iso (string, необязательный)
  • region (string, необязательный)

get_trace_attribute_values

  • tag_name (string, обязательный): Имя атрибута из get_trace_attributes (например, resource_department или attributes['http.method']).
  • pipeline (array, необязательный): Предыдущие этапы фильтрации для ограничения области значений; опустите для глобальных значений.
  • lookback_minutes (integer, необязательный): По умолчанию: 15.
  • start_time_iso / end_time_iso (string, необязательный): Исторические границы RFC3339; имеют приоритет над lookback_minutes.
  • region (string, необязательный)

get_trace_attribute_deviations

  • comparison_mode (string, обязательный): latency, errors или time.
  • service_name (string, обязательный)
  • environment (string, обязательный): Точное значение deployment.environment.
  • operation (string, необязательный)
  • filters (array, необязательный): Условия фильтрации JSON трассировки.
  • candidate_attributes (array, необязательный): Максимум 8; опустите для ограниченного обнаружения.
  • latency_threshold_ms (number, необязательный): Требуется для режима latency; отклоняется для других режимов.
  • start_time_iso / end_time_iso (string, необязательный)
  • lookback_minutes (integer, необязательный): По умолчанию: 15. Максимум: 15.
  • baseline_start_time_iso / baseline_end_time_iso (string, необязательный): Требуется для режима time; неперекрывающиеся и равные по длительности целевому окну.
  • minimum_cohort_size (integer, необязательный): По умолчанию: 100. Минимум: 20.
  • minimum_value_support (integer, необязательный): По умолчанию: 20. Минимум: 10.
  • limit (integer, необязательный): По умолчанию: 10. Максимум: 10.

Требует включения сопутствующей серверной возможности.

get_trace_waterfall

  • trace_id (string, обязательный)
  • environment (string, необязательный)
  • start_time_iso / end_time_iso (string, необязательный)
  • lookback_minutes (integer, необязательный): По умолчанию: 4320 (72 часа).
  • selected_span_id (string, необязательный): Возвращает атрибуты, события и ссылки только для этого спана.
  • max_spans (integer, необязательный): По умолчанию: 500. Максимум: 1000.

Возвращает конверт investigation-evidence/v1; водопад находится в data.

get_change_events

  • start_time_iso / end_time_iso (string, необязательный)
  • lookback_minutes (integer, необязательный): По умолчанию: 60.
  • service_name (string, необязательный)
  • env (string, необязательный)
  • event_name (string, необязательный): Сначала вызовите без этого параметра, чтобы получить available_event_names.

get_alert_groups

Настроенный инвентарь групп оповещений Compass для аудита changeboard / покрытия меток. Включает группы без правил и группы, которые не срабатывают. Не возвращает PromQL.

  • alert_group_name / alert_group_type / data_source_name (string, необязательный): Поиск подстроки без учёта регистра.
  • team / tier (string, необязательный): Точное совпадение без учёта регистра по настроенным метаданным.
  • label_key + label_value (string, необязательный): Должны быть заданы вместе. Точное совпадение без учёта регистра по одной паре metadata.labels — и ключ, и значение.

Возвращает компактный JSON {"count":N,"groups":[...]} с id, name, type, entity_class, team, tier, metadata.labels и количеством правил. Пустые team / labels означают, что значение не задано.

get_alert_config

  • search_term (string, необязательный): Полнотекстовый поиск по имени, группе, источнику данных, тегам.
  • rule_name (string, необязательный)
  • severity (string, необязательный)
  • rule_type (string, необязательный): static или anomaly.
  • alert_group_name / alert_group_type / data_source_name (string, необязательный)
  • tags (array, необязательный): Все должны совпадать (логика И).

get_alerts

  • time_iso (string, необязательный): Время оценки в формате RFC3339.
  • window (integer, необязательный): Период просмотра в секундах. По умолчанию: 900. Диапазон: 60–86400.
  • lookback_minutes (integer, необязательный): Диапазон: 1–1440.

get_alert_rule_state

  • start_time (integer, обязательный): Начало диапазона в Unix-эпохе (включительно).
  • end_time (integer, обязательный): Конец диапазона в Unix-эпохе (включительно).
  • step (integer, обязательный): Разрешение в секундах между выборками. Количество выборок ((end_time - start_time) / step + 1) ограничено 100.
  • alert_group_id (string, необязательный): Фильтр по ID группы оповещений.
  • rule_name (string, необязательный): Regex-фильтр по имени правила.
  • alert_group_name (string, необязательный): Regex-фильтр по имени группы оповещений.
  • label_filters (string, необязательный): Фильтры меток key=value, разделённые запятыми.
  • state (string, необязательный): Фильтр по состоянию (например, firing).

Возвращает JSON-карту rule_id -> [{timestamp, is_firing}]. Временная метка, в которой правило отсутствует в ответе вышестоящей системы, сообщается как is_firing=0 — это означает «не наблюдалось как срабатывающее», а не подтверждённое нормальное состояние.

get_notification_channels

Без параметров. Возвращает все настроенные каналы уведомлений (Slack, PagerDuty, email, вебхуки и т. д.).

did_you_mean

  • query (string, обязательный): Имя для поиска — частичное, с опечаткой или сокращённое.
  • type (string, необязательный): Ограничение по типу сущности: service, environment, host, database, k8s_deployment, k8s_namespace, job.

Возвращает до 3 ближайших совпадений с оценками схожести. Используйте это перед любым вызовом инструмента, если имя сущности неопределённо. Если предыдущий вызов вернул пустые результаты, попробуйте это перед повторной попыткой.

get_service_profile

  • service_name (string, обязательный): Сервис, для которого нужно получить телеметрический профиль.
  • datasource (string, необязательный): Имя источника данных. Опустите для источника по умолчанию.

Возвращает краткую сводку для расследования, за которой следует полный профиль в виде необработанного JSON: наличие сигналов (logs/traces/metrics как present, absent или unknown), язык и среда выполнения, среды развёртывания, signal_shape логов (log_format, severity_set, level_field) и рекомендуемое исправление приёма данных, если применимо. Получено из вышестоящей системы и кэшируется с TTL около 15 минут.

Вызывайте это перед любым расследованием, ограниченным сервисом, чтобы выбор инструментов соответствовал фактической телеметрии сервиса — пропускайте инструменты трассировки, когда traces равен absent, а когда severity_set равен none или partial, извлекайте серьёзность из level_field в теле лога, а не используйте severity_filters. metrics всегда unknown, а dependencies не заполнен в v1. Когда logs и traces оба равны absent, подтвердите имя с помощью did_you_mean, прежде чем делать вывод, что сервис не мониторится.

list_dashboards

Без параметров. Возвращает все пользовательские дашборды в организации в виде JSON-массива с id, name и метаданными.

get_dashboard

  • id (string, обязательный): UUID дашборда.
  • region (string, необязательный): Регион для заполнения запросов панелей. По умолчанию — регион настроенного источника данных.

validate_dashboard

Только чтение. Никогда не создаёт и не обновляет дашборды. Принимает ровно один из dashboard_id или dashboard_definition.

  • dashboard_id (string, необязательный): UUID сохранённого дашборда для проверки.
  • dashboard_definition (object, необязательный): Встроенное тело несохранённого дашборда (истинный прогон без сохранения).
  • start_time_iso / end_time_iso (string, необязательный): Окно проверки (RFC3339). Должно быть ≤ 24 ч.
  • region (string, необязательный): Регион для выполнения запросов панелей.

Возвращает dashboard_validation/v1: классификация lint + выполнение по каждой панели (data / no_data / invalid / error). Пустые результаты на первый день классифицируются как valid_no_data без диагностических проб.

create_dashboard

Только новый. После того как этот вызов вернёт dashboard.id, уточняйте с помощью update_dashboard — не создавайте снова, чтобы добавить, обрезать или исправить панели.

  • dashboard (object, обязательный): Определение дашборда с name и panels[]. Каждая панель требует name, version, layout (x, y, w, h), visualization.type и queries[].
  • metadata (object, необязательный): Метаданные дашборда — поля _category и _type (например, {"_category":"custom","_type":"metrics"}).

update_dashboard

Предпочтительно использовать после create. Полная замена по id (то же тело, что и при create).

  • id (string, обязательный): UUID дашборда для обновления.
  • dashboard (object, обязательный): Полное тело замены дашборда (та же структура, что и при create).
  • metadata (object, необязательный): Замена метаданных. Системные дашборды только для чтения возвращают ошибку 403.

delete_dashboard

  • id (string, обязательный): UUID дашборда для удаления. Системные дашборды только для чтения не могут быть удалены.

list_dashboard_snapshots

  • dashboard_id (string, обязательный): UUID дашборда, чьи снимки нужно перечислить.

Возвращает только метаданные (id, name, expires_at и т. д.). Используйте get_dashboard_snapshot для замороженных данных панелей.

get_dashboard_snapshot

  • id (string, обязательный): UUID снимка.

Возвращает полный замороженный снимок, включая dashboard_definition, panel_data, time_range и variables.

delete_dashboard_snapshot

  • id (string, обязательный): UUID снимка для удаления.

get_profile_services

  • lookback_minutes / start_time_iso / end_time_iso (необязательный): Окно; предпочтительно использовать период просмотра или явные границы ISO (по умолчанию 60 м).
  • region (string, необязательный): Переопределение региона.

Возвращает сервисы, имеющие данные профилирования в окне. Вызывайте это перед get_flamegraph / get_top_functions / get_profile_summary.

get_flamegraph

  • service (string, обязательный): Имя сервиса из get_profile_services.
  • profile_type (string, необязательный): cpu (по умолчанию), alloc или wall. Закрепите тип при сравнении окон.
  • env / cluster / namespace / runtime (string, необязательный): Фильтры области.
  • limit (number, необязательный): Максимум агрегированных строк стека (по умолчанию 1000, максимум 10000).
  • lookback_minutes / start_time_iso / end_time_iso / region (необязательный).

Возвращает вложенное дерево флеймграфа (name / value / self / children). truncated: true означает, что достигнут лимит строк API.

get_top_functions

Те же фильтры, что и в get_flamegraph. Возвращает ранжирование по собственным выборкам самых «горячих» функций. Может быть усечено; проверьте truncated.

get_profile_summary

Те же фильтры, что и в get_flamegraph. Возвращает краткую сортировку профиля для сервиса на естественном языке.

grafana_search_dashboards

  • query (string, необязательный): Подстрока заголовка. Пустое значение ищет широко (с учётом ограничения в 5000 строк).

Возвращает {"dashboards":[…], "truncated":bool} с uid, title, uri, url, type, tags. Используйте uid с grafana_get_dashboard.

grafana_get_dashboard

  • uid (string, обязательный): UID дашборда Grafana.
  • full_json (boolean, необязательный): Если true, возвращает необработанный JSON Grafana вместо отфильтрованной сводки. Default summary: version, tags, templating variables, and each panel's type/datasource/gridPos/promQL targets. Unknown plugin panel types appear in unsupportedPanelTypes.

grafana_list_folders

Без параметров. Возвращает дерево папок.

grafana_list_folder_dashboards

  • folder_uid (строка, обязательный): UID папки Grafana.

Возвращает {"dashboards":[…], "truncated":bool} для панелей в этой папке (постранично, до 5 000).

grafana_list_datasources

Без параметров. Возвращает безопасную проекцию источников данных (без полей с учетными данными).


Тестирование

См. TESTING.md для настройки и инструкций по интеграционному тестированию.


MseeP.ai Security Assessment Badge