Last9
offiziellBringen Sie nahtlos Echtzeit-Produktionskontext—Logs, Metriken und Traces—in Ihre lokale Umgebung, um Code schneller automatisch zu reparieren.
Was kann man mit Last9 MCP machen?
-
Dienstzustand untersuchen — Fordern Sie eine priorisierte Flottenübersicht über Anforderungszahlen, Durchsatz und Fehlerraten über
get_service_summaryan. -
Rohe Dienstprotokolle abrufen — Rufen Sie gefilterte Protokollzeilen nach Schweregrad oder Inhalt für einen bestimmten Dienst über
get_service_logsab. -
Datenbankleistung nachverfolgen — Entdecken Sie Datenbanken, langsame Abfragen und Abfragemuster mit
get_databasesund zugehörigen Tools. -
PromQL-Abfragen ausführen — Führen Sie Bereichs- oder Momentanabfragen gegen beliebige Metriken mit
prometheus_range_queryoderprometheus_instant_queryaus. -
Änderungen mit Vorfällen korrelieren — Rufen Sie Bereitstellungs- und Konfigurationsänderungsereignisse ab, um zu verstehen, was das Produktionsverhalten über
get_change_eventsverändert hat. -
Benutzerdefinierte Dashboards verwalten — Listen, erstellen, aktualisieren oder validieren Sie Dashboards programmatisch mit
list_dashboardsundcreate_dashboard.
Dokumentation
Last9 MCP Server

Ihr KI-Agent weiß nicht, was in der Produktion defekt ist. Das behebt dieses Problem.
Last9 MCP Server verbindet Claude, Cursor, Windsurf und jeden anderen MCP-fähigen KI-Assistenten direkt mit Ihren Produktions-Observability-Daten – Logs, Metriken, Traces, Ausnahmen, Datenbankabfragen, Alerts und Deployments. Der Agent hört auf zu raten und beginnt, das tatsächliche Signal zu lesen.
In 30 Sekunden starten (Gehostet)
Kein Binärprogramm zu installieren. Keine Tokens zu verwalten. Eine URL, OAuth im Browser, fertig.
Finden Sie Ihren Organisations-Slug in Ihrer Last9-URL: app.last9.io/<org_slug>/...
Claude Code
claude mcp add --transport http last9 https://app.last9.io/api/v4/organizations/<org_slug>/mcp
Geben Sie /mcp ein, wählen Sie last9 aus, authentifizieren Sie sich. Das war's.
Cursor
Einstellungen > MCP > Neuen MCP-Server hinzufügen:
{
"mcpServers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Klicken Sie auf Verbinden, schließen Sie OAuth ab.
VS Code
Erfordert v1.99+. Öffnen Sie die Befehlspalette → MCP: Server hinzufügen, fügen Sie die URL ein, authentifizieren Sie sich.
Oder direkt in settings.json:
{
"mcp": {
"servers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
}
Windsurf
Einstellungen > Cascade > MCP-Marketplace öffnen > Zahnrad-Symbol (mcp_config.json):
{
"mcpServers": {
"last9": {
"serverUrl": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Claude Web/Desktop
Einstellungen > Connectors > Benutzerdefinierten Connector hinzufügen. Nennen Sie ihn last9, fügen Sie die URL ein, authentifizieren Sie sich.
Erfordert Administratorzugriff auf Ihre Claude-Organisation.
Selbst gehostet (STDIO)
Verwenden Sie dies, wenn Ihr MCP-Client keinen HTTP-Transport unterstützt oder wenn Sie den Server lokal ausführen müssen.
Installation
Homebrew:
brew install last9/tap/last9-mcp
NPM:
npm install -g @last9/mcp-server@latest
# or directly:
npx -y @last9/mcp-server@latest
Binärversionen (Windows / manuell):
Download von GitHub Releases:
| Plattform | Archiv |
|---|---|
| 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 |
Ein Refresh-Token erhalten
Nur Administratoren können Tokens erstellen.
- Gehen Sie zu API-Zugriff
- Klicken Sie auf Token generieren mit Schreibberechtigungen
- Kopieren Sie es
Client-Konfiguration
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>"
}
}
}
}
Wo Sie dies einfügen:
| Client | Ort |
|---|---|
| Claude Web/Desktop | Einstellungen > Entwickler > Konfiguration bearbeiten (claude_desktop_config.json) |
| Cursor | Einstellungen > Cursor-Einstellungen > MCP > Neuen globalen MCP-Server hinzufügen |
| Windsurf | Einstellungen > Cascade > MCP-Marketplace > Zahnrad-Symbol (mcp_config.json) |
| VS Code | In { "mcp": { "servers": { ... } } } in settings.json einbinden — Details |
VS-Code-STDIO-Konfiguration
{
"mcp": {
"servers": {
"last9": {
"type": "stdio",
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
}
Für NPM: "command": "npx" verwenden und "args": ["-y", "@last9/mcp-server@latest"] hinzufügen.
Windows
Nach dem Download von GitHub Releases extrahieren und auf den vollständigen Pfad verweisen:
{
"mcpServers": {
"last9": {
"command": "C:\\Users\\<user>\\AppData\\Local\\Programs\\last9-mcp-server.exe",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
Der NPM-Weg ist unter Windows einfacher – keine Pfadverwaltung erforderlich.
Umgebungsvariablen
| Variable | Standard | Beschreibung |
|---|---|---|
LAST9_REFRESH_TOKEN | (erforderlich) | Refresh-Token von API-Zugriff |
LAST9_DATASOURCE | Organisationsstandard | Datenquellen-/Clustername – nützlich, wenn Sie mehrere Levitate-Cluster haben |
LAST9_API_HOST | app.last9.io | API-Host überschreiben |
LAST9_TOOLSETS | alle Tools | Kommagetrennte Toolsets, die verfügbar gemacht werden sollen (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). Alias: LAST9_MCP_TOOLSETS |
LAST9_MAX_GET_LOGS_ENTRIES | 5000 | Maximale Einträge für segmentierte get_logs-Anfragen |
LAST9_USE_LOG_SEARCH_API | false | true setzen, um get_logs und get_service_logs mit einem serverseitigen Suchaufruf statt clientseitigem Chunking zu beantworten |
LAST9_DEBUG_CHUNKING | false | true setzen, um Details der Segmentplanung für get_logs, get_service_logs, get_traces zu protokollieren |
LAST9_DISABLE_TELEMETRY | true | false setzen, um internes OTel-Tracing zu aktivieren |
OTEL_SDK_DISABLED | — | Standard-OTel-Umgebungsvariable. Überschreibt LAST9_DISABLE_TELEMETRY |
OTEL_EXPORTER_OTLP_ENDPOINT | — | OTLP-Collector-Endpunkt (nur wenn Telemetrie aktiviert ist) |
OTEL_EXPORTER_OTLP_HEADERS | — | OTLP-Authentifizierungsheader (nur wenn Telemetrie aktiviert ist) |
Was es kann
Dienstzustand
get_service_summary— Rangfolge der Fleet-(service, env)-Zeilen: Intervall-request_count, throughput_rpm, HTTP-4xx/5xx-Zählungen und gRPC-Fehlerzählungenget_service_environments— Verfügbare Umgebungen für Ihre Dienste. Führen Sie dies zuerst aus – andere APM-Tools benötigenenvvon hierget_service_performance_details— Vollständige Aufschlüsselung: Durchsatz, Fehlerrate, p50/p90/p95/avg/max, Apdex, Verfügbarkeitget_service_operations_summary— Operationen gruppiert nach HTTP-Endpunkten, DB-Aufrufen, Messaging, HTTP-Clientsget_service_dependency_graph— Abhängigkeitskarte mit Durchsatz, Latenz und Fehlerraten für Upstream/Downstream/Infrastrukturget_apm_service_deviations— Aktuelles Zeitfenster mit einer Baseline gleicher Dauer vergleichen: Regressionen/Verbesserungen, Apdex-Abgleich und ein Endausgang (Fleet oder einzelner Dienst)get_exceptions— Serverseitige Ausnahmen mit Dienst- und Span-Filtern
Datenbank-Observability
Vier Tools, die direkt auf Ihre Datenbankleistung abzielen, abgeleitet aus OpenTelemetry-Trace-Spans und, wo keine Traces vorhanden sind, aus Infrastrukturmetriken wie CloudWatch. Keine zusätzliche Instrumentierung erforderlich, wenn Sie bereits OTel verwenden.
get_databases— Alle Datenbanken in Ihrer Infrastruktur entdecken: DB-Typ, Host, Durchsatz (Abfragen/min), p95-Latenz, Fehlerrate, Anzahl abhängiger Dienste. Entdeckt auch Datenbanken aus Infrastrukturmetriken wie CloudWatch, ohne dass eine Trace-Instrumentierung erforderlich ist – diese Zeilen tragen einen Aktivitätswert anstelle von Trace-Metrikenget_database_slow_queries— Die tatsächlich langsamsten Abfrageausführungen, sortiert nach Dauer, mit Trace-IDs zum Eintauchen in vollständige Tracesget_database_queries— Abfragemuster und Aggregate: wie oft eine Abfrage ausgeführt wird, durchschnittliche/p95-Dauer, Fehlerrateget_database_server_metrics— Serverseitige Metriken vom DB-Host selbst (CPU, Verbindungen, Puffertrefferquoten – abhängig von Ihrem DB-System)
Unterstützt PostgreSQL, MySQL, MongoDB, Redis, Aerospike und alles andere, was OTel mit einem db_system-Attribut tracen kann – plus Datenbanken, die aus Infrastrukturmetriken wie CloudWatch entdeckt wurden, deren Zeilen einen Aktivitätswert anstelle von Trace-Metriken tragen.
Prometheus / PromQL
prometheus_range_query— PromQL-Bereichsabfragen über beliebige Metrikenprometheus_instant_query— Sofortige Abfragen; Rollup-Funktionen wieavg_over_time,sum_over_timeverwendenprometheus_label_values— Labelwerte für eine bestimmte Serieprometheus_labels— Alle für eine Serie verfügbaren Labels
Richten Sie diese auf eine andere Datenquelle/einen anderen Cluster als den Standard aus, indem Sie LAST9_DATASOURCE setzen.
Logs
get_logs— Vollständige JSON-Pipeline-Logabfragen (Aggregationen, Filter, Feldextraktion)get_service_logs— Rohe Logzeilen für einen Dienst, filterbar nach Schweregrad und Inhaltget_log_attributes— Globaler Katalog der Attribute im Logschema für ein Zeitfensterget_log_attributes_for_pipeline— Tatsächlich vorhandene Logfelder für eine laufende Pipeline (bereichsbezogene Erkennung), jedes mit seinem genauenfilter_fieldget_drop_rules— Log-Drop-Regeln von Last9 Control Planeadd_drop_rule— Eine neue Drop-Regel erstellen, um das Logvolumen an der Quelle zu reduzieren
Traces
get_traces— JSON-Pipeline-Trace-Abfragen für breite Suchen und Aggregationenget_service_traces— Traces nach exakter Trace-ID oder Dienstname. Verwenden Sie dies, wenn Sie eine Trace-ID haben – es ist schnellerget_trace_attributes— Globaler Katalog der Attribute im Trace-Schemaget_trace_attributes_for_pipeline— Tatsächlich vorhandene Attribute für eine laufende Pipeline (bereichsbezogene Erkennung), jedes mit seinem genauenfilter_fieldget_trace_attribute_values— Unterscheidbare Werte für ein Trace-Attribut, optional auf eine Pipeline beschränktget_trace_attribute_deviations— Rangfolge der Attributwerte, die sich zwischen zwei begrenzten Span-Kohorten unterscheiden (langsam vs. schnell, Fehler vs. kein Fehler oder zwei Zeitfenster). Korrelation, nicht Kausalitätget_trace_waterfall— Ein exakter Trace als Eltern/Kind-Wasserfall mit Intervall-Union-Selbstzeit, langsamsten Spans und Diagrammwarnungen
Änderungsereignisse & Alerts
get_change_events— Deployments, Konfigurationsänderungen, Rollbacks. Korrelieren Sie Vorfälle mit dem, was sich geändert hatget_alert_groups— Konfigurierte Compass-Alert-Gruppen mit Metadaten-Labels, Team, Stufe und Regelanzahl – einschließlich Gruppen ohne Regeln und Gruppen, die nicht auslösenget_alert_config— Alert-Regelkonfigurationen – durchsuchbar nach Name, Schweregrad, Typ, Tagsget_alerts— Derzeit auslösende Alerts innerhalb eines Zeitfenstersget_alert_rule_state— Historischer Auslösezustand (1/0) pro Alert-Regel über einen Zeitraum, gruppiert nachrule_id. Filterbar nach Alert-Gruppe, Regelname, Label-Filtern und Zustand.get_notification_channels— Konfigurierte Benachrichtigungskanäle (Slack, PagerDuty, E-Mail usw.)
Benutzerdefinierte Dashboards
list_dashboards— Alle benutzerdefinierten Dashboards in Ihrer Organisation: IDs, Namen und Metadatenget_dashboard— Vollständige Dashboard-Definition nach ID, einschließlich Panels und Abfragenvalidate_dashboard— Schreibgeschütztes Lint + Ausführen + Klassifizieren für eine gespeicherte Dashboard-ID oder ein Inline-dashboard_definitionüber ein ≤24h-Fenster. Erstellt oder aktualisiert niemals Dashboardscreate_dashboard— Ein neues benutzerdefiniertes Dashboard einmal erstellen (Panels, Abfragen, Metadaten). Nachdem die ID zurückgegeben wurde, mitupdate_dashboardverfeinern.update_dashboard— Ein vorhandenes Dashboard nach ID verfeinern (vollständiger Ersatz; schreibgeschützte System-Dashboards geben einen Fehler zurück)delete_dashboard— Ein benutzerdefiniertes Dashboard nach ID löschenlist_dashboard_snapshots— Eingefrorene Punkt-in-der-Zeit-Snapshots für ein Dashboard (nur Metadaten)get_dashboard_snapshot— Vollständiger eingefrorener Snapshot einschließlich Paneldaten für RCA / teilbare Ansichtendelete_dashboard_snapshot— Einen eingefrorenen Snapshot nach ID löschen
Kontinuierliches Profiling
Erfordert, dass kontinuierliches Profiling für die Organisation aktiviert ist. Entdecken Sie zuerst Dienste mit get_profile_services, ziehen Sie dann ein Flamegraph oder rangfolge Funktionen.
get_profile_services— Dienste, die Profildaten im Fenster haben (vor Abfragen indizieren)get_flamegraph— Verschachtelter Flamegraph-Baum für einen Dienst (cpuStandard; auchalloc,wall)get_top_functions— Selbst-Sample-Rangfolge der heißesten Funktionen für einen Dienstget_profile_summary— Kurze natürlichsprachliche Triage des Profils für einen Dienst
Grafana-Dashboards
Schreibgeschützte Tools gegen die Grafana-Instanz der Organisation (über Last9s Grafana-Proxy). Anmeldefelder werden niemals an das Modell zurückgegeben. Mit LAST9_TOOLSETS=grafana aktivieren (oder Toolsets für alle Tools nicht gesetzt lassen).
grafana_search_dashboards— Durchsuche Dashboards nach Titelteilstring (paginiert;truncated: true, wenn das Limit erreicht ist)grafana_get_dashboard— Dashboard-Zusammenfassung nach UID (Panels, Variablen, PromQL-Ziele);full_json=truefür rohes Grafana-JSONgrafana_list_folders— Ordnerbaumgrafana_list_folder_dashboards— Dashboards in einem Ordner (paginiert)grafana_list_datasources— Datenquellen-Inventar ohne Anmeldedaten
Unscharfe Namensauflösung
did_you_mean— Wenn der Agent sich bei einem Entitätsnamen nicht sicher ist, liefert dies die nächsten Übereinstimmungen aus Ihrem Katalog (Dienste, Umgebungen, Hosts, Datenbanken, K8s-Deployments/Namespaces, Jobs). Bis zu 3 Vorschläge mit Ähnlichkeitswerten. Der Server ruft dies automatisch vor den meisten Tools auf, wenn eine Namenssuche leer zurückkommt.
Dienstprofil
get_service_profile— Wie die Telemetrie eines Dienstes tatsächlich aussieht, bevor Sie sie abfragen: welche Signale existieren, Sprache und Laufzeit, Bereitstellungsumgebungen, die Form seiner Logs und eine empfohlene Ingest-Korrektur, wo eine zutrifft. Ermöglicht dem Agenten, Trace-Tools zu überspringen, wenn ein Dienst keine Traces hat, und den Schweregrad aus dem Log-Body zu parsen, wennSeverityTextleer ist, anstatt darauf zu filtern und nichts zu finden.
So funktioniert es
Deep Links auf jeder Antwort. Jedes Tool gibt ein deep_link-Feld zurück — eine direkte URL zum Last9-Dashboard für genau diese Abfrage und diesen Zeitraum. Der Agent kann Ihnen den Link geben; Sie klicken ihn; Sie sind dort.
Toolsets. Standardmäßig stellt der Server jedes Tool bereit. Automatisierungshosts, die nur Untersuchungen benötigen (Logs/Traces/Metriken/Profile), können LAST9_TOOLSETS=investigate setzen (oder --toolsets=investigate übergeben), damit tools/list klein bleibt, ohne clientseitige Massendeaktivierung. Benannte Pakete: logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all. Unbekannte Namen schlagen schnell fehl. Das metrics-Paket allein enthält nicht list_datasources oder did_you_mean — verwenden Sie investigate (oder kombinieren Sie Toolsets), wenn Sie diese Erkennungshilfen benötigen.
Tool-Referenzressourcen. Lange logjson/tracejson/service-logs/metrics-Handbücher sind MCP-Ressourcen (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics, last9://reference/investigation), kein ständig aktiver Tool-Beschreibungstext. Kritische Abfrageregeln bleiben in der Tool-Beschreibung, damit Agenten, die resources/read nie aufrufen, dennoch korrekte Konstruktionsanleitungen erhalten. Entdecken Sie org-spezifische Felder mit get_log_attributes / get_log_attributes_for_pipeline (und den Trace-Äquivalenten) — sie werden nicht in Beschreibungen eingefügt.
Chunking großer Ergebnisse. get_logs und get_traces verarbeiten große Ergebnismengen durch Chunking statt durch Abschneiden. Das Standardlimit beträgt 5000 Einträge für Logs; konfigurierbar über LAST9_MAX_GET_LOGS_ENTRIES.
Entwicklung
HTTP-Modus, curl-Tests, Erstellen aus dem Quellcode
Im HTTP-Modus ausführen
export LAST9_REFRESH_TOKEN="your_refresh_token"
export LAST9_HTTP=true
export LAST9_PORT=8080
./last9-mcp-server
Der Server startet unter http://localhost:8080/mcp.
Mit curl testen
Der Streamable-HTTP-Handler läuft im zustandslosen Modus, sodass jede Anfrage unabhängig bedient wird. Ein initialize-Handshake und ein Mcp-Session-Id-Header sind optional — Clients, die sie senden, funktionieren weiterhin (der Header wird akzeptiert und ignoriert), und Clients können auch direkt zu tools/list / tools/call springen. Jedes Tool ist eine unabhängige Anfrage/Antwort-Abfrage; der Server sendet keine Server→Client-Benachrichtigungen, sodass GET /mcp (der SSE-Stream) 405 zurückgibt.
# 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
}
}
}'
Aus dem Quellcode erstellen
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 ist für die lokale Entwicklung. Für die tatsächliche Nutzung ist der gehostete HTTP-Endpunkt einfacher.
Tool-Referenz
Alle Parameter, Zeitangabestandards und Details
Zeiteingabe
- Absolute Zeiten (
start_time_iso/end_time_isoodertime_iso) haben Vorrang vorlookback_minutes. - Für relative Fenster: verwenden Sie
lookback_minutes. - Für absolute Fenster: verwenden Sie RFC3339/ISO8601 —
2026-02-09T15:04:05Z. - Legacy
YYYY-MM-DD HH:MM:SSwird nur aus Kompatibilitätsgründen akzeptiert.
get_exceptions
limit(Ganzzahl, optional): Maximale Ausnahmen. Standard: 20.lookback_minutes(Ganzzahl, optional): Standard: 60.start_time_iso/end_time_iso(Zeichenfolge, optional): Absoluter Zeitbereich.service_name(Zeichenfolge, optional): Nach Dienst filtern.span_name(Zeichenfolge, optional): Nach Span-Name filtern.env(Zeichenfolge, optional): Nach Umgebung filtern.
get_service_summary
start_time_iso/end_time_iso(Zeichenfolge, optional)env(Zeichenfolge, optional): PromQL-Regex. Standard:.*. Exakte Übereinstimmung erfordert Anker (z. B.^prod$).sort_by(Zeichenfolge, optional):request_count(Standard),throughput_rpm,http_4xx_count,http_5xx_countodergrpc_error_count.limit(Ganzzahl, optional): Maximale Rangzeilen. Weglassen oder 0 bedeutet 10; Werte über 100 werden auf 100 begrenzt.
get_service_environments
start_time_iso/end_time_iso(Zeichenfolge, optional)
Alle anderen APM-Tools erfordern einen
env-Wert. Verwenden Sie"", wenn dies leer zurückkommt.
get_service_performance_details
service_name(Zeichenfolge, erforderlich)lookback_minutes(Ganzzahl, optional): Standard: 60.start_time_iso/end_time_iso(Zeichenfolge, optional)env(Zeichenfolge, optional): Standard:prod.
get_service_operations_summary
service_name(Zeichenfolge, erforderlich)lookback_minutes(Ganzzahl, optional): Standard: 60.start_time_iso/end_time_iso(Zeichenfolge, optional)env(Zeichenfolge, optional): Standard:prod.
get_service_dependency_graph
service_name(Zeichenfolge, optional)lookback_minutes(Ganzzahl, optional): Standard: 60.start_time_iso/end_time_iso(Zeichenfolge, optional)env(Zeichenfolge, optional): Standard:prod.
get_apm_service_deviations
service_name(Zeichenfolge, optional): Für Flottenumfang weglassen; für einen Dienst und seine Operationskorrelationen angeben.lookback_minutes(Ganzzahl, optional): Aktuelles Fenster. Standard: 60.start_time_iso/end_time_iso(Zeichenfolge, optional): Explizites aktuelles Fenster.baseline_start_time_iso/baseline_end_time_iso(Zeichenfolge, optional): Explizite Basislinie. Standard: das unmittelbar vorhergehende Fenster gleicher Dauer.datasource(Zeichenfolge, optional): Beschränkt den Vergleich auf eine Datenquelle.env(Zeichenfolge, optional): Standard:prod.max_services/max_operations(Ganzzahl, optional): Standard 10, maximal 10 jeweils.
get_databases
env(Zeichenfolge, optional): Nach Umgebung filtern. Akzeptiert einen regulären Ausdruck. Standard: alle.lookback_minutes(Ganzzahl, optional): Standard: 60. Fenster darf 7 Tage nicht überschreiten.start_time_iso/end_time_iso(Zeichenfolge, optional)
get_database_slow_queries
db_system(Zeichenfolge, optional): z. B.postgresql,mysql,mongodb,redis.host(Zeichenfolge, optional): Datenbankhost (net_peer_name).service_name(Zeichenfolge, optional): Name des aufrufenden Dienstes.env(Zeichenfolge, optional)min_duration_ms(Gleitkommazahl, optional): Mindestabfragedauer in ms.lookback_minutes(Ganzzahl, optional): Standard: 60.start_time_iso/end_time_iso(Zeichenfolge, optional)limit(Ganzzahl, optional): Standard: 20.
get_database_queries
db_system(Zeichenfolge, optional)host(Zeichenfolge, optional)service_name(Zeichenfolge, optional)env(Zeichenfolge, optional)lookback_minutes(Ganzzahl, optional): Standard: 60.start_time_iso/end_time_iso(Zeichenfolge, optional)limit(Ganzzahl, optional): Standard: 20.
get_database_server_metrics
db_system(Zeichenfolge, erforderlich): z. B.postgresql,mysql,mongodb,redis,aerospike.host(Zeichenfolge, optional)lookback_minutes(Ganzzahl, optional): Standard: 60.start_time_iso/end_time_iso(Zeichenfolge, optional)
prometheus_range_query
query(Zeichenfolge, erforderlich): Die PromQL-Abfrage.start_time_iso/end_time_iso(Zeichenfolge, optional): Standard: letzte 60 Minuten.lookback_minutes(Gleitkommazahl, optional): Standard: 60.
prometheus_instant_query
query(Zeichenfolge, erforderlich)time_iso(Zeichenfolge, optional): Standard: jetzt.lookback_minutes(Gleitkommazahl, optional)
prometheus_label_values
match_query(Zeichenfolge, optional): PromQL-Filter.label(Zeichenfolge, erforderlich): Label-Name.start_time_iso/end_time_iso(Zeichenfolge, optional)
prometheus_labels
match_query(Zeichenfolge, optional): PromQL-Filter.start_time_iso/end_time_iso(Zeichenfolge, optional)
get_logs
logjson_query(Array, erforderlich): JSON-Pipeline-Abfrage.lookback_minutes(Ganzzahl, optional): Standard: 5.start_time_iso/end_time_iso(Zeichenfolge, optional)limit(Ganzzahl, optional): Serverstandard: 5000.index(Zeichenfolge, optional):physical_index:<name>oderrehydration_index:<block_name>.
Für die logbasierte Dienstinventur fragen Sie zuerst physical_index_service_count ab:
sum by (name, service_name, env) (physical_index_service_count{destination="logs"})
Verwenden Sie service_name als ServiceName, env als Umgebung, wenn vorhanden, und name als physischen Indexnamen. Wenn name="default", lassen Sie index weg; für einen nicht standardmäßigen physischen Index, der vom Benutzer ausgewählt wurde, übergeben Sie index: "physical_index:<name>". Wenn das Backend die explizite physische Indexfilterung ablehnt, versuchen Sie es erneut ohne index und melden Sie, dass die explizite physische Indexfilterung für dieses Backend nicht verfügbar ist.
get_service_logs
service_name(Zeichenfolge, erforderlich)lookback_minutes(Ganzzahl, optional): Standard: 60.limit(Ganzzahl, optional): Standard: 20.env(Zeichenfolge, optional)severity_filters(Array, optional): z. B.["error", "warn"]. ODER-Logik.body_filters(Array, optional): z. B.["timeout", "failed"]. ODER-Logik.start_time_iso/end_time_iso(Zeichenfolge, optional)index(Zeichenfolge, optional)
Mehrere Filtertypen kombinieren mit UND. Jedes Array verwendet intern ODER.
Verwenden Sie zuerst get_logs für breite aggregierte Zählungen; verwenden Sie get_service_logs erst nach der Eingrenzung auf einen Dienst/Umgebung/Index und eine kleine Stichprobenmenge.
get_log_attributes
lookback_minutes(Ganzzahl, optional): Standard: 15.start_time_iso/end_time_iso(Zeichenfolge, optional)region(Zeichenfolge, optional)index(Zeichenfolge, optional)
get_log_attributes_for_pipeline
pipeline(Array, erforderlich): Vorherige Filterstufen zur Eingrenzung der Erkennung, z. B.[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(Ganzzahl, optional): Standard: 15.start_time_iso/end_time_iso(Zeichenfolge, optional)region(Zeichenfolge, optional)index(Zeichenfolge, optional)
get_drop_rules
Keine Parameter. Listet Drop-Regeln über GET /otel_settings/drop?region=... auf.
add_drop_rule
name(Zeichenfolge, erforderlich)filters(Array, erforderlich): Jeder Filter:key,value,operator(equals/not_equals),conjunction(and).- Filter-Schlüssel müssen
attributes["key_name"]oderresource.attributes["key_name"]verwenden (von der Last9-API gefordert). - Erstellt die Regel über
POST /otel_settings/drop?region=...&cluster_id=....
get_traces
Für breite Suchen und Aggregationen verwenden. Für die exakte Trace-ID-Suche verwenden Sie get_service_traces.
tracejson_query(Array, erforderlich)start_time_iso/end_time_iso(Zeichenfolge, optional)lookback_minutes(Ganzzahl, optional): Standard: 60.limit(Ganzzahl, optional): Standard: 5000.
get_service_traces
Genau eines von trace_id oder service_name ist erforderlich.
trace_id(string, optional): Standard-Rückblick: 72 Stunden.service_name(string, optional): Standard-Rückblick: 60 Min.lookback_minutes(integer, optional)start_time_iso/end_time_iso(string, optional)limit(integer, optional): Standard: 10.env(string, optional)
get_trace_attributes
lookback_minutes(integer, optional): Standard: 15.start_time_iso/end_time_iso(string, optional)region(string, optional)
get_trace_attributes_for_pipeline
pipeline(array, erforderlich): Vorherige Filterstufen zur Eingrenzung der Erkennung, z. B.[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(integer, optional): Standard: 15.start_time_iso/end_time_iso(string, optional)region(string, optional)
get_trace_attribute_values
tag_name(string, erforderlich): Attributname ausget_trace_attributes(z. B.resource_departmentoderattributes['http.method']).pipeline(array, optional): Vorherige Filterstufen zur Eingrenzung der Werte; für globale Werte weglassen.lookback_minutes(integer, optional): Standard: 15.start_time_iso/end_time_iso(string, optional): Historische RFC3339-Grenzen; haben Vorrang vorlookback_minutes.region(string, optional)
get_trace_attribute_deviations
comparison_mode(string, erforderlich):latency,errorsodertime.service_name(string, erforderlich)environment(string, erforderlich): Exakterdeployment.environment-Wert.operation(string, optional)filters(array, optional): Trace-JSON-Filterbedingungen.candidate_attributes(array, optional): Maximal 8; für begrenzte Erkennung weglassen.latency_threshold_ms(number, optional): Erforderlich für denlatency-Modus; für andere Modi abgelehnt.start_time_iso/end_time_iso(string, optional)lookback_minutes(integer, optional): Standard: 15. Maximum: 15.baseline_start_time_iso/baseline_end_time_iso(string, optional): Erforderlich für dentime-Modus; nicht überlappend und gleich lang wie das Zielfenster.minimum_cohort_size(integer, optional): Standard: 100. Minimum: 20.minimum_value_support(integer, optional): Standard: 20. Minimum: 10.limit(integer, optional): Standard: 10. Maximum: 10.
Erfordert die Aktivierung der zugehörigen Backend-Funktion.
get_trace_waterfall
trace_id(string, erforderlich)environment(string, optional)start_time_iso/end_time_iso(string, optional)lookback_minutes(integer, optional): Standard: 4320 (72 Stunden).selected_span_id(string, optional): Gibt Attribute, Ereignisse und Links nur für diesen Span zurück.max_spans(integer, optional): Standard: 500. Maximum: 1000.
Gibt einen investigation-evidence/v1-Umschlag zurück; das Wasserfalldiagramm befindet sich unter data.
get_change_events
start_time_iso/end_time_iso(string, optional)lookback_minutes(integer, optional): Standard: 60.service_name(string, optional)env(string, optional)event_name(string, optional): Zuerst ohne dies aufrufen, umavailable_event_nameszu erhalten.
get_alert_groups
Konfigurierter Compass-Alert-Group-Bestand für Changeboard-/Label-Coverage-Audits. Enthält Gruppen ohne Regeln und Gruppen, die nicht auslösen. Gibt kein PromQL zurück.
alert_group_name/alert_group_type/data_source_name(string, optional): Groß-/Kleinschreibung-unabhängige Teilstring-Übereinstimmung.team/tier(string, optional): Exakte Groß-/Kleinschreibung-unabhängige Übereinstimmung mit konfigurierten Metadaten.label_key+label_value(string, optional): Müssen zusammen gesetzt werden. Exakte Groß-/Kleinschreibung-unabhängige Übereinstimmung mit einemmetadata.labels-Paar – sowohl Schlüssel als auch Wert.
Gibt kompaktes JSON {"count":N,"groups":[...]} mit id, name, type, entity_class, team, tier, metadata.labels und Regelanzahlen zurück. Leeres team / labels bedeutet nicht gesetzt.
get_alert_config
search_term(string, optional): Freitextsuche über Name, Gruppe, Datenquelle, Tags.rule_name(string, optional)severity(string, optional)rule_type(string, optional):staticoderanomaly.alert_group_name/alert_group_type/data_source_name(string, optional)tags(array, optional): Alle müssen übereinstimmen (UND-Logik).
get_alerts
time_iso(string, optional): Auswertungszeit in RFC3339.window(integer, optional): Rückblick in Sekunden. Standard: 900. Bereich: 60–86400.lookback_minutes(integer, optional): Bereich: 1–1440.
get_alert_rule_state
start_time(integer, erforderlich): Unix-Epoch-Start des Bereichs (inklusive).end_time(integer, erforderlich): Unix-Epoch-Ende des Bereichs (inklusive).step(integer, erforderlich): Auflösung in Sekunden zwischen den Stichproben. Die Anzahl der Stichproben((end_time - start_time) / step + 1)ist auf 100 begrenzt.alert_group_id(string, optional): Nach Alert-Gruppen-ID filtern.rule_name(string, optional): Regex-Filter auf Regelnamen.alert_group_name(string, optional): Regex-Filter auf Alert-Gruppennamen.label_filters(string, optional): Kommagetrenntekey=value-Label-Filter.state(string, optional): Nach Status filtern (z. B.firing).
Gibt eine JSON-Zuordnung von rule_id -> [{timestamp, is_firing}] zurück. Ein Zeitstempel, zu dem eine Regel in der Upstream-Antwort fehlt, wird als is_firing=0 gemeldet – das bedeutet „nicht als auslösend beobachtet“, nicht einen bestätigten Normalzustand.
get_notification_channels
Keine Parameter. Gibt alle konfigurierten Benachrichtigungskanäle zurück (Slack, PagerDuty, E-Mail, Webhooks usw.).
did_you_mean
query(string, erforderlich): Der zu suchende Name – teilweise, falsch geschrieben oder abgekürzt.type(string, optional): Auf Entitätstyp beschränken:service,environment,host,database,k8s_deployment,k8s_namespace,job.
Gibt bis zu 3 nächste Übereinstimmungen mit Ähnlichkeitswerten zurück. Verwenden Sie dies vor jedem Tool-Aufruf, bei dem der Entitätsname unsicher ist. Wenn ein vorheriger Aufruf leere Ergebnisse zurückgab, versuchen Sie dies vor einem erneuten Versuch.
get_service_profile
service_name(string, erforderlich): Dienst, für den ein Telemetrieprofil abgeleitet werden soll.datasource(string, optional): Datenquellenname. Für die Standardeinstellung weglassen.
Gibt eine kurze Untersuchungszusammenfassung zurück, gefolgt vom vollständigen Profil als rohes JSON: Signalpräsenz (logs/traces/metrics als present, absent oder unknown), Sprache und Laufzeit, Bereitstellungsumgebungen, Log-signal_shape (log_format, severity_set, level_field) und einen empfohlenen Ingest-Fix, falls zutreffend. Von Upstream abgeleitet und mit einer TTL von ca. 15 Minuten zwischengespeichert.
Rufen Sie dies vor jeder dienstbezogenen Untersuchung auf, damit die Tool-Auswahl zur tatsächlichen Telemetrie des Dienstes passt – überspringen Sie Trace-Tools, wenn traces absent ist, und wenn severity_set none oder partial ist, parsen Sie den Schweregrad aus level_field im Log-Body, anstatt severity_filters zu verwenden. metrics ist immer unknown und dependencies ist in v1 nicht befüllt. Wenn logs und traces beide absent sind, bestätigen Sie den Namen mit did_you_mean, bevor Sie schlussfolgern, dass der Dienst nicht überwacht wird.
list_dashboards
Keine Parameter. Gibt alle benutzerdefinierten Dashboards in der Organisation als JSON-Array mit id, name und Metadaten zurück.
get_dashboard
id(string, erforderlich): Dashboard-UUID.region(string, optional): Region für die Panel-Abfragepopulation. Standardmäßig die konfigurierte Datenquellenregion.
validate_dashboard
Nur lesen. Erstellt oder aktualisiert niemals Dashboards. Akzeptiert genau eines von dashboard_id oder dashboard_definition.
dashboard_id(string, optional): Gespeicherte Dashboard-UUID zur Validierung.dashboard_definition(object, optional): Inline-ungespeicherter Dashboard-Body (echter Trockenlauf).start_time_iso/end_time_iso(string, optional): Validierungsfenster (RFC3339). Muss ≤ 24h sein.region(string, optional): Region für die Panel-Abfrageausführung.
Gibt dashboard_validation/v1 zurück: Pro-Panel-Lint- und Ausführungsklassifizierung (data / no_data / invalid / error). Leere Ergebnisse am ersten Tag klassifizieren als valid_no_data ohne Diagnose-Sonden.
create_dashboard
Nur neu. Nachdem dieser Aufruf dashboard.id zurückgibt, mit update_dashboard verfeinern – nicht erneut erstellen, um Panels hinzuzufügen, zu kürzen oder zu korrigieren.
dashboard(object, erforderlich): Dashboard-Definition mitnameundpanels[]. Jedes Panel erfordertname,version,layout(x,y,w,h),visualization.typeundqueries[].metadata(object, optional): Dashboard-Metadaten –_category- und_type-Felder (z. B.{"_category":"custom","_type":"metrics"}).
update_dashboard
Bevorzugen Sie dies nach create. Vollständiger Ersatz nach ID (gleicher Body wie bei create).
id(string, erforderlich): Dashboard-UUID zum Aktualisieren.dashboard(object, erforderlich): Vollständiger Ersatz-Dashboard-Body (gleiche Form wie bei create).metadata(object, optional): Ersatz-Metadaten. Schreibgeschützte System-Dashboards geben einen 403-Fehler zurück.
delete_dashboard
id(string, erforderlich): Dashboard-UUID zum Löschen. Schreibgeschützte System-Dashboards können nicht gelöscht werden.
list_dashboard_snapshots
dashboard_id(string, erforderlich): Dashboard-UUID, deren Snapshots aufgelistet werden sollen.
Gibt nur Metadaten zurück (id, name, expires_at usw.). Verwenden Sie get_dashboard_snapshot für eingefrorene Paneldaten.
get_dashboard_snapshot
id(string, erforderlich): Snapshot-UUID.
Gibt den vollständigen eingefrorenen Snapshot einschließlich dashboard_definition, panel_data, time_range und variables zurück.
delete_dashboard_snapshot
id(string, erforderlich): Snapshot-UUID zum Löschen.
get_profile_services
lookback_minutes/start_time_iso/end_time_iso(optional): Fenster; Rückblick oder explizite ISO-Grenzen bevorzugen (Standard 60m).region(string, optional): Regionsüberschreibung.
Gibt Dienste zurück, die Profildaten im Fenster haben. Rufen Sie dies vor get_flamegraph / get_top_functions / get_profile_summary auf.
get_flamegraph
service(string, erforderlich): Dienstname ausget_profile_services.profile_type(string, optional):cpu(Standard),allocoderwall. Einen Typ beim Vergleich von Fenstern festlegen.env/cluster/namespace/runtime(string, optional): Bereichsfilter.limit(number, optional): Maximale aggregierte Stack-Zeilen (Standard 1000, Maximum 10000).lookback_minutes/start_time_iso/end_time_iso/region(optional).
Gibt einen verschachtelten Flamegraph-Baum zurück (name / value / self / children). truncated: true bedeutet, dass das API-Zeilenlimit erreicht wurde.
get_top_functions
Gleiche Filter wie get_flamegraph. Gibt eine Selbst-Sample-Rangliste der heißesten Funktionen zurück. Kann abgeschnitten sein; truncated prüfen.
get_profile_summary
Gleiche Filter wie get_flamegraph. Gibt eine kurze natürlichsprachliche Triage des Profils für den Dienst zurück.
grafana_search_dashboards
query(string, optional): Titel-Teilstring. Leer listet breit auf (vorbehaltlich des 5.000-Zeilen-Limits).
Gibt {"dashboards":[…], "truncated":bool} mit uid, title, uri, url, type, tags zurück. Verwenden Sie uid mit grafana_get_dashboard.
grafana_get_dashboard
uid(string, erforderlich): Grafana-Dashboard-UID.full_json(boolean, optional): Wenn true, rohes Grafana-JSON anstelle der gefilterten Zusammenfassung zurückgeben. Standardzusammenfassung: Version, Tags, Templating-Variablen sowie Typ/Datenquelle/gridPos/promQL-Ziele jedes Panels. Unbekannte Plugin-Panel-Typen erscheinen inunsupportedPanelTypes.
grafana_list_folders
Keine Parameter. Gibt den Ordnerbaum zurück.
grafana_list_folder_dashboards
folder_uid(string, erforderlich): Grafana-Ordner-UID.
Gibt {"dashboards":[…], "truncated":bool} für Dashboards in diesem Ordner zurück (paginiert bis zu 5.000).
grafana_list_datasources
Keine Parameter. Gibt eine sichere Projektion der Datenquellen zurück (ohne Anmeldeinformationsfelder).
Testen
Siehe TESTING.md für Einrichtung und Anweisungen zu Integrationstests.
