Last9
oficialIntegra sin problemas el contexto de producción en tiempo real (logs, métricas y trazas) a tu entorno local para corregir código más rápido de forma automática.
¿Qué puedes hacer con Last9 MCP?
-
Investigar el estado del servicio — Solicite un resumen clasificado de la flota con conteos de solicitudes, rendimiento y tasas de error mediante
get_service_summary. -
Extraer registros de servicio sin procesar — Recupere líneas de registro filtradas por severidad o contenido del cuerpo para un servicio específico usando
get_service_logs. -
Trazar el rendimiento de la base de datos — Descubra bases de datos, consultas lentas y patrones de consulta con
get_databasesy herramientas relacionadas. -
Ejecutar consultas PromQL — Ejecute consultas de rango o instantáneas sobre cualquier métrica usando
prometheus_range_queryoprometheus_instant_query. -
Correlacionar cambios con incidentes — Obtenga eventos de implementación y cambios de configuración para entender qué alteró el comportamiento de producción mediante
get_change_events. -
Gestionar paneles personalizados — Liste, cree, actualice o valide paneles programáticamente con
list_dashboardsycreate_dashboard.
Documentación
Servidor MCP de Last9

Tu agente de IA no sabe qué está fallando en producción. Esto lo soluciona.
Servidor MCP de Last9 conecta Claude, Cursor, Windsurf y cualquier otro asistente de IA compatible con MCP directamente a tus datos de observabilidad en producción: logs, métricas, trazas, excepciones, consultas de base de datos, alertas y despliegues. El agente deja de adivinar y empieza a leer la señal real.
Comienza en 30 segundos (Alojado)
Sin binario que instalar. Sin tokens que gestionar. Una URL, OAuth en tu navegador, listo.
Encuentra el slug de tu organización en tu URL de Last9: app.last9.io/<org_slug>/...
Claude Code
claude mcp add --transport http last9 https://app.last9.io/api/v4/organizations/<org_slug>/mcp
Escribe /mcp, selecciona last9, autentícate. Eso es todo.
Cursor
Configuración > MCP > Añadir nuevo servidor MCP:
{
"mcpServers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Haz clic en Conectar, completa OAuth.
VS Code
Requiere v1.99+. Abre la Paleta de Comandos → MCP: Añadir servidor, pega la URL, autentícate.
O directamente en settings.json:
{
"mcp": {
"servers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
}
Windsurf
Configuración > Cascade > Abrir MCP Marketplace > icono de engranaje (mcp_config.json):
{
"mcpServers": {
"last9": {
"serverUrl": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Claude Web/Desktop
Configuración > Conectores > Añadir conector personalizado. Nómbralo last9, pega la URL, autentícate.
Requiere acceso de administrador a tu organización de Claude.
Autoalojado (STDIO)
Úsalo cuando tu cliente MCP no admita transporte HTTP, o cuando necesites el servidor ejecutándose localmente.
Instalación
Homebrew:
brew install last9/tap/last9-mcp
NPM:
npm install -g @last9/mcp-server@latest
# or directly:
npx -y @last9/mcp-server@latest
Lanzamientos binarios (Windows / manual):
Descarga desde Lanzamientos de GitHub:
| Plataforma | Archivo |
|---|---|
| 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 |
Obtener un token de actualización
Solo los administradores pueden crear tokens.
- Ve a Acceso a la API
- Haz clic en Generar token con permisos de escritura
- Cópialo
Configuración del cliente
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>"
}
}
}
}
Dónde pegar esto:
| Cliente | Ubicación |
|---|---|
| Claude Web/Desktop | Configuración > Desarrollador > Editar configuración (claude_desktop_config.json) |
| Cursor | Configuración > Configuración de Cursor > MCP > Añadir nuevo servidor MCP global |
| Windsurf | Configuración > Cascade > MCP Marketplace > icono de engranaje (mcp_config.json) |
| VS Code | Envuelve en { "mcp": { "servers": { ... } } } en settings.json — detalles |
Configuración STDIO de VS Code
{
"mcp": {
"servers": {
"last9": {
"type": "stdio",
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
}
Para NPM: usa "command": "npx" y añade "args": ["-y", "@last9/mcp-server@latest"].
Windows
Después de descargar desde Lanzamientos de GitHub, extrae y apunta a la ruta completa:
{
"mcpServers": {
"last9": {
"command": "C:\\Users\\<user>\\AppData\\Local\\Programs\\last9-mcp-server.exe",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
La ruta de NPM es más fácil en Windows: sin gestión de rutas.
Variables de entorno
| Variable | Predeterminado | Descripción |
|---|---|---|
LAST9_REFRESH_TOKEN | (obligatorio) | Token de actualización desde Acceso a la API |
LAST9_DATASOURCE | predeterminado de la org | Nombre del datasource/clúster: útil cuando tienes varios clústeres de Levitate |
LAST9_API_HOST | app.last9.io | Anula el host de la API |
LAST9_TOOLSETS | todas las herramientas | Conjuntos de herramientas separados por comas para exponer (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). Alias: LAST9_MCP_TOOLSETS |
LAST9_MAX_GET_LOGS_ENTRIES | 5000 | Máximo de entradas para solicitudes fragmentadas de get_logs |
LAST9_USE_LOG_SEARCH_API | false | Establece true para responder get_logs y get_service_logs con una sola llamada de búsqueda del lado del servidor en lugar de fragmentación del lado del cliente |
LAST9_DEBUG_CHUNKING | false | Establece true para registrar los detalles de planificación de fragmentos para get_logs, get_service_logs, get_traces |
LAST9_DISABLE_TELEMETRY | true | Establece false para habilitar el rastreo OTel interno |
OTEL_SDK_DISABLED | — | Variable de entorno OTel estándar. Anula LAST9_DISABLE_TELEMETRY |
OTEL_EXPORTER_OTLP_ENDPOINT | — | Endpoint del colector OTLP (solo cuando la telemetría está habilitada) |
OTEL_EXPORTER_OTLP_HEADERS | — | Cabeceras de autenticación OTLP (solo cuando la telemetría está habilitada) |
Qué puede hacer
Salud del servicio
get_service_summary— Filas clasificadas de(service, env)de la flota: request_count del intervalo, throughput_rpm, recuentos de HTTP 4xx/5xx y recuentos de errores gRPCget_service_environments— Entornos disponibles para tus servicios. Ejecuta esto primero: otras herramientas de APM necesitanenvde aquíget_service_performance_details— Desglose completo: throughput, tasa de error, p50/p90/p95/avg/max, apdex, disponibilidadget_service_operations_summary— Operaciones agrupadas por endpoints HTTP, llamadas a BD, mensajería, clientes HTTPget_service_dependency_graph— Mapa de dependencias con throughput, latencia y tasas de error para upstream/downstream/infraget_apm_service_deviations— Compara una ventana actual contra una línea base de duración igual: regresiones/mejoras, reconciliación de Apdex y un resultado terminal (flota o servicio único)get_exceptions— Excepciones del lado del servidor con filtros de servicio y span
Observabilidad de bases de datos
Cuatro herramientas que van directamente al rendimiento de tu base de datos, derivadas de spans de trazas de OpenTelemetry y, donde no hay trazas, de métricas de infraestructura como CloudWatch. No se necesita instrumentación adicional si ya usas OTel.
get_databases— Descubre todas las bases de datos en tu infraestructura: tipo de BD, host, throughput (consultas/min), latencia p95, tasa de error, número de servicios dependientes. También descubre bases de datos desde métricas de infraestructura como CloudWatch, sin necesidad de instrumentación de trazas: esas filas llevan un valor de actividad en lugar de métricas de trazasget_database_slow_queries— Las ejecuciones de consultas más lentas reales, ordenadas por duración, con IDs de traza para profundizar en trazas completasget_database_queries— Patrones y agregados de consultas: con qué frecuencia se ejecuta una consulta, duración promedio/p95, tasa de errorget_database_server_metrics— Métricas del lado del servidor del propio host de BD (CPU, conexiones, tasas de acierto de buffer: depende de tu sistema de BD)
Admite PostgreSQL, MySQL, MongoDB, Redis, Aerospike y cualquier otra cosa que OTel trace con un atributo db_system — además de bases de datos descubiertas desde métricas de infraestructura como CloudWatch, cuyas filas llevan un valor de actividad en lugar de métricas de trazas.
Prometheus / PromQL
prometheus_range_query— Consultas de rango PromQL sobre cualquier métricaprometheus_instant_query— Consultas instantáneas; usa funciones de rollup comoavg_over_time,sum_over_timeprometheus_label_values— Valores de etiqueta para una serie dadaprometheus_labels— Todas las etiquetas disponibles para una serie
Apúntalos a un datasource/clúster diferente del predeterminado configurando LAST9_DATASOURCE.
Logs
get_logs— Consultas completas de logs de pipeline JSON (agregaciones, filtros, extracción de campos)get_service_logs— Líneas de log sin procesar para un servicio, filtrables por severidad y contenido del cuerpoget_log_attributes— Catálogo global de atributos en el esquema de logs para una ventana de tiempoget_log_attributes_for_pipeline— Campos de log realmente presentes para un pipeline en curso (descubrimiento con alcance), cada uno con sufilter_fieldexactoget_drop_rules— Reglas de descarte de logs desde Plano de control de Last9add_drop_rule— Crea una nueva regla de descarte para reducir el volumen de logs en el origen
Trazas
get_traces— Consultas de trazas de pipeline JSON para búsquedas amplias y agregacionesget_service_traces— Trazas por ID de traza exacto o nombre de servicio. Úsalo cuando tengas un ID de traza: es más rápidoget_trace_attributes— Catálogo global de atributos en el esquema de trazasget_trace_attributes_for_pipeline— Atributos realmente presentes para un pipeline en curso (descubrimiento con alcance), cada uno con sufilter_fieldexactoget_trace_attribute_values— Valores distintos para un atributo de traza, opcionalmente con alcance a un pipelineget_trace_attribute_deviations— Clasifica valores de atributos que difieren entre dos cohortes de spans acotadas (lento vs rápido, error vs no error, o dos ventanas de tiempo). Correlación, no causaget_trace_waterfall— Una traza exacta como cascada padre/hijo con tiempo propio de unión de intervalos, spans más lentos y advertencias de grafo
Eventos de cambio y alertas
get_change_events— Despliegues, cambios de configuración, reversiones. Correlaciona incidentes con lo que cambióget_alert_groups— Grupos de alertas de Compass configurados con metadatos, etiquetas, equipo, nivel y recuentos de reglas — incluidos grupos con cero reglas y grupos que no están disparandoget_alert_config— Configuraciones de reglas de alerta: buscables por nombre, severidad, tipo, etiquetasget_alerts— Alertas disparándose actualmente dentro de una ventana de tiempoget_alert_rule_state— Estado histórico de disparo (1/0) por regla de alerta en un rango de tiempo, agrupado porrule_id. Filtrable por grupo de alertas, nombre de regla, filtros de etiqueta y estado.get_notification_channels— Canales de notificación configurados (Slack, PagerDuty, correo electrónico, etc.)
Paneles personalizados
list_dashboards— Todos los paneles personalizados en tu organización: IDs, nombres y metadatosget_dashboard— Definición completa del panel por ID, incluidos paneles y consultasvalidate_dashboard— Lint de solo lectura + ejecución + clasificación para un ID de panel guardado o undashboard_definitionen línea sobre una ventana de ≤24 h. Nunca crea ni actualiza panelescreate_dashboard— Crea un panel personalizado completamente nuevo una vez (paneles, consultas, metadatos). Después de que se devuelva el ID, refina conupdate_dashboard.update_dashboard— Refina un panel existente por ID (reemplazo completo; los paneles de sistema de solo lectura devuelven un error)delete_dashboard— Elimina un panel personalizado por IDlist_dashboard_snapshots— Instantáneas congeladas en un punto en el tiempo para un panel (solo metadatos)get_dashboard_snapshot— Instantánea congelada completa incluidos los datos de los paneles para RCA / vistas compartiblesdelete_dashboard_snapshot— Elimina una instantánea congelada por ID
Perfilado continuo
Requiere perfilado continuo habilitado para la organización. Descubre servicios primero con get_profile_services, luego extrae un flamegraph o funciones clasificadas.
get_profile_services— Servicios que tienen datos de perfilado en la ventana (índice antes de consultar)get_flamegraph— Árbol flamegraph anidado para un servicio (cpupredeterminado; tambiénalloc,wall)get_top_functions— Clasificación de auto-muestras de las funciones más activas para un servicioget_profile_summary— Triage breve en lenguaje natural del perfil para un servicio
Paneles de Grafana
Herramientas de solo lectura contra la instancia de Grafana de la organización (a través del proxy de Grafana de Last9). Los campos de credenciales nunca se devuelven al modelo. Habilita con LAST9_TOOLSETS=grafana (o deja los conjuntos de herramientas sin configurar para todas las herramientas).
grafana_search_dashboards— Busca paneles por subcadena en el título (paginado;truncated: truecuando se alcanza el límite)grafana_get_dashboard— Resumen del panel por uid (paneles, variables, objetivos PromQL);full_json=truepara el JSON crudo de Grafanagrafana_list_folders— Árbol de carpetasgrafana_list_folder_dashboards— Paneles en una carpeta (paginado)grafana_list_datasources— Inventario de fuentes de datos sin credenciales
Resolución difusa de nombres
did_you_mean— Cuando el agente no está seguro sobre un nombre de entidad, esto devuelve las coincidencias más cercanas de tu catálogo (servicios, entornos, hosts, bases de datos, despliegues/namespaces de K8s, trabajos). Hasta 3 sugerencias con puntuaciones de similitud. El servidor llama a esto automáticamente antes de la mayoría de las herramientas cuando una búsqueda de nombre devuelve vacío.
Perfil de servicio
get_service_profile— Cómo se ve realmente la telemetría de un servicio, antes de consultarlo: qué señales existen, lenguaje y runtime, entornos de despliegue, la forma de sus logs, y una corrección de ingesta recomendada cuando corresponde. Permite al agente omitir herramientas de trazas cuando un servicio no tiene trazas, y analizar la severidad desde el cuerpo del log cuandoSeverityTextestá vacío en lugar de filtrar por ello y no encontrar nada.
Cómo funciona
Enlaces profundos en cada respuesta. Cada herramienta devuelve un campo deep_link — una URL directa al panel de Last9 para esa consulta exacta y rango de tiempo. El agente puede darte el enlace; haces clic; estás allí.
Conjuntos de herramientas. Por defecto, el servidor expone todas las herramientas. Los hosts de automatización que solo necesitan investigación (logs/trazas/métricas/perfiles) pueden configurar LAST9_TOOLSETS=investigate (o pasar --toolsets=investigate) para que tools/list se mantenga pequeño sin deshabilitar masivamente desde el cliente. Paquetes con nombre: logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all. Los nombres desconocidos fallan rápidamente. El paquete metrics solo no incluye list_datasources ni did_you_mean — usa investigate (o combina conjuntos de herramientas) cuando necesites esos ayudantes de descubrimiento.
Recursos de referencia de herramientas. Los manuales largos de logjson/tracejson/service-logs/metrics son recursos MCP (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics, last9://reference/investigation), no texto de descripción de herramientas siempre activo. Las reglas críticas de consulta permanecen en la descripción de la herramienta para que los agentes que nunca llaman a resources/read aún reciban orientación correcta de construcción. Descubre campos específicos de la organización con get_log_attributes / get_log_attributes_for_pipeline (y los equivalentes de trazas)—no se inyectan en las descripciones.
Resultados grandes fragmentados. get_logs y get_traces manejan grandes conjuntos de resultados mediante fragmentación en lugar de truncamiento. El límite predeterminado es 5000 entradas para logs; configurable mediante LAST9_MAX_GET_LOGS_ENTRIES.
Desarrollo
Modo HTTP, pruebas con curl, compilación desde el código fuente
Ejecutar en modo HTTP
export LAST9_REFRESH_TOKEN="your_refresh_token"
export LAST9_HTTP=true
export LAST9_PORT=8080
./last9-mcp-server
El servidor se inicia en http://localhost:8080/mcp.
Probar con curl
El manejador HTTP Streamable se ejecuta en modo sin estado, por lo que cualquier solicitud se atiende de forma independiente. Un handshake initialize y un encabezado Mcp-Session-Id son opcionales — los clientes que los envían aún funcionan (el encabezado se acepta e ignora), y los clientes también pueden saltar directamente a tools/list / tools/call. Cada herramienta es una consulta independiente de solicitud/respuesta; el servidor no emite notificaciones de servidor→cliente, por lo que GET /mcp (el flujo SSE) devuelve 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
}
}
}'
Compilar desde el código fuente
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 es para desarrollo local. Para uso real, el endpoint HTTP alojado es más fácil.
Referencia de herramientas
Todos los parámetros, estándares de entrada de tiempo y detalles
Entrada de tiempo
- Los tiempos absolutos (
start_time_iso/end_time_iso, otime_iso) tienen prioridad sobrelookback_minutes. - Para ventanas relativas: usa
lookback_minutes. - Para ventanas absolutas: usa RFC3339/ISO8601 —
2026-02-09T15:04:05Z. - El
YYYY-MM-DD HH:MM:SSheredado se acepta solo por compatibilidad.
get_exceptions
limit(entero, opcional): Máximo de excepciones. Predeterminado: 20.lookback_minutes(entero, opcional): Predeterminado: 60.start_time_iso/end_time_iso(cadena, opcional): Rango de tiempo absoluto.service_name(cadena, opcional): Filtrar por servicio.span_name(cadena, opcional): Filtrar por nombre de span.env(cadena, opcional): Filtrar por entorno.
get_service_summary
start_time_iso/end_time_iso(cadena, opcional)env(cadena, opcional): Regex PromQL. Predeterminado a.*. La coincidencia exacta necesita anclas (p. ej.^prod$).sort_by(cadena, opcional):request_count(predeterminado),throughput_rpm,http_4xx_count,http_5xx_countogrpc_error_count.limit(entero, opcional): Máximo de filas clasificadas. Omitir o 0 significa 10; valores superiores a 100 se limitan a 100.
get_service_environments
start_time_iso/end_time_iso(cadena, opcional)
Todas las demás herramientas APM requieren un valor
env. Usa""si esto devuelve vacío.
get_service_performance_details
service_name(cadena, obligatorio)lookback_minutes(entero, opcional): Predeterminado: 60.start_time_iso/end_time_iso(cadena, opcional)env(cadena, opcional): Predeterminado aprod.
get_service_operations_summary
service_name(cadena, obligatorio)lookback_minutes(entero, opcional): Predeterminado: 60.start_time_iso/end_time_iso(cadena, opcional)env(cadena, opcional): Predeterminado aprod.
get_service_dependency_graph
service_name(cadena, opcional)lookback_minutes(entero, opcional): Predeterminado: 60.start_time_iso/end_time_iso(cadena, opcional)env(cadena, opcional): Predeterminado aprod.
get_apm_service_deviations
service_name(cadena, opcional): Omitir para alcance de flota; proporcionar para un servicio y sus correlaciones de operaciones.lookback_minutes(entero, opcional): Ventana actual. Predeterminado: 60.start_time_iso/end_time_iso(cadena, opcional): Ventana actual explícita.baseline_start_time_iso/baseline_end_time_iso(cadena, opcional): Línea base explícita. Predeterminado a la ventana inmediatamente anterior de igual duración.datasource(cadena, opcional): Restringir la comparación a una fuente de datos.env(cadena, opcional): Predeterminado aprod.max_services/max_operations(entero, opcional): Predeterminado 10, máximo 10 cada uno.
get_databases
env(cadena, opcional): Filtrar por entorno. Acepta una expresión regular. Predeterminado: todos.lookback_minutes(entero, opcional): Predeterminado: 60. La ventana no puede exceder 7 días.start_time_iso/end_time_iso(cadena, opcional)
get_database_slow_queries
db_system(cadena, opcional): p. ej.postgresql,mysql,mongodb,redis.host(cadena, opcional): Host de base de datos (net_peer_name).service_name(cadena, opcional): Nombre del servicio que llama.env(cadena, opcional)min_duration_ms(flotante, opcional): Duración mínima de consulta en ms.lookback_minutes(entero, opcional): Predeterminado: 60.start_time_iso/end_time_iso(cadena, opcional)limit(entero, opcional): Predeterminado: 20.
get_database_queries
db_system(cadena, opcional)host(cadena, opcional)service_name(cadena, opcional)env(cadena, opcional)lookback_minutes(entero, opcional): Predeterminado: 60.start_time_iso/end_time_iso(cadena, opcional)limit(entero, opcional): Predeterminado: 20.
get_database_server_metrics
db_system(cadena, obligatorio): p. ej.postgresql,mysql,mongodb,redis,aerospike.host(cadena, opcional)lookback_minutes(entero, opcional): Predeterminado: 60.start_time_iso/end_time_iso(cadena, opcional)
prometheus_range_query
query(cadena, obligatorio): La consulta PromQL.start_time_iso/end_time_iso(cadena, opcional): Predeterminado a los últimos 60 min.lookback_minutes(flotante, opcional): Predeterminado: 60.
prometheus_instant_query
query(cadena, obligatorio)time_iso(cadena, opcional): Predeterminado a ahora.lookback_minutes(flotante, opcional)
prometheus_label_values
match_query(cadena, opcional): Filtro PromQL.label(cadena, obligatorio): Nombre de la etiqueta.start_time_iso/end_time_iso(cadena, opcional)
prometheus_labels
match_query(cadena, opcional): Filtro PromQL.start_time_iso/end_time_iso(cadena, opcional)
get_logs
logjson_query(array, obligatorio): Consulta de pipeline JSON.lookback_minutes(entero, opcional): Predeterminado: 5.start_time_iso/end_time_iso(cadena, opcional)limit(entero, opcional): Predeterminado del servidor: 5000.index(cadena, opcional):physical_index:<name>orehydration_index:<block_name>.
Para inventario de servicios basado en logs, consulta physical_index_service_count primero:
sum by (name, service_name, env) (physical_index_service_count{destination="logs"})
Usa service_name como ServiceName, env como el entorno cuando esté presente, y name como el nombre del índice físico. Si name="default", omite index; para un índice físico no predeterminado seleccionado por el usuario, pasa index: "physical_index:<name>". Si el backend rechaza el filtrado explícito de índice físico, reintenta sin index e informa que el filtrado explícito de índice físico no está disponible para ese backend.
get_service_logs
service_name(cadena, obligatorio)lookback_minutes(entero, opcional): Predeterminado: 60.limit(entero, opcional): Predeterminado: 20.env(cadena, opcional)severity_filters(array, opcional): p. ej.["error", "warn"]. Lógica OR.body_filters(array, opcional): p. ej.["timeout", "failed"]. Lógica OR.start_time_iso/end_time_iso(cadena, opcional)index(cadena, opcional)
Múltiples tipos de filtro se combinan con AND. Cada array usa OR internamente.
Usa get_logs para conteos agregados amplios primero; usa get_service_logs solo después de reducir a un servicio/entorno/índice y un conjunto de muestra pequeño.
get_log_attributes
lookback_minutes(entero, opcional): Predeterminado: 15.start_time_iso/end_time_iso(cadena, opcional)region(cadena, opcional)index(cadena, opcional)
get_log_attributes_for_pipeline
pipeline(array, obligatorio): Etapas de filtro previas para limitar el descubrimiento, p. ej.[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(entero, opcional): Predeterminado: 15.start_time_iso/end_time_iso(cadena, opcional)region(cadena, opcional)index(cadena, opcional)
get_drop_rules
Sin parámetros. Lista reglas de descarte mediante GET /otel_settings/drop?region=....
add_drop_rule
name(cadena, obligatorio)filters(array, obligatorio): Cada filtro:key,value,operator(equals/not_equals),conjunction(and).- Las claves de filtro deben usar
attributes["key_name"]oresource.attributes["key_name"](requerido por la API de Last9). - Crea la regla mediante
POST /otel_settings/drop?region=...&cluster_id=....
get_traces
Usa para búsquedas amplias y agregaciones. Para búsqueda exacta de ID de traza, usa get_service_traces.
tracejson_query(array, obligatorio)start_time_iso/end_time_iso(cadena, opcional)lookback_minutes(entero, opcional): Predeterminado: 60.limit(entero, opcional): Predeterminado: 5000.
get_service_traces
Exactamente uno de trace_id o service_name es obligatorio.
trace_id(string, opcional): Retroceso predeterminado: 72 horas.service_name(string, opcional): Retroceso predeterminado: 60 min.lookback_minutes(integer, opcional)start_time_iso/end_time_iso(string, opcional)limit(integer, opcional): Predeterminado: 10.env(string, opcional)
get_trace_attributes
lookback_minutes(integer, opcional): Predeterminado: 15.start_time_iso/end_time_iso(string, opcional)region(string, opcional)
get_trace_attributes_for_pipeline
pipeline(array, obligatorio): Etapas de filtro previas para delimitar el descubrimiento, p. ej.[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(integer, opcional): Predeterminado: 15.start_time_iso/end_time_iso(string, opcional)region(string, opcional)
get_trace_attribute_values
tag_name(string, obligatorio): Nombre del atributo deget_trace_attributes(p. ej.resource_departmentoattributes['http.method']).pipeline(array, opcional): Etapas de filtro previas para delimitar los valores; omitir para valores globales.lookback_minutes(integer, opcional): Predeterminado: 15.start_time_iso/end_time_iso(string, opcional): Límites históricos RFC3339; tienen prioridad sobrelookback_minutes.region(string, opcional)
get_trace_attribute_deviations
comparison_mode(string, obligatorio):latency,errorsotime.service_name(string, obligatorio)environment(string, obligatorio): Valor exacto dedeployment.environment.operation(string, opcional)filters(array, opcional): Condiciones de filtro JSON de trazas.candidate_attributes(array, opcional): Máximo 8; omitir para descubrimiento acotado.latency_threshold_ms(number, opcional): Obligatorio para el modolatency; rechazado para otros modos.start_time_iso/end_time_iso(string, opcional)lookback_minutes(integer, opcional): Predeterminado: 15. Máximo: 15.baseline_start_time_iso/baseline_end_time_iso(string, opcional): Obligatorio para el modotime; no superpuestos y de duración igual a la ventana objetivo.minimum_cohort_size(integer, opcional): Predeterminado: 100. Mínimo: 20.minimum_value_support(integer, opcional): Predeterminado: 20. Mínimo: 10.limit(integer, opcional): Predeterminado: 10. Máximo: 10.
Requiere que la capacidad del backend complementario esté habilitada.
get_trace_waterfall
trace_id(string, obligatorio)environment(string, opcional)start_time_iso/end_time_iso(string, opcional)lookback_minutes(integer, opcional): Predeterminado: 4320 (72 horas).selected_span_id(string, opcional): Devuelve atributos, eventos y enlaces solo para ese tramo.max_spans(integer, opcional): Predeterminado: 500. Máximo: 1000.
Devuelve un envoltorio investigation-evidence/v1; la cascada está bajo data.
get_change_events
start_time_iso/end_time_iso(string, opcional)lookback_minutes(integer, opcional): Predeterminado: 60.service_name(string, opcional)env(string, opcional)event_name(string, opcional): Llame sin esto primero para obteneravailable_event_names.
get_alert_groups
Inventario configurado de grupos de alertas de Compass para auditorías de tablero de cambios / cobertura de etiquetas. Incluye grupos con cero reglas y grupos que no están disparando. No devuelve PromQL.
alert_group_name/alert_group_type/data_source_name(string, opcional): Coincidencia de subcadena sin distinción de mayúsculas.team/tier(string, opcional): Coincidencia exacta sin distinción de mayúsculas en metadatos configurados.label_key+label_value(string, opcional): Deben establecerse juntos. Coincidencia exacta sin distinción de mayúsculas en un parmetadata.labels— tanto clave como valor.
Devuelve JSON compacto {"count":N,"groups":[...]} con id, name, type, entity_class, team, tier, metadata.labels y recuentos de reglas. team / labels vacíos significa no establecido.
get_alert_config
search_term(string, opcional): Búsqueda de texto libre en nombre, grupo, fuente de datos, etiquetas.rule_name(string, opcional)severity(string, opcional)rule_type(string, opcional):staticoanomaly.alert_group_name/alert_group_type/data_source_name(string, opcional)tags(array, opcional): Todos deben coincidir (lógica Y).
get_alerts
time_iso(string, opcional): Hora de evaluación en RFC3339.window(integer, opcional): Retroceso en segundos. Predeterminado: 900. Rango: 60–86400.lookback_minutes(integer, opcional): Rango: 1–1440.
get_alert_rule_state
start_time(integer, obligatorio): Inicio del rango en época Unix (inclusive).end_time(integer, obligatorio): Fin del rango en época Unix (inclusive).step(integer, obligatorio): Resolución en segundos entre muestras. El número de muestras((end_time - start_time) / step + 1)está limitado a 100.alert_group_id(string, opcional): Filtrar por ID de grupo de alertas.rule_name(string, opcional): Filtro de expresión regular en el nombre de la regla.alert_group_name(string, opcional): Filtro de expresión regular en el nombre del grupo de alertas.label_filters(string, opcional): Filtros de etiquetaskey=valueseparados por comas.state(string, opcional): Filtrar por estado (p. ej.firing).
Devuelve un mapa JSON de rule_id -> [{timestamp, is_firing}]. Una marca de tiempo en la que una regla está ausente de la respuesta ascendente se informa como is_firing=0 — esto significa "no observado como disparando", no un estado normal confirmado.
get_notification_channels
Sin parámetros. Devuelve todos los canales de notificación configurados (Slack, PagerDuty, correo electrónico, webhooks, etc.).
did_you_mean
query(string, obligatorio): El nombre a buscar — parcial, mal escrito o abreviado.type(string, opcional): Restringir al tipo de entidad:service,environment,host,database,k8s_deployment,k8s_namespace,job.
Devuelve hasta 3 coincidencias más cercanas con puntuaciones de similitud. Úselo antes de cualquier llamada a herramienta donde el nombre de la entidad sea incierto. Si una llamada anterior devolvió resultados vacíos, intente esto antes de reintentar.
get_service_profile
service_name(string, obligatorio): Servicio para derivar un perfil de telemetría.datasource(string, opcional): Nombre de la fuente de datos. Omitir para la predeterminada.
Devuelve un breve informe de investigación seguido del perfil completo como JSON sin procesar: presencia de señales (logs/traces/metrics como present, absent o unknown), lenguaje y tiempo de ejecución, entornos de implementación, signal_shape de registros (log_format, severity_set, level_field) y una corrección de ingesta recomendada cuando corresponde. Derivado aguas arriba y almacenado en caché con un TTL de ~15 minutos.
Llámalo antes de cualquier investigación a nivel de servicio para que la selección de herramientas coincida con la telemetría real del servicio — omita las herramientas de trazas cuando traces sea absent, y cuando severity_set sea none o partial analice la gravedad desde level_field en el cuerpo del registro en lugar de usar severity_filters. metrics siempre es unknown y dependencies no está poblado en v1. Cuando logs y traces sean ambos absent, confirme el nombre con did_you_mean antes de concluir que el servicio no está monitoreado.
list_dashboards
Sin parámetros. Devuelve todos los paneles personalizados en la organización como una matriz JSON con id, name y metadatos.
get_dashboard
id(string, obligatorio): UUID del panel.region(string, opcional): Región para la población de consultas de paneles. Se establece por defecto en la región de la fuente de datos configurada.
validate_dashboard
Solo lectura. Nunca crea ni actualiza paneles. Acepta exactamente uno de dashboard_id o dashboard_definition.
dashboard_id(string, opcional): UUID del panel guardado a validar.dashboard_definition(object, opcional): Cuerpo del panel en línea no guardado (prueba real en seco).start_time_iso/end_time_iso(string, opcional): Ventana de validación (RFC3339). Debe ser ≤ 24 h.region(string, opcional): Región para la ejecución de consultas de paneles.
Devuelve dashboard_validation/v1: clasificación de lint + ejecución por panel (data / no_data / invalid / error). Los resultados vacíos del día 1 se clasifican como valid_no_data sin sondas de diagnóstico.
create_dashboard
Solo nuevo. Después de que esta llamada devuelva dashboard.id, refine con update_dashboard — no cree de nuevo para agregar, recortar o corregir paneles.
dashboard(object, obligatorio): Definición del panel connameypanels[]. Cada panel requierename,version,layout(x,y,w,h),visualization.typeyqueries[].metadata(object, opcional): Metadatos del panel — campos_categoryy_type(p. ej.{"_category":"custom","_type":"metrics"}).
update_dashboard
Prefiera esto después de crear. Reemplazo completo por ID (mismo cuerpo que crear).
id(string, obligatorio): UUID del panel a actualizar.dashboard(object, obligatorio): Cuerpo completo de reemplazo del panel (misma forma que crear).metadata(object, opcional): Metadatos de reemplazo. Los paneles del sistema de solo lectura devuelven un error 403.
delete_dashboard
id(string, obligatorio): UUID del panel a eliminar. Los paneles del sistema de solo lectura no se pueden eliminar.
list_dashboard_snapshots
dashboard_id(string, obligatorio): UUID del panel cuyas instantáneas se listarán.
Devuelve solo metadatos (id, name, expires_at, etc.). Use get_dashboard_snapshot para datos de panel congelados.
get_dashboard_snapshot
id(string, obligatorio): UUID de la instantánea.
Devuelve la instantánea congelada completa, incluidos dashboard_definition, panel_data, time_range y variables.
delete_dashboard_snapshot
id(string, obligatorio): UUID de la instantánea a eliminar.
get_profile_services
lookback_minutes/start_time_iso/end_time_iso(opcional): Ventana; prefiera retroceso o límites ISO explícitos (predeterminado 60 m).region(string, opcional): Anulación de región.
Devuelve los servicios que tienen datos de perfilado en la ventana. Llame a esto antes de get_flamegraph / get_top_functions / get_profile_summary.
get_flamegraph
service(string, obligatorio): Nombre del servicio deget_profile_services.profile_type(string, opcional):cpu(predeterminado),allocowall. Fije un tipo al comparar ventanas.env/cluster/namespace/runtime(string, opcional): Filtros de alcance.limit(number, opcional): Máximo de filas de pila agregadas (predeterminado 1000, máximo 10000).lookback_minutes/start_time_iso/end_time_iso/region(opcional).
Devuelve un árbol de gráfico de llama anidado (name / value / self / children). truncated: true significa que se alcanzó el límite de filas de la API.
get_top_functions
Mismos filtros que get_flamegraph. Devuelve la clasificación de auto-muestreo de las funciones más activas. Puede truncarse; verifique truncated.
get_profile_summary
Mismos filtros que get_flamegraph. Devuelve un breve triaje en lenguaje natural del perfil para el servicio.
grafana_search_dashboards
query(string, opcional): Subcadena del título. Vacío lista ampliamente (sujeto al límite de 5,000 filas).
Devuelve {"dashboards":[…], "truncated":bool} con uid, title, uri, url, type, tags. Use uid con grafana_get_dashboard.
grafana_get_dashboard
uid(string, obligatorio): UID del panel de Grafana.full_json(boolean, opcional): Cuando es verdadero, devuelve el JSON sin procesar de Grafana en lugar del resumen filtrado. Resumen predeterminado: versión, etiquetas, variables de plantilla y el tipo/fuente de datos/posición en cuadrícula/objetivos promQL de cada panel. Los tipos de panel de plugin desconocidos aparecen enunsupportedPanelTypes.
grafana_list_folders
Sin parámetros. Devuelve el árbol de carpetas.
grafana_list_folder_dashboards
folder_uid(cadena, obligatorio): UID de la carpeta de Grafana.
Devuelve {"dashboards":[…], "truncated":bool} para los paneles en esa carpeta (paginado hasta 5,000).
grafana_list_datasources
Sin parámetros. Devuelve una proyección segura de las fuentes de datos (sin campos de credenciales).
Pruebas
Consulta TESTING.md para la configuración e instrucciones de las pruebas de integración.
