Last9

officiel

Intégrez de manière transparente le contexte de production en temps réel—logs, métriques et traces—dans votre environnement local pour corriger le code plus rapidement.

Que pouvez-vous faire avec Last9 MCP ?

  • Examiner la santé du service — Demandez un résumé classé de la flotte avec les comptes de requêtes, le débit et les taux d'erreur via get_service_summary.

  • Extraire les journaux bruts du service — Récupérez les lignes de journal filtrées par sévérité ou contenu du corps pour un service spécifique à l'aide de get_service_logs.

  • Tracer les performances de la base de données — Découvrez les bases de données, les requêtes lentes et les modèles de requêtes avec get_databases et les outils associés.

  • Exécuter des requêtes PromQL — Lancez des requêtes de plage ou instantanées sur n'importe quelle métrique en utilisant prometheus_range_query ou prometheus_instant_query.

  • Corréler les changements avec les incidents — Récupérez les événements de déploiement et de modification de configuration pour comprendre ce qui a altéré le comportement de production via get_change_events.

  • Gérer les tableaux de bord personnalisés — Listez, créez, mettez à jour ou validez des tableaux de bord par programmation avec list_dashboards et create_dashboard.

Documentation

Serveur MCP Last9

last9 mcp demo

Votre agent IA ne sait pas ce qui est cassé en production. Ceci corrige cela.

Serveur MCP Last9 connecte Claude, Cursor, Windsurf et tout autre assistant IA compatible MCP directement à vos données d'observabilité de production — journaux, métriques, traces, exceptions, requêtes de base de données, alertes et déploiements. L'agent cesse de deviner et commence à lire le signal réel.


Démarrage en 30 secondes (Hébergé)

Aucun binaire à installer. Aucun jeton à gérer. Une URL, OAuth dans votre navigateur, terminé.

Trouvez votre slug d'organisation dans votre 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

Tapez /mcp, sélectionnez last9, authentifiez-vous. C'est tout.

Cursor

Paramètres > MCP > Ajouter un nouveau serveur MCP :

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

Cliquez sur Connecter, complétez OAuth.

VS Code

Nécessite v1.99+. Ouvrez la Palette de commandes → MCP : Ajouter un serveur, collez l'URL, authentifiez-vous.

Ou directement dans settings.json :

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

Windsurf

Paramètres > Cascade > Ouvrir le marché MCP > icône d'engrenage (mcp_config.json) :

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

Claude Web/Bureau

Paramètres > Connecteurs > Ajouter un connecteur personnalisé. Nommez-le last9, collez l'URL, authentifiez-vous.

Nécessite un accès administrateur à votre organisation Claude.


Auto-hébergé (STDIO)

Utilisez ceci lorsque votre client MCP ne prend pas en charge le transport HTTP, ou lorsque vous avez besoin que le serveur s'exécute localement.

Installation

Homebrew :

brew install last9/tap/last9-mcp

NPM :

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

Versions binaires (Windows / manuel) :

Téléchargez depuis Versions GitHub :

PlateformeArchive
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

Obtenir un jeton d'actualisation

Seuls les administrateurs peuvent créer des jetons.

  1. Allez dans Accès API
  2. Cliquez sur Générer un jeton avec les autorisations d'écriture
  3. Copiez-le

Configuration du client

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>"
      }
    }
  }
}

Où coller ceci :

ClientEmplacement
Claude Web/BureauParamètres > Développeur > Modifier la configuration (claude_desktop_config.json)
CursorParamètres > Paramètres Cursor > MCP > Ajouter un nouveau serveur MCP global
WindsurfParamètres > Cascade > Marché MCP > icône d'engrenage (mcp_config.json)
VS CodeEnveloppez dans { "mcp": { "servers": { ... } } } dans settings.json — détails
Configuration STDIO VS Code
{
  "mcp": {
    "servers": {
      "last9": {
        "type": "stdio",
        "command": "/opt/homebrew/bin/last9-mcp",
        "env": {
          "LAST9_REFRESH_TOKEN": "<your_refresh_token>"
        }
      }
    }
  }
}

Pour NPM : utilisez "command": "npx" et ajoutez "args": ["-y", "@last9/mcp-server@latest"].

Windows

Après téléchargement depuis Versions GitHub, extrayez et pointez vers le chemin complet :

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

La voie NPM est plus simple sur Windows — aucune gestion de chemin.

Variables d'environnement

VariableDéfautDescription
LAST9_REFRESH_TOKEN(requis)Jeton d'actualisation depuis Accès API
LAST9_DATASOURCEdéfaut de l'orgNom de la source de données/cluster — utile lorsque vous avez plusieurs clusters Levitate
LAST9_API_HOSTapp.last9.ioRemplacer l'hôte API
LAST9_TOOLSETStous les outilsEnsembles d'outils séparés par des virgules à exposer (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). Alias : LAST9_MCP_TOOLSETS
LAST9_MAX_GET_LOGS_ENTRIES5000Nombre maximal d'entrées pour les requêtes get_logs segmentées
LAST9_USE_LOG_SEARCH_APIfalseDéfinissez true pour répondre à get_logs et get_service_logs avec un seul appel de recherche côté serveur au lieu d'une segmentation côté client
LAST9_DEBUG_CHUNKINGfalseDéfinissez true pour journaliser les détails de planification des segments pour get_logs, get_service_logs, get_traces
LAST9_DISABLE_TELEMETRYtrueDéfinissez false pour activer le traçage OTel interne
OTEL_SDK_DISABLED—Variable d'environnement OTel standard. Remplace LAST9_DISABLE_TELEMETRY
OTEL_EXPORTER_OTLP_ENDPOINT—Point de terminaison du collecteur OTLP (uniquement lorsque la télémétrie est activée)
OTEL_EXPORTER_OTLP_HEADERS—En-têtes d'authentification OTLP (uniquement lorsque la télémétrie est activée)

Ce qu'il peut faire

Santé des services

  • get_service_summary — Lignes (service, env) de flotte classées : request_count d'intervalle, throughput_rpm, compteurs HTTP 4xx/5xx et compteurs d'erreurs gRPC
  • get_service_environments — Environnements disponibles pour vos services. Exécutez ceci d'abord — les autres outils APM ont besoin de env d'ici
  • get_service_performance_details — Répartition complète : débit, taux d'erreur, p50/p90/p95/moyenne/max, apdex, disponibilité
  • get_service_operations_summary — Opérations groupées par points de terminaison HTTP, appels de base de données, messagerie, clients HTTP
  • get_service_dependency_graph — Carte des dépendances avec débit, latence et taux d'erreur pour amont/aval/infrastructure
  • get_apm_service_deviations — Comparez une fenêtre actuelle à une ligne de base de durée égale : régressions/améliorations, réconciliation Apdex et un résultat terminal (flotte ou service unique)
  • get_exceptions — Exceptions côté serveur avec filtres de service et de span

Observabilité des bases de données

Quatre outils qui ciblent directement les performances de votre base de données, dérivés des spans de trace OpenTelemetry et, lorsque les traces sont absentes, des métriques d'infrastructure telles que CloudWatch. Aucune instrumentation supplémentaire nécessaire si vous utilisez déjà OTel.

  • get_databases — Découvrez toutes les bases de données de votre infrastructure : type de base de données, hôte, débit (requêtes/min), latence p95, taux d'erreur, nombre de services dépendants. Découvre également les bases de données à partir de métriques d'infrastructure telles que CloudWatch, sans instrumentation de trace nécessaire — ces lignes portent une valeur d'activité au lieu de métriques de trace
  • get_database_slow_queries — Les exécutions de requêtes les plus lentes réelles, classées par durée, avec ID de trace pour explorer les traces complètes
  • get_database_queries — Modèles et agrégats de requêtes : fréquence d'exécution d'une requête, durée moyenne/p95, taux d'erreur
  • get_database_server_metrics — Métriques côté serveur de l'hôte de base de données lui-même (CPU, connexions, taux de succès du tampon — dépend de votre système de base de données)

Prend en charge PostgreSQL, MySQL, MongoDB, Redis, Aerospike et tout ce que OTel trace avec un attribut db_system — plus les bases de données découvertes à partir de métriques d'infrastructure telles que CloudWatch, dont les lignes portent une valeur d'activité au lieu de métriques de trace.

Prometheus / PromQL

  • prometheus_range_query — Requêtes de plage PromQL sur n'importe quelle métrique
  • prometheus_instant_query — Requêtes instantanées ; utilisez des fonctions de cumul comme avg_over_time, sum_over_time
  • prometheus_label_values — Valeurs d'étiquettes pour une série donnée
  • prometheus_labels — Toutes les étiquettes disponibles pour une série

Pointez-les vers une source de données/cluster différente du défaut en définissant LAST9_DATASOURCE.

Journaux

  • get_logs — Requêtes complètes de pipeline de journaux JSON (agrégations, filtres, extraction de champs)
  • get_service_logs — Lignes de journal brutes pour un service, filtrables par sévérité et contenu du corps
  • get_log_attributes — Catalogue global des attributs dans le schéma de journal pour une fenêtre temporelle
  • get_log_attributes_for_pipeline — Champs de journal réellement présents pour un pipeline en cours (découverte ciblée), chacun avec son filter_field exact
  • get_drop_rules — Règles de suppression de journaux depuis Plan de contrôle Last9
  • add_drop_rule — Créez une nouvelle règle de suppression pour réduire le volume de journaux à la source

Traces

  • get_traces — Requêtes de pipeline de traces JSON pour des recherches larges et des agrégations
  • get_service_traces — Traces par ID de trace exact ou nom de service. Utilisez ceci lorsque vous avez un ID de trace — c'est plus rapide
  • get_trace_attributes — Catalogue global des attributs dans le schéma de trace
  • get_trace_attributes_for_pipeline — Attributs réellement présents pour un pipeline en cours (découverte ciblée), chacun avec son filter_field exact
  • get_trace_attribute_values — Valeurs distinctes pour un attribut de trace, éventuellement limitées à un pipeline
  • get_trace_attribute_deviations — Classe les valeurs d'attributs qui diffèrent entre deux cohortes de spans bornées (lent vs rapide, erreur vs non-erreur, ou deux fenêtres temporelles). Corrélation, pas causalité
  • get_trace_waterfall — Une trace exacte en cascade parent/enfant avec temps propre d'union d'intervalles, spans les plus lents et avertissements de graphe

Événements de changement et alertes

  • get_change_events — Déploiements, changements de configuration, retours en arrière. Corrélez les incidents avec ce qui a changé
  • get_alert_groups — Groupes d'alertes Compass configurés avec étiquettes de métadonnées, équipe, niveau et nombres de règles — y compris les groupes sans règles et les groupes qui ne déclenchent pas
  • get_alert_config — Configurations de règles d'alerte — recherchables par nom, sévérité, type, étiquettes
  • get_alerts — Alertes actuellement déclenchées dans une fenêtre temporelle
  • get_alert_rule_state — État de déclenchement historique (1/0) par règle d'alerte sur une plage temporelle, groupé par rule_id. Filtrable par groupe d'alertes, nom de règle, filtres d'étiquettes et état.
  • get_notification_channels — Canaux de notification configurés (Slack, PagerDuty, e-mail, etc.)

Tableaux de bord personnalisés

  • list_dashboards — Tous les tableaux de bord personnalisés de votre organisation : ID, noms et métadonnées
  • get_dashboard — Définition complète du tableau de bord par ID, y compris les panneaux et les requêtes
  • validate_dashboard — Lint en lecture seule + exécution + classification pour un ID de tableau de bord enregistré ou un dashboard_definition en ligne sur une fenêtre ≤24h. Ne crée ni ne met jamais à jour les tableaux de bord
  • create_dashboard — Créez un tableau de bord personnalisé entièrement nouveau une fois (panneaux, requêtes, métadonnées). Une fois l'ID renvoyé, affinez avec update_dashboard.
  • update_dashboard — Affinez un tableau de bord existant par ID (remplacement complet ; les tableaux de bord système en lecture seule renvoient une erreur)
  • delete_dashboard — Supprimez un tableau de bord personnalisé par ID
  • list_dashboard_snapshots — Instantanés figés à un moment précis pour un tableau de bord (métadonnées uniquement)
  • get_dashboard_snapshot — Instantané figé complet incluant les données de panneau pour RCA / vues partageables
  • delete_dashboard_snapshot — Supprimez un instantané figé par ID

Profilage continu

Nécessite que le profilage continu soit activé pour l'organisation. Découvrez d'abord les services avec get_profile_services, puis extrayez un flamegraph ou des fonctions classées.

  • get_profile_services — Services qui ont des données de profilage dans la fenêtre (index avant interrogation)
  • get_flamegraph — Arbre flamegraph imbriqué pour un service (cpu par défaut ; aussi alloc, wall)
  • get_top_functions — Classement des auto-échantillons des fonctions les plus actives pour un service
  • get_profile_summary — Triage court en langage naturel du profil pour un service

Tableaux de bord Grafana

Outils en lecture seule contre l'instance Grafana de l'organisation (via le proxy Grafana de Last9). Les champs d'identification ne sont jamais renvoyés au modèle. Activez avec LAST9_TOOLSETS=grafana (ou laissez les ensembles d'outils non définis pour tous les outils).

  • grafana_search_dashboards — Recherche de tableaux de bord par sous-chaîne de titre (paginé ; truncated: true lorsque la limite est atteinte)
  • grafana_get_dashboard — Résumé du tableau de bord par uid (panneaux, variables, cibles PromQL) ; full_json=true pour le JSON Grafana brut
  • grafana_list_folders — Arborescence des dossiers
  • grafana_list_folder_dashboards — Tableaux de bord dans un dossier (paginé)
  • grafana_list_datasources — Inventaire des sources de données sans informations d'identification

Résolution floue des noms

  • did_you_mean — Lorsque l'agent n'est pas sûr d'un nom d'entité, cette fonction renvoie les correspondances les plus proches de votre catalogue (services, environnements, hôtes, bases de données, déploiements/espaces de noms K8s, tâches). Jusqu'à 3 suggestions avec scores de similarité. Le serveur appelle automatiquement cette fonction avant la plupart des outils lorsqu'une recherche de nom renvoie un résultat vide.

Profil de service

  • get_service_profile — À quoi ressemble réellement la télémétrie d'un service, avant de l'interroger : quels signaux existent, langage et runtime, environnements de déploiement, la forme de ses journaux, et une correction d'ingestion recommandée le cas échéant. Permet à l'agent d'ignorer les outils de traces lorsqu'un service n'a pas de traces, et d'analyser la sévérité à partir du corps du journal lorsque SeverityText est vide au lieu de filtrer dessus et de ne rien trouver.

Comment ça fonctionne

Liens profonds sur chaque réponse. Chaque outil renvoie un champ deep_link — une URL directe vers le tableau de bord Last9 pour cette requête et cette plage horaire exactes. L'agent peut vous transmettre le lien ; vous cliquez dessus ; vous y êtes.

Ensembles d'outils. Par défaut, le serveur expose tous les outils. Les hôtes d'automatisation qui n'ont besoin que d'investigation (journaux/traces/métriques/profils) peuvent définir LAST9_TOOLSETS=investigate (ou passer --toolsets=investigate) afin que tools/list reste réduit sans désactivation massive côté client. Packs nommés : logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all. Les noms inconnus échouent rapidement. Le pack metrics seul n'inclut pas list_datasources ni did_you_mean — utilisez investigate (ou combinez les ensembles d'outils) lorsque vous avez besoin de ces aides à la découverte.

Ressources de référence des outils. Les longs manuels logjson/tracejson/service-logs/metrics sont des ressources MCP (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics, last9://reference/investigation), pas du texte de description d'outil toujours actif. Les règles de requête critiques restent dans la description de l'outil afin que les agents qui n'appellent jamais resources/read reçoivent quand même des instructions de construction correctes. Découvrez les champs spécifiques à l'organisation avec get_log_attributes / get_log_attributes_for_pipeline (et les équivalents pour les traces) — ils ne sont pas injectés dans les descriptions.

Résultats volumineux fragmentés. get_logs et get_traces gèrent les grands ensembles de résultats par fragmentation plutôt que par troncature. La limite par défaut est de 5000 entrées pour les journaux ; configurable via LAST9_MAX_GET_LOGS_ENTRIES.


Développement

Mode HTTP, tests curl, compilation depuis les sources

Exécution en mode HTTP

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

Le serveur démarre à http://localhost:8080/mcp.

Test avec curl

Le gestionnaire HTTP Streamable fonctionne en mode sans état, donc toute requête est servie indépendamment. Une poignée de main initialize et un en-tête Mcp-Session-Id sont facultatifs — les clients qui les envoient fonctionnent toujours (l'en-tête est accepté et ignoré), et les clients peuvent aussi passer directement à tools/list / tools/call. Chaque outil est une requête/réponse indépendante ; le serveur n'émet aucune notification serveur→client, donc GET /mcp (le flux SSE) renvoie 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
        }
      }
    }'

Compilation depuis les sources

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 est destiné au développement local. Pour une utilisation réelle, le point de terminaison HTTP hébergé est plus simple.


Référence des outils

Tous les paramètres, normes de saisie de l'heure et détails

Saisie de l'heure

  • Les heures absolues (start_time_iso/end_time_iso, ou time_iso) ont priorité sur lookback_minutes.
  • Pour les fenêtres relatives : utilisez lookback_minutes.
  • Pour les fenêtres absolues : utilisez RFC3339/ISO8601 — 2026-02-09T15:04:05Z.
  • Le YYYY-MM-DD HH:MM:SS hérité est accepté uniquement pour compatibilité.

get_exceptions

  • limit (entier, facultatif) : Nombre maximal d'exceptions. Défaut : 20.
  • lookback_minutes (entier, facultatif) : Défaut : 60.
  • start_time_iso / end_time_iso (chaîne, facultatif) : Plage horaire absolue.
  • service_name (chaîne, facultatif) : Filtrer par service.
  • span_name (chaîne, facultatif) : Filtrer par nom de span.
  • env (chaîne, facultatif) : Filtrer par environnement.

get_service_summary

  • start_time_iso / end_time_iso (chaîne, facultatif)
  • env (chaîne, facultatif) : Regex PromQL. Défaut : .*. La correspondance exacte nécessite des ancres (par ex. ^prod$).
  • sort_by (chaîne, facultatif) : request_count (défaut), throughput_rpm, http_4xx_count, http_5xx_count ou grpc_error_count.
  • limit (entier, facultatif) : Nombre maximal de lignes classées. Omettre ou 0 signifie 10 ; les valeurs supérieures à 100 sont plafonnées à 100.

get_service_environments

  • start_time_iso / end_time_iso (chaîne, facultatif)

Tous les autres outils APM nécessitent une valeur env. Utilisez "" si cela renvoie un résultat vide.

get_service_performance_details

  • service_name (chaîne, obligatoire)
  • lookback_minutes (entier, facultatif) : Défaut : 60.
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • env (chaîne, facultatif) : Défaut : prod.

get_service_operations_summary

  • service_name (chaîne, obligatoire)
  • lookback_minutes (entier, facultatif) : Défaut : 60.
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • env (chaîne, facultatif) : Défaut : prod.

get_service_dependency_graph

  • service_name (chaîne, facultatif)
  • lookback_minutes (entier, facultatif) : Défaut : 60.
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • env (chaîne, facultatif) : Défaut : prod.

get_apm_service_deviations

  • service_name (chaîne, facultatif) : Omettre pour la portée du parc ; fournir pour un service et ses corrélations d'opérations.
  • lookback_minutes (entier, facultatif) : Fenêtre actuelle. Défaut : 60.
  • start_time_iso / end_time_iso (chaîne, facultatif) : Fenêtre actuelle explicite.
  • baseline_start_time_iso / baseline_end_time_iso (chaîne, facultatif) : Ligne de base explicite. Défaut : la fenêtre de durée égale immédiatement précédente.
  • datasource (chaîne, facultatif) : Restreindre la comparaison à une seule source de données.
  • env (chaîne, facultatif) : Défaut : prod.
  • max_services / max_operations (entier, facultatif) : Défaut 10, maximum 10 chacun.

get_databases

  • env (chaîne, facultatif) : Filtrer par environnement. Accepte une expression régulière. Défaut : tous.
  • lookback_minutes (entier, facultatif) : Défaut : 60. La fenêtre ne peut pas dépasser 7 jours.
  • start_time_iso / end_time_iso (chaîne, facultatif)

get_database_slow_queries

  • db_system (chaîne, facultatif) : par ex. postgresql, mysql, mongodb, redis.
  • host (chaîne, facultatif) : Hôte de la base de données (net_peer_name).
  • service_name (chaîne, facultatif) : Nom du service appelant.
  • env (chaîne, facultatif)
  • min_duration_ms (flottant, facultatif) : Durée minimale de la requête en ms.
  • lookback_minutes (entier, facultatif) : Défaut : 60.
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • limit (entier, facultatif) : Défaut : 20.

get_database_queries

  • db_system (chaîne, facultatif)
  • host (chaîne, facultatif)
  • service_name (chaîne, facultatif)
  • env (chaîne, facultatif)
  • lookback_minutes (entier, facultatif) : Défaut : 60.
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • limit (entier, facultatif) : Défaut : 20.

get_database_server_metrics

  • db_system (chaîne, obligatoire) : par ex. postgresql, mysql, mongodb, redis, aerospike.
  • host (chaîne, facultatif)
  • lookback_minutes (entier, facultatif) : Défaut : 60.
  • start_time_iso / end_time_iso (chaîne, facultatif)

prometheus_range_query

  • query (chaîne, obligatoire) : La requête PromQL.
  • start_time_iso / end_time_iso (chaîne, facultatif) : Défaut : les 60 dernières minutes.
  • lookback_minutes (flottant, facultatif) : Défaut : 60.

prometheus_instant_query

  • query (chaîne, obligatoire)
  • time_iso (chaîne, facultatif) : Défaut : maintenant.
  • lookback_minutes (flottant, facultatif)

prometheus_label_values

  • match_query (chaîne, facultatif) : Filtre PromQL.
  • label (chaîne, obligatoire) : Nom du libellé.
  • start_time_iso / end_time_iso (chaîne, facultatif)

prometheus_labels

  • match_query (chaîne, facultatif) : Filtre PromQL.
  • start_time_iso / end_time_iso (chaîne, facultatif)

get_logs

  • logjson_query (tableau, obligatoire) : Requête de pipeline JSON.
  • lookback_minutes (entier, facultatif) : Défaut : 5.
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • limit (entier, facultatif) : Défaut serveur : 5000.
  • index (chaîne, facultatif) : physical_index:<name> ou rehydration_index:<block_name>.

Pour l'inventaire des services basé sur les journaux, interrogez d'abord physical_index_service_count :

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

Utilisez service_name comme ServiceName, env comme environnement lorsqu'il est présent, et name comme nom d'index physique. Si name="default", omettez index ; pour un index physique non défini par défaut sélectionné par l'utilisateur, passez index: "physical_index:<name>". Si le backend rejette le filtrage explicite par index physique, réessayez sans index et signalez que le filtrage explicite par index physique n'est pas disponible pour ce backend.

get_service_logs

  • service_name (chaîne, obligatoire)
  • lookback_minutes (entier, facultatif) : Défaut : 60.
  • limit (entier, facultatif) : Défaut : 20.
  • env (chaîne, facultatif)
  • severity_filters (tableau, facultatif) : par ex. ["error", "warn"]. Logique OU.
  • body_filters (tableau, facultatif) : par ex. ["timeout", "failed"]. Logique OU.
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • index (chaîne, facultatif)

Plusieurs types de filtres se combinent avec ET. Chaque tableau utilise OU en interne. Utilisez d'abord get_logs pour des comptes agrégés larges ; utilisez get_service_logs uniquement après avoir réduit à un service/environnement/index et un petit échantillon.

get_log_attributes

  • lookback_minutes (entier, facultatif) : Défaut : 15.
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • region (chaîne, facultatif)
  • index (chaîne, facultatif)

get_log_attributes_for_pipeline

  • pipeline (tableau, obligatoire) : Étapes de filtrage antérieures pour limiter la découverte, par ex. [{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].
  • lookback_minutes (entier, facultatif) : Défaut : 15.
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • region (chaîne, facultatif)
  • index (chaîne, facultatif)

get_drop_rules

Aucun paramètre. Liste les règles de suppression via GET /otel_settings/drop?region=....

add_drop_rule

  • name (chaîne, obligatoire)
  • filters (tableau, obligatoire) : Chaque filtre : key, value, operator (equals/not_equals), conjunction (and).
  • Les clés de filtre doivent utiliser attributes["key_name"] ou resource.attributes["key_name"] (requis par l'API Last9).
  • Crée la règle via POST /otel_settings/drop?region=...&cluster_id=....

get_traces

Utilisez pour les recherches larges et les agrégations. Pour une recherche exacte par ID de trace, utilisez get_service_traces.

  • tracejson_query (tableau, obligatoire)
  • start_time_iso / end_time_iso (chaîne, facultatif)
  • lookback_minutes (entier, facultatif) : Défaut : 60.
  • limit (entier, facultatif) : Défaut : 5000.

get_service_traces

Exactement un de trace_id ou service_name est obligatoire.

  • trace_id (chaîne, optionnel) : Fenêtre de recherche par défaut : 72 heures.
  • service_name (chaîne, optionnel) : Fenêtre de recherche par défaut : 60 min.
  • lookback_minutes (entier, optionnel)
  • start_time_iso / end_time_iso (chaîne, optionnel)
  • limit (entier, optionnel) : Défaut : 10.
  • env (chaîne, optionnel)

get_trace_attributes

  • lookback_minutes (entier, optionnel) : Défaut : 15.
  • start_time_iso / end_time_iso (chaîne, optionnel)
  • region (chaîne, optionnel)

get_trace_attributes_for_pipeline

  • pipeline (tableau, requis) : Étapes de filtre antérieures pour limiter la découverte, p. ex. [{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].
  • lookback_minutes (entier, optionnel) : Défaut : 15.
  • start_time_iso / end_time_iso (chaîne, optionnel)
  • region (chaîne, optionnel)

get_trace_attribute_values

  • tag_name (chaîne, requis) : Nom d'attribut issu de get_trace_attributes (p. ex. resource_department ou attributes['http.method']).
  • pipeline (tableau, optionnel) : Étapes de filtre antérieures pour limiter les valeurs ; à omettre pour les valeurs globales.
  • lookback_minutes (entier, optionnel) : Défaut : 15.
  • start_time_iso / end_time_iso (chaîne, optionnel) : Bornes historiques RFC3339 ; prioritaires sur lookback_minutes.
  • region (chaîne, optionnel)

get_trace_attribute_deviations

  • comparison_mode (chaîne, requis) : latency, errors ou time.
  • service_name (chaîne, requis)
  • environment (chaîne, requis) : Valeur exacte de deployment.environment.
  • operation (chaîne, optionnel)
  • filters (tableau, optionnel) : Conditions de filtre JSON de trace.
  • candidate_attributes (tableau, optionnel) : Maximum 8 ; à omettre pour une découverte bornée.
  • latency_threshold_ms (nombre, optionnel) : Requis pour le mode latency ; rejeté pour les autres modes.
  • start_time_iso / end_time_iso (chaîne, optionnel)
  • lookback_minutes (entier, optionnel) : Défaut : 15. Maximum : 15.
  • baseline_start_time_iso / baseline_end_time_iso (chaîne, optionnel) : Requis pour le mode time ; non chevauchants et de durée égale à la fenêtre cible.
  • minimum_cohort_size (entier, optionnel) : Défaut : 100. Minimum : 20.
  • minimum_value_support (entier, optionnel) : Défaut : 20. Minimum : 10.
  • limit (entier, optionnel) : Défaut : 10. Maximum : 10.

Nécessite que la capacité backend associée soit activée.

get_trace_waterfall

  • trace_id (chaîne, requis)
  • environment (chaîne, optionnel)
  • start_time_iso / end_time_iso (chaîne, optionnel)
  • lookback_minutes (entier, optionnel) : Défaut : 4320 (72 heures).
  • selected_span_id (chaîne, optionnel) : Renvoie les attributs, événements et liens pour ce span uniquement.
  • max_spans (entier, optionnel) : Défaut : 500. Maximum : 1000.

Renvoie une enveloppe investigation-evidence/v1 ; la cascade se trouve sous data.

get_change_events

  • start_time_iso / end_time_iso (chaîne, optionnel)
  • lookback_minutes (entier, optionnel) : Défaut : 60.
  • service_name (chaîne, optionnel)
  • env (chaîne, optionnel)
  • event_name (chaîne, optionnel) : Appeler sans ce paramètre d'abord pour obtenir available_event_names.

get_alert_groups

Inventaire configuré des groupes d'alertes Compass pour les audits de changeboard / couverture d'étiquettes. Inclut les groupes sans règles et les groupes non déclenchés. Ne renvoie pas de PromQL.

  • alert_group_name / alert_group_type / data_source_name (chaîne, optionnel) : Correspondance de sous-chaîne insensible à la casse.
  • team / tier (chaîne, optionnel) : Correspondance exacte insensible à la casse sur les métadonnées configurées.
  • label_key + label_value (chaîne, optionnel) : Doivent être définis ensemble. Correspondance exacte insensible à la casse sur une paire metadata.labels — clé et valeur.

Renvoie un JSON compact {"count":N,"groups":[...]} avec id, name, type, entity_class, team, tier, metadata.labels et les comptes de règles. team / labels vide signifie non défini.

get_alert_config

  • search_term (chaîne, optionnel) : Recherche en texte libre sur le nom, le groupe, la source de données, les étiquettes.
  • rule_name (chaîne, optionnel)
  • severity (chaîne, optionnel)
  • rule_type (chaîne, optionnel) : static ou anomaly.
  • alert_group_name / alert_group_type / data_source_name (chaîne, optionnel)
  • tags (tableau, optionnel) : Tous doivent correspondre (logique ET).

get_alerts

  • time_iso (chaîne, optionnel) : Heure d'évaluation au format RFC3339.
  • window (entier, optionnel) : Fenêtre de recherche en secondes. Défaut : 900. Plage : 60–86400.
  • lookback_minutes (entier, optionnel) : Plage : 1–1440.

get_alert_rule_state

  • start_time (entier, requis) : Début Unix epoch de la plage (inclusif).
  • end_time (entier, requis) : Fin Unix epoch de la plage (inclusif).
  • step (entier, requis) : Résolution en secondes entre les échantillons. Le nombre d'échantillons ((end_time - start_time) / step + 1) est plafonné à 100.
  • alert_group_id (chaîne, optionnel) : Filtrer par ID de groupe d'alertes.
  • rule_name (chaîne, optionnel) : Filtre regex sur le nom de la règle.
  • alert_group_name (chaîne, optionnel) : Filtre regex sur le nom du groupe d'alertes.
  • label_filters (chaîne, optionnel) : Filtres d'étiquettes key=value séparés par des virgules.
  • state (chaîne, optionnel) : Filtrer par état (p. ex. firing).

Renvoie une carte JSON de rule_id -> [{timestamp, is_firing}]. Un horodatage auquel une règle est absente de la réponse en amont est signalé comme is_firing=0 — cela signifie « non observé comme déclenché », et non un état normal confirmé.

get_notification_channels

Aucun paramètre. Renvoie tous les canaux de notification configurés (Slack, PagerDuty, e-mail, webhooks, etc.).

did_you_mean

  • query (chaîne, requis) : Le nom à rechercher — partiel, mal orthographié ou abrégé.
  • type (chaîne, optionnel) : Restreindre au type d'entité : service, environment, host, database, k8s_deployment, k8s_namespace, job.

Renvoie jusqu'à 3 correspondances les plus proches avec des scores de similarité. Utilisez ceci avant tout appel d'outil où le nom de l'entité est incertain. Si un appel précédent a renvoyé des résultats vides, essayez ceci avant de réessayer.

get_service_profile

  • service_name (chaîne, requis) : Service pour lequel dériver un profil de télémétrie.
  • datasource (chaîne, optionnel) : Nom de la source de données. À omettre pour la valeur par défaut.

Renvoie un bref résumé d'investigation suivi du profil complet en JSON brut : présence de signaux (logs/traces/metrics comme present, absent ou unknown), langage et runtime, environnements de déploiement, signal_shape de journaux (log_format, severity_set, level_field) et un correctif d'ingestion recommandé le cas échéant. Dérivé en amont et mis en cache avec un TTL d'environ 15 minutes.

Appelez-le avant toute investigation à l'échelle d'un service afin que la sélection d'outils corresponde à la télémétrie réelle du service — ignorez les outils de trace lorsque traces est absent, et lorsque severity_set est none ou partial, analysez la sévérité à partir de level_field dans le corps du journal plutôt que d'utiliser severity_filters. metrics est toujours unknown et dependencies n'est pas renseigné en v1. Lorsque logs et traces sont tous deux absent, confirmez le nom avec did_you_mean avant de conclure que le service n'est pas surveillé.

list_dashboards

Aucun paramètre. Renvoie tous les tableaux de bord personnalisés de l'organisation sous forme de tableau JSON avec id, name et les métadonnées.

get_dashboard

  • id (chaîne, requis) : UUID du tableau de bord.
  • region (chaîne, optionnel) : Région pour le remplissage des requêtes de panneaux. Par défaut, région de la source de données configurée.

validate_dashboard

Lecture seule. Ne crée ni ne met jamais à jour de tableaux de bord. Accepte exactement un de dashboard_id ou dashboard_definition.

  • dashboard_id (chaîne, optionnel) : UUID du tableau de bord enregistré à valider.
  • dashboard_definition (objet, optionnel) : Corps de tableau de bord non enregistré en ligne (vrai essai à blanc).
  • start_time_iso / end_time_iso (chaîne, optionnel) : Fenêtre de validation (RFC3339). Doit être ≤ 24 h.
  • region (chaîne, optionnel) : Région pour l'exécution des requêtes de panneaux.

Renvoie dashboard_validation/v1 : classification lint + exécution par panneau (data / no_data / invalid / error). Les résultats vides au jour 1 sont classés comme valid_no_data sans sondes de diagnostic.

create_dashboard

Uniquement nouveau. Après que cet appel renvoie dashboard.id, affinez avec update_dashboard — ne recréez pas pour ajouter, réduire ou corriger des panneaux.

  • dashboard (objet, requis) : Définition du tableau de bord avec name et panels[]. Chaque panneau nécessite name, version, layout (x, y, w, h), visualization.type et queries[].
  • metadata (objet, optionnel) : Métadonnées du tableau de bord — champs _category et _type (p. ex. {"_category":"custom","_type":"metrics"}).

update_dashboard

À privilégier après create. Remplacement complet par identifiant (même corps que create).

  • id (chaîne, requis) : UUID du tableau de bord à mettre à jour.
  • dashboard (objet, requis) : Corps complet de remplacement du tableau de bord (même forme que create).
  • metadata (objet, optionnel) : Métadonnées de remplacement. Les tableaux de bord système en lecture seule renvoient une erreur 403.

delete_dashboard

  • id (chaîne, requis) : UUID du tableau de bord à supprimer. Les tableaux de bord système en lecture seule ne peuvent pas être supprimés.

list_dashboard_snapshots

  • dashboard_id (chaîne, requis) : UUID du tableau de bord dont les instantanés doivent être listés.

Renvoie uniquement les métadonnées (id, name, expires_at, etc.). Utilisez get_dashboard_snapshot pour les données de panneaux figées.

get_dashboard_snapshot

  • id (chaîne, requis) : UUID de l'instantané.

Renvoie l'instantané figé complet, y compris dashboard_definition, panel_data, time_range et variables.

delete_dashboard_snapshot

  • id (chaîne, requis) : UUID de l'instantané à supprimer.

get_profile_services

  • lookback_minutes / start_time_iso / end_time_iso (optionnel) : Fenêtre ; préférez la fenêtre de recherche ou des bornes ISO explicites (défaut 60 min).
  • region (chaîne, optionnel) : Remplacement de région.

Renvoie les services qui ont des données de profilage dans la fenêtre. Appelez ceci avant get_flamegraph / get_top_functions / get_profile_summary.

get_flamegraph

  • service (chaîne, requis) : Nom du service issu de get_profile_services.
  • profile_type (chaîne, optionnel) : cpu (défaut), alloc ou wall. Épinglez un type lors de la comparaison de fenêtres.
  • env / cluster / namespace / runtime (chaîne, optionnel) : Filtres de portée.
  • limit (nombre, optionnel) : Nombre maximal de lignes de pile agrégées (défaut 1000, max 10000).
  • lookback_minutes / start_time_iso / end_time_iso / region (optionnel).

Renvoie un arbre de flamegraph imbriqué (name / value / self / children). truncated: true signifie que la limite de lignes de l'API a été atteinte.

get_top_functions

Mêmes filtres que get_flamegraph. Renvoie le classement des échantillons propres des fonctions les plus actives. Peut être tronqué ; vérifiez truncated.

get_profile_summary

Mêmes filtres que get_flamegraph. Renvoie un court triage en langage naturel du profil pour le service.

grafana_search_dashboards

  • query (chaîne, optionnel) : Sous-chaîne du titre. Vide liste largement (sous réserve de la limite de 5 000 lignes).

Renvoie {"dashboards":[…], "truncated":bool} avec uid, title, uri, url, type, tags. Utilisez uid avec grafana_get_dashboard.

grafana_get_dashboard

  • uid (chaîne, requis) : UID du tableau de bord Grafana.
  • full_json (booléen, optionnel) : Lorsque vrai, renvoie le JSON Grafana brut au lieu du résumé filtré. Résumé par défaut : version, tags, variables de templating, et le type/datasource/gridPos/cibles promQL de chaque panneau. Les types de panneaux de plugin inconnus apparaissent dans unsupportedPanelTypes.

grafana_list_folders

Aucun paramètre. Renvoie l'arborescence des dossiers.

grafana_list_folder_dashboards

  • folder_uid (chaîne, obligatoire) : uid du dossier Grafana.

Renvoie {"dashboards":[…], "truncated":bool} pour les tableaux de bord de ce dossier (paginé jusqu'à 5 000).

grafana_list_datasources

Aucun paramètre. Renvoie une projection sûre des sources de données (sans champs d'identifiants).


Tests

Voir TESTING.md pour la configuration et les instructions des tests d'intégration.


MseeP.ai Security Assessment Badge