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 подключает 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-токена
Только администраторы могут создавать токены.
- Перейдите в API Access
- Нажмите Generate Token с правами Write
- Скопируйте его
Конфигурация клиента
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/Desktop | Settings > Developer > Edit Config (claude_desktop_config.json) |
| Cursor | Settings > Cursor Settings > MCP > Add New Global MCP Server |
| Windsurf | Settings > 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_HOST | app.last9.io | Переопределить хост API |
LAST9_TOOLSETS | все инструменты | Наборы инструментов через запятую (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). Псевдоним: LAST9_MCP_TOOLSETS |
LAST9_MAX_GET_LOGS_ENTRIES | 5000 | Максимальное количество записей для чанкированных запросов get_logs |
LAST9_USE_LOG_SEARCH_API | false | Установите true, чтобы отвечать на get_logs и get_service_logs одним серверным поисковым вызовом вместо клиентского чанкирования |
LAST9_DEBUG_CHUNKING | false | Установите true, чтобы логировать детали планирования чанков для get_logs, get_service_logs, get_traces |
LAST9_DISABLE_TELEMETRY | true | Установите 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 и количество ошибок gRPCget_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_timeprometheus_label_values— Значения меток для заданного рядаprometheus_labels— Все доступные метки для ряда
Укажите другой источник данных/кластер, отличный от стандартного, задав LAST9_DATASOURCE.
Логи
get_logs— Полные запросы к логам JSON-конвейера (агрегации, фильтры, извлечение полей)get_service_logs— Сырые строки логов для сервиса, фильтруемые по severity и содержимому телаget_log_attributes— Глобальный каталог атрибутов в схеме логов за временной интервалget_log_attributes_for_pipeline— Поля логов, фактически присутствующие в выполняющемся конвейере (ограниченное обнаружение), каждое с точнымfilter_fieldget_drop_rules— Правила отбрасывания логов из Last9 Control Planeadd_drop_rule— Создание нового правила отбрасывания для сокращения объёма логов в источнике
Трейсы
get_traces— Запросы к трейсам JSON-конвейера для широкого поиска и агрегацийget_service_traces— Трейсы по точному идентификатору трейса или имени сервиса. Используйте это, когда у вас есть идентификатор трейса — так быстрееget_trace_attributes— Глобальный каталог атрибутов в схеме трейсовget_trace_attributes_for_pipeline— Атрибуты, фактически присутствующие в выполняющемся конвейере (ограниченное обнаружение), каждый с точнымfilter_fieldget_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 JSONgrafana_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 inunsupportedPanelTypes.
grafana_list_folders
Без параметров. Возвращает дерево папок.
grafana_list_folder_dashboards
folder_uid(строка, обязательный): UID папки Grafana.
Возвращает {"dashboards":[…], "truncated":bool} для панелей в этой папке (постранично, до 5 000).
grafana_list_datasources
Без параметров. Возвращает безопасную проекцию источников данных (без полей с учетными данными).
Тестирование
См. TESTING.md для настройки и инструкций по интеграционному тестированию.
