Last9
oficialTraga perfeitamente o contexto de produção em tempo real—logs, métricas e traces—para o seu ambiente local, corrigindo código automaticamente com mais rapidez.
O que você pode fazer com Last9 MCP?
-
Investigar a saúde do serviço — Solicite um resumo classificado da frota com contagens de requisições, throughput e taxas de erro via
get_service_summary. -
Extrair logs brutos do serviço — Recupere linhas de log filtradas por severidade ou conteúdo do corpo para um serviço específico usando
get_service_logs. -
Rastrear desempenho do banco de dados — Descubra bancos de dados, consultas lentas e padrões de consulta com
get_databasese ferramentas relacionadas. -
Executar consultas PromQL — Execute consultas de intervalo ou instantâneas contra qualquer métrica usando
prometheus_range_queryouprometheus_instant_query. -
Correlacionar mudanças com incidentes — Busque eventos de implantação e mudanças de configuração para entender o que alterou o comportamento de produção via
get_change_events. -
Gerenciar dashboards personalizados — Liste, crie, atualize ou valide dashboards programaticamente com
list_dashboardsecreate_dashboard.
Documentação
Servidor MCP Last9

Seu agente de IA não sabe o que está quebrado em produção. Isso resolve isso.
O Servidor MCP Last9 conecta Claude, Cursor, Windsurf e qualquer outro assistente de IA compatível com MCP diretamente aos seus dados de observabilidade em produção — logs, métricas, traces, exceções, consultas de banco de dados, alertas e deploys. O agente para de adivinhar e começa a ler o sinal real.
Comece em 30 segundos (Hospedado)
Sem binário para instalar. Sem tokens para gerenciar. Uma URL, OAuth no seu navegador, pronto.
Encontre o slug da sua organização na sua 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
Digite /mcp, selecione last9, autentique. Só isso.
Cursor
Configurações > MCP > Adicionar Novo Servidor MCP:
{
"mcpServers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Clique em Conectar, conclua o OAuth.
VS Code
Requer v1.99+. Abra a Paleta de Comandos → MCP: Adicionar Servidor, cole a URL, autentique.
Ou diretamente em settings.json:
{
"mcp": {
"servers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
}
Windsurf
Configurações > Cascade > Abrir MCP Marketplace > ícone de engrenagem (mcp_config.json):
{
"mcpServers": {
"last9": {
"serverUrl": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Claude Web/Desktop
Configurações > Conectores > Adicionar conector personalizado. Nomeie como last9, cole a URL, autentique.
Requer acesso de administrador à sua organização Claude.
Auto-hospedado (STDIO)
Use isto quando seu cliente MCP não suportar transporte HTTP, ou quando você precisar do servidor rodando localmente.
Instalação
Homebrew:
brew install last9/tap/last9-mcp
NPM:
npm install -g @last9/mcp-server@latest
# or directly:
npx -y @last9/mcp-server@latest
Lançamentos binários (Windows / manual):
Baixe dos Lançamentos do GitHub:
| Plataforma | Arquivo |
|---|---|
| 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 |
Obter um Token de Atualização
Apenas administradores podem criar tokens.
- Vá para Acesso à API
- Clique em Gerar Token com permissões de Escrita
- Copie-o
Configuração do 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>"
}
}
}
}
Onde colar isto:
| Cliente | Local |
|---|---|
| Claude Web/Desktop | Configurações > Desenvolvedor > Editar Config (claude_desktop_config.json) |
| Cursor | Configurações > Configurações do Cursor > MCP > Adicionar Novo Servidor MCP Global |
| Windsurf | Configurações > Cascade > MCP Marketplace > ícone de engrenagem (mcp_config.json) |
| VS Code | Envolva em { "mcp": { "servers": { ... } } } em settings.json — detalhes |
Config STDIO do VS Code
{
"mcp": {
"servers": {
"last9": {
"type": "stdio",
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
}
Para NPM: use "command": "npx" e adicione "args": ["-y", "@last9/mcp-server@latest"].
Windows
Após baixar dos Lançamentos do GitHub, extraia e aponte para o caminho completo:
{
"mcpServers": {
"last9": {
"command": "C:\\Users\\<user>\\AppData\\Local\\Programs\\last9-mcp-server.exe",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
A rota NPM é mais fácil no Windows — sem gerenciamento de caminho.
Variáveis de Ambiente
| Variável | Padrão | Descrição |
|---|---|---|
LAST9_REFRESH_TOKEN | (obrigatório) | Token de atualização de Acesso à API |
LAST9_DATASOURCE | padrão da org | Nome do datasource/cluster — útil quando você tem vários clusters Levitate |
LAST9_API_HOST | app.last9.io | Substitui o host da API |
LAST9_TOOLSETS | todas as ferramentas | Conjuntos de ferramentas separados por vírgula para expor (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). Alias: LAST9_MCP_TOOLSETS |
LAST9_MAX_GET_LOGS_ENTRIES | 5000 | Máximo de entradas para solicitações get_logs em blocos |
LAST9_USE_LOG_SEARCH_API | false | Defina true para responder get_logs e get_service_logs com uma chamada de busca no lado do servidor em vez de blocos no lado do cliente |
LAST9_DEBUG_CHUNKING | false | Defina true para registrar detalhes de planejamento de blocos para get_logs, get_service_logs, get_traces |
LAST9_DISABLE_TELEMETRY | true | Defina false para habilitar rastreamento OTel interno |
OTEL_SDK_DISABLED | — | Variável de ambiente OTel padrão. Substitui LAST9_DISABLE_TELEMETRY |
OTEL_EXPORTER_OTLP_ENDPOINT | — | Endpoint do coletor OTLP (apenas quando a telemetria está habilitada) |
OTEL_EXPORTER_OTLP_HEADERS | — | Cabeçalhos de autenticação OTLP (apenas quando a telemetria está habilitada) |
O Que Ele Pode Fazer
Saúde do Serviço
get_service_summary— Linhas(service, env)da frota classificadas: request_count do intervalo, throughput_rpm, contagens HTTP 4xx/5xx e contagens de erros gRPCget_service_environments— Ambientes disponíveis para seus serviços. Execute isto primeiro — outras ferramentas APM precisam deenvdaquiget_service_performance_details— Detalhamento completo: throughput, taxa de erro, p50/p90/p95/média/máx, apdex, disponibilidadeget_service_operations_summary— Operações agrupadas por endpoints HTTP, chamadas de banco de dados, mensageria, clientes HTTPget_service_dependency_graph— Mapa de dependências com throughput, latência e taxas de erro para upstream/downstream/infraget_apm_service_deviations— Compare uma janela atual contra uma linha de base de duração igual: regressões/melhorias, reconciliação de Apdex e um resultado final (frota ou serviço único)get_exceptions— Exceções no lado do servidor com filtros de serviço e span
Observabilidade de Banco de Dados
Quatro ferramentas que vão direto ao desempenho do seu banco de dados, derivadas de spans de trace OpenTelemetry e, onde traces estão ausentes, métricas de infraestrutura como CloudWatch. Nenhuma instrumentação extra é necessária se você já usa OTel.
get_databases— Descubra todos os bancos de dados na sua infraestrutura: tipo de banco, host, throughput (consultas/min), latência p95, taxa de erro, número de serviços dependentes. Também descobre bancos de dados a partir de métricas de infraestrutura como CloudWatch, sem necessidade de instrumentação de trace — essas linhas carregam um valor de atividade em vez de métricas de traceget_database_slow_queries— As execuções de consultas mais lentas reais, ordenadas por duração, com IDs de trace para aprofundar em traces completosget_database_queries— Padrões e agregados de consultas: com que frequência uma consulta é executada, duração média/p95, taxa de erroget_database_server_metrics— Métricas no lado do servidor do próprio host do banco (CPU, conexões, taxas de acerto de buffer — depende do seu sistema de banco)
Suporta PostgreSQL, MySQL, MongoDB, Redis, Aerospike e qualquer outra coisa que o OTel rastreie com um atributo db_system — além de bancos de dados descobertos a partir de métricas de infraestrutura como CloudWatch, cujas linhas carregam um valor de atividade em vez de métricas de trace.
Prometheus / PromQL
prometheus_range_query— Consultas de intervalo PromQL sobre qualquer métricaprometheus_instant_query— Consultas instantâneas; use funções de rollup comoavg_over_time,sum_over_timeprometheus_label_values— Valores de rótulo para uma determinada sérieprometheus_labels— Todos os rótulos disponíveis para uma série
Aponte-os para um datasource/cluster diferente do padrão definindo LAST9_DATASOURCE.
Logs
get_logs— Consultas completas de pipeline de logs JSON (agregações, filtros, extração de campos)get_service_logs— Linhas de log brutas para um serviço, filtráveis por severidade e conteúdo do corpoget_log_attributes— Catálogo global de atributos no esquema de logs para uma janela de tempoget_log_attributes_for_pipeline— Campos de log realmente presentes para um pipeline em andamento (descoberta com escopo), cada um com seufilter_fieldexatoget_drop_rules— Regras de descarte de logs do Plano de Controle Last9add_drop_rule— Crie uma nova regra de descarte para reduzir o volume de logs na origem
Traces
get_traces— Consultas de pipeline de traces JSON para buscas amplas e agregaçõesget_service_traces— Traces por ID de trace exato ou nome de serviço. Use isto quando você tiver um ID de trace — é mais rápidoget_trace_attributes— Catálogo global de atributos no esquema de tracesget_trace_attributes_for_pipeline— Atributos realmente presentes para um pipeline em andamento (descoberta com escopo), cada um com seufilter_fieldexatoget_trace_attribute_values— Valores distintos para um atributo de trace, opcionalmente com escopo para um pipelineget_trace_attribute_deviations— Classifica valores de atributos que diferem entre duas coortes de spans limitadas (lento vs rápido, erro vs não-erro, ou duas janelas de tempo). Correlação, não causaget_trace_waterfall— Um trace exato como cascata pai/filho com tempo próprio de união de intervalo, spans mais lentos e avisos de grafo
Eventos de Mudança e Alertas
get_change_events— Deploys, mudanças de configuração, rollbacks. Correlacione incidentes com o que mudouget_alert_groups— Grupos de alertas Compass configurados com rótulos de metadados, equipe, nível e contagens de regras — incluindo grupos com zero regras e grupos que não estão disparandoget_alert_config— Configurações de regras de alerta — pesquisáveis por nome, severidade, tipo, tagsget_alerts— Alertas atualmente disparando dentro de uma janela de tempoget_alert_rule_state— Estado histórico de disparo (1/0) por regra de alerta ao longo de um intervalo de tempo, agrupado porrule_id. Filtrável por grupo de alerta, nome da regra, filtros de rótulo e estado.get_notification_channels— Canais de notificação configurados (Slack, PagerDuty, email, etc.)
Dashboards Personalizados
list_dashboards— Todos os dashboards personalizados na sua organização: IDs, nomes e metadadosget_dashboard— Definição completa do dashboard por ID, incluindo painéis e consultasvalidate_dashboard— Lint somente leitura + execução + classificação para um ID de dashboard salvo ou umdashboard_definitioninline sobre uma janela de ≤24h. Nunca cria ou atualiza dashboardscreate_dashboard— Crie um dashboard personalizado totalmente novo uma vez (painéis, consultas, metadados). Após o ID ser retornado, refine comupdate_dashboard.update_dashboard— Refine um dashboard existente por ID (substituição completa; dashboards de sistema somente leitura retornam um erro)delete_dashboard— Exclua um dashboard personalizado por IDlist_dashboard_snapshots— Snapshots congelados em um ponto no tempo para um dashboard (apenas metadados)get_dashboard_snapshot— Snapshot congelado completo incluindo dados de painel para RCA / visualizações compartilháveisdelete_dashboard_snapshot— Exclua um snapshot congelado por ID
Perfilamento Contínuo
Requer perfilamento contínuo habilitado para a organização. Descubra serviços primeiro com get_profile_services, depois puxe um flamegraph ou funções classificadas.
get_profile_services— Serviços que têm dados de perfilamento na janela (índice antes de consultar)get_flamegraph— Árvore flamegraph aninhada para um serviço (cpupadrão; tambémalloc,wall)get_top_functions— Classificação de auto-amostragem das funções mais quentes para um serviçoget_profile_summary— Triagem curta em linguagem natural do perfil para um serviço
Dashboards Grafana
Ferramentas somente leitura contra a instância Grafana da organização (via proxy Grafana da Last9). Campos de credenciais nunca são retornados ao modelo. Habilite com LAST9_TOOLSETS=grafana (ou deixe os conjuntos de ferramentas não definidos para todas as ferramentas).
grafana_search_dashboards— Busca dashboards por substring no título (paginado;truncated: truequando o limite é atingido)grafana_get_dashboard— Resumo do dashboard por uid (painéis, variáveis, alvos PromQL);full_json=truepara JSON bruto do Grafanagrafana_list_folders— Árvore de pastasgrafana_list_folder_dashboards— Dashboards em uma pasta (paginado)grafana_list_datasources— Inventário de datasources sem credenciais
Resolução Difusa de Nomes
did_you_mean— Quando o agente não tem certeza sobre um nome de entidade, isso retorna as correspondências mais próximas do seu catálogo (serviços, ambientes, hosts, bancos de dados, deployments/namespaces K8s, jobs). Até 3 sugestões com pontuações de similaridade. O servidor chama isso automaticamente antes da maioria das ferramentas quando uma busca por nome retorna vazio.
Perfil de Serviço
get_service_profile— Como a telemetria de um serviço realmente se parece, antes de você consultá-la: quais sinais existem, linguagem e runtime, ambientes de deployment, a forma dos seus logs e uma correção de ingestão recomendada quando aplicável. Permite que o agente pule ferramentas de trace quando um serviço não tem traces, e extraia severidade do corpo do log quandoSeverityTextestá vazio, em vez de filtrar por ele e não encontrar nada.
Como Funciona
Deep links em cada resposta. Cada ferramenta retorna um campo deep_link — uma URL direta para o dashboard do Last9 para aquela consulta exata e intervalo de tempo. O agente pode te entregar o link; você clica; você está lá.
Conjuntos de ferramentas. Por padrão, o servidor expõe todas as ferramentas. Hosts de automação que só precisam de investigação (logs/traces/métricas/perfis) podem definir LAST9_TOOLSETS=investigate (ou passar --toolsets=investigate) para que tools/list permaneça pequeno sem desativação em massa no lado do cliente. Pacotes nomeados: logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all. Nomes desconhecidos falham rapidamente. O pacote metrics sozinho não inclui list_datasources ou did_you_mean — use investigate (ou combine conjuntos de ferramentas) quando precisar desses auxiliares de descoberta.
Recursos de referência de ferramentas. Manuais longos de logjson/tracejson/service-logs/métricas são recursos MCP (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics, last9://reference/investigation), não texto de descrição de ferramenta sempre ativo. Regras críticas de consulta permanecem na descrição da ferramenta para que agentes que nunca chamam resources/read ainda recebam orientação correta de construção. Descubra campos específicos da organização com get_log_attributes / get_log_attributes_for_pipeline (e os equivalentes de trace) — eles não são injetados nas descrições.
Resultados grandes em partes. get_logs e get_traces lidam com grandes conjuntos de resultados por meio de divisão em partes em vez de truncamento. O limite padrão é 5000 entradas para logs; configurável via LAST9_MAX_GET_LOGS_ENTRIES.
Desenvolvimento
Modo HTTP, teste com curl, compilação a partir do código-fonte
Executar em Modo HTTP
export LAST9_REFRESH_TOKEN="your_refresh_token"
export LAST9_HTTP=true
export LAST9_PORT=8080
./last9-mcp-server
O servidor inicia em http://localhost:8080/mcp.
Testar com curl
O handler HTTP Streamable roda em modo stateless, então qualquer requisição é atendida de forma independente. Um handshake initialize e um cabeçalho Mcp-Session-Id são opcionais — clientes que os enviam ainda funcionam (o cabeçalho é aceito e ignorado), e clientes também podem pular direto para tools/list / tools/call. Cada ferramenta é uma consulta independente de requisição/resposta; o servidor não emite notificações servidor→cliente, então GET /mcp (o stream SSE) retorna 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 a partir do Código-Fonte
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 é para desenvolvimento local. Para uso real, o endpoint HTTP hospedado é mais fácil.
Referência de Ferramentas
Todos os parâmetros, padrões de entrada de tempo e detalhes
Entrada de Tempo
- Tempos absolutos (
start_time_iso/end_time_iso, outime_iso) têm precedência sobrelookback_minutes. - Para janelas relativas: use
lookback_minutes. - Para janelas absolutas: use RFC3339/ISO8601 —
2026-02-09T15:04:05Z. YYYY-MM-DD HH:MM:SSlegado é aceito apenas para compatibilidade.
get_exceptions
limit(inteiro, opcional): Máximo de exceções. Padrão: 20.lookback_minutes(inteiro, opcional): Padrão: 60.start_time_iso/end_time_iso(string, opcional): Intervalo de tempo absoluto.service_name(string, opcional): Filtrar por serviço.span_name(string, opcional): Filtrar por nome de span.env(string, opcional): Filtrar por ambiente.
get_service_summary
start_time_iso/end_time_iso(string, opcional)env(string, opcional): Regex PromQL. Padrão:.*. Correspondência exata precisa de âncoras (ex.:^prod$).sort_by(string, opcional):request_count(padrão),throughput_rpm,http_4xx_count,http_5xx_countougrpc_error_count.limit(inteiro, opcional): Máximo de linhas classificadas. Omitir ou 0 significa 10; valores acima de 100 são limitados a 100.
get_service_environments
start_time_iso/end_time_iso(string, opcional)
Todas as outras ferramentas APM exigem um valor
env. Use""se isso retornar vazio.
get_service_performance_details
service_name(string, obrigatório)lookback_minutes(inteiro, opcional): Padrão: 60.start_time_iso/end_time_iso(string, opcional)env(string, opcional): Padrão:prod.
get_service_operations_summary
service_name(string, obrigatório)lookback_minutes(inteiro, opcional): Padrão: 60.start_time_iso/end_time_iso(string, opcional)env(string, opcional): Padrão:prod.
get_service_dependency_graph
service_name(string, opcional)lookback_minutes(inteiro, opcional): Padrão: 60.start_time_iso/end_time_iso(string, opcional)env(string, opcional): Padrão:prod.
get_apm_service_deviations
service_name(string, opcional): Omita para escopo de frota; forneça para um serviço e suas correlações de operação.lookback_minutes(inteiro, opcional): Janela atual. Padrão: 60.start_time_iso/end_time_iso(string, opcional): Janela atual explícita.baseline_start_time_iso/baseline_end_time_iso(string, opcional): Linha de base explícita. Padrão: a janela imediatamente anterior de duração igual.datasource(string, opcional): Restringir a comparação a um datasource.env(string, opcional): Padrão:prod.max_services/max_operations(inteiro, opcional): Padrão 10, máximo 10 cada.
get_databases
env(string, opcional): Filtrar por ambiente. Aceita expressão regular. Padrão: todos.lookback_minutes(inteiro, opcional): Padrão: 60. A janela não pode exceder 7 dias.start_time_iso/end_time_iso(string, opcional)
get_database_slow_queries
db_system(string, opcional): ex.:postgresql,mysql,mongodb,redis.host(string, opcional): Host do banco de dados (net_peer_name).service_name(string, opcional): Nome do serviço chamador.env(string, opcional)min_duration_ms(float, opcional): Duração mínima da consulta em ms.lookback_minutes(inteiro, opcional): Padrão: 60.start_time_iso/end_time_iso(string, opcional)limit(inteiro, opcional): Padrão: 20.
get_database_queries
db_system(string, opcional)host(string, opcional)service_name(string, opcional)env(string, opcional)lookback_minutes(inteiro, opcional): Padrão: 60.start_time_iso/end_time_iso(string, opcional)limit(inteiro, opcional): Padrão: 20.
get_database_server_metrics
db_system(string, obrigatório): ex.:postgresql,mysql,mongodb,redis,aerospike.host(string, opcional)lookback_minutes(inteiro, opcional): Padrão: 60.start_time_iso/end_time_iso(string, opcional)
prometheus_range_query
query(string, obrigatório): A consulta PromQL.start_time_iso/end_time_iso(string, opcional): Padrão: últimos 60 min.lookback_minutes(float, opcional): Padrão: 60.
prometheus_instant_query
query(string, obrigatório)time_iso(string, opcional): Padrão: agora.lookback_minutes(float, opcional)
prometheus_label_values
match_query(string, opcional): Filtro PromQL.label(string, obrigatório): Nome do label.start_time_iso/end_time_iso(string, opcional)
prometheus_labels
match_query(string, opcional): Filtro PromQL.start_time_iso/end_time_iso(string, opcional)
get_logs
logjson_query(array, obrigatório): Consulta de pipeline JSON.lookback_minutes(inteiro, opcional): Padrão: 5.start_time_iso/end_time_iso(string, opcional)limit(inteiro, opcional): Padrão do servidor: 5000.index(string, opcional):physical_index:<name>ourehydration_index:<block_name>.
Para inventário de serviços baseado em logs, consulte physical_index_service_count primeiro:
sum by (name, service_name, env) (physical_index_service_count{destination="logs"})
Use service_name como ServiceName, env como o ambiente quando presente, e name como o nome do índice físico. Se name="default", omita index; para um índice físico não padrão selecionado pelo usuário, passe index: "physical_index:<name>". Se o backend rejeitar filtragem explícita de índice físico, tente novamente sem index e relate que a filtragem explícita de índice físico não está disponível para esse backend.
get_service_logs
service_name(string, obrigatório)lookback_minutes(inteiro, opcional): Padrão: 60.limit(inteiro, opcional): Padrão: 20.env(string, opcional)severity_filters(array, opcional): ex.:["error", "warn"]. Lógica OU.body_filters(array, opcional): ex.:["timeout", "failed"]. Lógica OU.start_time_iso/end_time_iso(string, opcional)index(string, opcional)
Múltiplos tipos de filtro combinam com E. Cada array usa OU internamente.
Use get_logs para contagens agregadas amplas primeiro; use get_service_logs somente após restringir a um serviço/ambiente/índice e um pequeno conjunto de amostras.
get_log_attributes
lookback_minutes(inteiro, opcional): Padrão: 15.start_time_iso/end_time_iso(string, opcional)region(string, opcional)index(string, opcional)
get_log_attributes_for_pipeline
pipeline(array, obrigatório): Estágios de filtro anteriores para limitar a descoberta, ex.:[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(inteiro, opcional): Padrão: 15.start_time_iso/end_time_iso(string, opcional)region(string, opcional)index(string, opcional)
get_drop_rules
Sem parâmetros. Lista regras de descarte via GET /otel_settings/drop?region=....
add_drop_rule
name(string, obrigatório)filters(array, obrigatório): Cada filtro:key,value,operator(equals/not_equals),conjunction(and).- As chaves de filtro devem usar
attributes["key_name"]ouresource.attributes["key_name"](exigido pela API do Last9). - Cria a regra via
POST /otel_settings/drop?region=...&cluster_id=....
get_traces
Use para buscas amplas e agregações. Para consulta exata de ID de trace, use get_service_traces.
tracejson_query(array, obrigatório)start_time_iso/end_time_iso(string, opcional)lookback_minutes(inteiro, opcional): Padrão: 60.limit(inteiro, opcional): Padrão: 5000.
get_service_traces
Exatamente um de trace_id ou service_name é obrigatório.
trace_id(string, opcional): Janela de retrospectiva padrão: 72 horas.service_name(string, opcional): Janela de retrospectiva padrão: 60 min.lookback_minutes(integer, opcional)start_time_iso/end_time_iso(string, opcional)limit(integer, opcional): Padrão: 10.env(string, opcional)
get_trace_attributes
lookback_minutes(integer, opcional): Padrão: 15.start_time_iso/end_time_iso(string, opcional)region(string, opcional)
get_trace_attributes_for_pipeline
pipeline(array, obrigatório): Estágios de filtro anteriores para limitar a descoberta, ex.:[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(integer, opcional): Padrão: 15.start_time_iso/end_time_iso(string, opcional)region(string, opcional)
get_trace_attribute_values
tag_name(string, obrigatório): Nome do atributo deget_trace_attributes(ex.:resource_departmentouattributes['http.method']).pipeline(array, opcional): Estágios de filtro anteriores para limitar os valores; omita para valores globais.lookback_minutes(integer, opcional): Padrão: 15.start_time_iso/end_time_iso(string, opcional): Limites históricos RFC3339; têm precedência sobrelookback_minutes.region(string, opcional)
get_trace_attribute_deviations
comparison_mode(string, obrigatório):latency,errorsoutime.service_name(string, obrigatório)environment(string, obrigatório): Valor exato dedeployment.environment.operation(string, opcional)filters(array, opcional): Condições de filtro JSON de trace.candidate_attributes(array, opcional): Máximo de 8; omita para descoberta limitada.latency_threshold_ms(number, opcional): Obrigatório para o modolatency; rejeitado para outros modos.start_time_iso/end_time_iso(string, opcional)lookback_minutes(integer, opcional): Padrão: 15. Máximo: 15.baseline_start_time_iso/baseline_end_time_iso(string, opcional): Obrigatório para o modotime; não sobrepostos e com duração igual à janela alvo.minimum_cohort_size(integer, opcional): Padrão: 100. Mínimo: 20.minimum_value_support(integer, opcional): Padrão: 20. Mínimo: 10.limit(integer, opcional): Padrão: 10. Máximo: 10.
Requer que o recurso de backend complementar esteja habilitado.
get_trace_waterfall
trace_id(string, obrigatório)environment(string, opcional)start_time_iso/end_time_iso(string, opcional)lookback_minutes(integer, opcional): Padrão: 4320 (72 horas).selected_span_id(string, opcional): Retorna atributos, eventos e links apenas para esse span.max_spans(integer, opcional): Padrão: 500. Máximo: 1000.
Retorna um envelope investigation-evidence/v1; o waterfall está em data.
get_change_events
start_time_iso/end_time_iso(string, opcional)lookback_minutes(integer, opcional): Padrão: 60.service_name(string, opcional)env(string, opcional)event_name(string, opcional): Chame sem isso primeiro para obteravailable_event_names.
get_alert_groups
Inventário configurado de grupos de alertas do Compass para auditorias de changeboard / cobertura de rótulos. Inclui grupos sem regras e grupos que não estão disparando. Não retorna PromQL.
alert_group_name/alert_group_type/data_source_name(string, opcional): Correspondência de substring sem diferenciar maiúsculas/minúsculas.team/tier(string, opcional): Correspondência exata sem diferenciar maiúsculas/minúsculas nos metadados configurados.label_key+label_value(string, opcional): Devem ser definidos juntos. Correspondência exata sem diferenciar maiúsculas/minúsculas em um parmetadata.labels— tanto chave quanto valor.
Retorna JSON compacto {"count":N,"groups":[...]} com id, name, type, entity_class, team, tier, metadata.labels e contagens de regras. team / labels vazios significa não definido.
get_alert_config
search_term(string, opcional): Pesquisa de texto livre em nome, grupo, fonte de dados, tags.rule_name(string, opcional)severity(string, opcional)rule_type(string, opcional):staticouanomaly.alert_group_name/alert_group_type/data_source_name(string, opcional)tags(array, opcional): Todos devem corresponder (lógica AND).
get_alerts
time_iso(string, opcional): Horário de avaliação em RFC3339.window(integer, opcional): Janela de retrospectiva em segundos. Padrão: 900. Intervalo: 60–86400.lookback_minutes(integer, opcional): Intervalo: 1–1440.
get_alert_rule_state
start_time(integer, obrigatório): Início do intervalo em epoch Unix (inclusivo).end_time(integer, obrigatório): Fim do intervalo em epoch Unix (inclusivo).step(integer, obrigatório): Resolução em segundos entre amostras. O número de amostras((end_time - start_time) / step + 1)é limitado a 100.alert_group_id(string, opcional): Filtro por ID do grupo de alertas.rule_name(string, opcional): Filtro regex no nome da regra.alert_group_name(string, opcional): Filtro regex no nome do grupo de alertas.label_filters(string, opcional): Filtros de rótulokey=valueseparados por vírgula.state(string, opcional): Filtro por estado (ex.:firing).
Retorna um mapa JSON de rule_id -> [{timestamp, is_firing}]. Um timestamp em que uma regra está ausente da resposta upstream é relatado como is_firing=0 — isso significa "não observado como disparando", não um estado normal confirmado.
get_notification_channels
Sem parâmetros. Retorna todos os canais de notificação configurados (Slack, PagerDuty, e-mail, webhooks, etc.).
did_you_mean
query(string, obrigatório): O nome a ser pesquisado — parcial, com erro de digitação ou abreviado.type(string, opcional): Restringir ao tipo de entidade:service,environment,host,database,k8s_deployment,k8s_namespace,job.
Retorna até 3 correspondências mais próximas com pontuações de similaridade. Use isso antes de qualquer chamada de ferramenta em que o nome da entidade seja incerto. Se uma chamada anterior retornou resultados vazios, tente isso antes de tentar novamente.
get_service_profile
service_name(string, obrigatório): Serviço para derivar um perfil de telemetria.datasource(string, opcional): Nome da fonte de dados. Omita para o padrão.
Retorna um breve resumo de investigação seguido do perfil completo como JSON bruto: presença de sinais (logs/traces/metrics como present, absent ou unknown), linguagem e runtime, ambientes de implantação, signal_shape de log (log_format, severity_set, level_field) e uma correção de ingestão recomendada quando aplicável. Derivado upstream e armazenado em cache com TTL de ~15 minutos.
Chame antes de qualquer investigação com escopo de serviço para que a seleção de ferramentas corresponda à telemetria real do serviço — pule ferramentas de trace quando traces for absent, e quando severity_set for none ou partial, analise a severidade de level_field no corpo do log em vez de usar severity_filters. metrics é sempre unknown e dependencies não é preenchido na v1. Quando logs e traces forem ambos absent, confirme o nome com did_you_mean antes de concluir que o serviço não é monitorado.
list_dashboards
Sem parâmetros. Retorna todos os dashboards personalizados na organização como um array JSON com id, name e metadados.
get_dashboard
id(string, obrigatório): UUID do dashboard.region(string, opcional): Região para preenchimento de consultas de painéis. Padrão para a região da fonte de dados configurada.
validate_dashboard
Somente leitura. Nunca cria ou atualiza dashboards. Aceita exatamente um de dashboard_id ou dashboard_definition.
dashboard_id(string, opcional): UUID do dashboard salvo para validar.dashboard_definition(object, opcional): Corpo do dashboard não salvo inline (dry run verdadeiro).start_time_iso/end_time_iso(string, opcional): Janela de validação (RFC3339). Deve ser ≤ 24h.region(string, opcional): Região para execução de consultas de painéis.
Retorna dashboard_validation/v1: classificação de lint + execução por painel (data / no_data / invalid / error). Resultados vazios no dia 1 classificam como valid_no_data sem sondas de diagnóstico.
create_dashboard
Somente novo. Após esta chamada retornar dashboard.id, refine com update_dashboard — não crie novamente para adicionar, ajustar ou corrigir painéis.
dashboard(object, obrigatório): Definição do dashboard comnameepanels[]. Cada painel requername,version,layout(x,y,w,h),visualization.typeequeries[].metadata(object, opcional): Metadados do dashboard — campos_categorye_type(ex.:{"_category":"custom","_type":"metrics"}).
update_dashboard
Prefira isso após create. Substituição completa por id (mesmo corpo do create).
id(string, obrigatório): UUID do dashboard a atualizar.dashboard(object, obrigatório): Corpo completo de substituição do dashboard (mesma forma do create).metadata(object, opcional): Metadados de substituição. Dashboards de sistema somente leitura retornam erro 403.
delete_dashboard
id(string, obrigatório): UUID do dashboard a excluir. Dashboards de sistema somente leitura não podem ser excluídos.
list_dashboard_snapshots
dashboard_id(string, obrigatório): UUID do dashboard cujos snapshots devem ser listados.
Retorna apenas metadados (id, name, expires_at, etc.). Use get_dashboard_snapshot para dados de painel congelados.
get_dashboard_snapshot
id(string, obrigatório): UUID do snapshot.
Retorna o snapshot congelado completo, incluindo dashboard_definition, panel_data, time_range e variables.
delete_dashboard_snapshot
id(string, obrigatório): UUID do snapshot a excluir.
get_profile_services
lookback_minutes/start_time_iso/end_time_iso(opcional): Janela; prefira lookback ou limites ISO explícitos (padrão 60m).region(string, opcional): Substituição de região.
Retorna serviços que têm dados de profiling na janela. Chame antes de get_flamegraph / get_top_functions / get_profile_summary.
get_flamegraph
service(string, obrigatório): Nome do serviço deget_profile_services.profile_type(string, opcional):cpu(padrão),allocouwall. Fixe um tipo ao comparar janelas.env/cluster/namespace/runtime(string, opcional): Filtros de escopo.limit(number, opcional): Máximo de linhas de stack agregadas (padrão 1000, máximo 10000).lookback_minutes/start_time_iso/end_time_iso/region(opcional).
Retorna uma árvore flamegraph aninhada (name / value / self / children). truncated: true significa que o limite de linhas da API foi atingido.
get_top_functions
Mesmos filtros de get_flamegraph. Retorna a classificação de auto-amostragem das funções mais quentes. Pode ser truncado; verifique truncated.
get_profile_summary
Mesmos filtros de get_flamegraph. Retorna uma triagem curta em linguagem natural do perfil do serviço.
grafana_search_dashboards
query(string, opcional): Substring do título. Vazio lista amplamente (sujeito ao limite de 5.000 linhas).
Retorna {"dashboards":[…], "truncated":bool} com uid, title, uri, url, type, tags. Use uid com grafana_get_dashboard.
grafana_get_dashboard
uid(string, obrigatório): UID do dashboard Grafana.full_json(boolean, opcional): Quando true, retorna o JSON bruto do Grafana em vez do resumo filtrado. Resumo padrão: versão, tags, variáveis de templating e o tipo/fonte de dados/posição de grade/alvos promQL de cada painel. Tipos de painel de plugin desconhecidos aparecem emunsupportedPanelTypes.
grafana_list_folders
Sem parâmetros. Retorna a árvore de pastas.
grafana_list_folder_dashboards
folder_uid(string, obrigatório): UID da pasta do Grafana.
Retorna {"dashboards":[…], "truncated":bool} para dashboards nessa pasta (paginado até 5.000).
grafana_list_datasources
Sem parâmetros. Retorna uma projeção segura das fontes de dados (sem campos de credenciais).
Testes
Consulte TESTING.md para a configuração e instruções dos testes de integração.
