Last9

resmi

Bawa konteks produksi real-time—log, metrik, dan trace—secara mulus ke lingkungan lokal Anda untuk memperbaiki kode secara otomatis lebih cepat.

Apa yang bisa Anda lakukan dengan Last9 MCP?

  • Investigasi insiden produksi — Minta asisten Anda mengambil log, trace, metrik, pengecualian, dan peringatan yang aktif untuk suatu layanan agar dapat mendiagnosis penyebab kerusakan.
  • Korelasikan perubahan dengan dampak — Periksa deployment dan perubahan konfigurasi, lalu bandingkan suatu layanan dan pemanggilnya sebelum dan sesudah perubahan untuk mengetahui apakah perubahan tersebut menyebabkan regresi.
  • Kueri metrik Prometheus — Jalankan kueri rentang atau instan PromQL dan tampilkan nilai label untuk menjelajahi metrik apa pun di sumber data Anda.
  • Periksa performa database — Temukan database, cari eksekusi kueri yang lambat, dan tinjau pola kueri serta metrik sisi server dari span OTel.
  • Analisis trace dan profil — Ambil waterfall trace berdasarkan ID, urutkan deviasi atribut antar kohort, atau ambil flamegraph dan fungsi teratas untuk suatu layanan.
  • Kelola peringatan dan dasbor — Tinjau cakupan dan kebersihan peringatan, buat atau ubah aturan peringatan, serta tampilkan, validasi, atau edit dasbor kustom.

Dokumentasi

Last9 MCP Server

last9 mcp demo

Agen AI Anda tidak tahu apa yang rusak di lingkungan produksi. Ini memperbaikinya.

Last9 MCP Server menghubungkan Claude, Cursor, Windsurf, dan asisten AI lain yang mendukung MCP langsung ke data observabilitas produksi Anda — log, metrik, trace, pengecualian, kueri database, peringatan, dan deployment. Agen berhenti menebak dan mulai membaca sinyal yang sebenarnya.


Mulai dalam 30 detik (Hosted)

Tidak perlu memasang biner. Tidak perlu mengelola token. Satu URL, OAuth di browser, selesai.

Temukan slug org Anda di 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

Ketik /mcp, pilih last9, lalu autentikasi. Selesai.

Cursor

Settings > MCP > Add New MCP Server:

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

Klik Connect, lalu selesaikan OAuth.

VS Code

Memerlukan v1.99+. Buka Command Palette → MCP: Add Server, tempel URL, lalu autentikasi.

Atau langsung di settings.json:

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

Windsurf

Settings > Cascade > Open MCP Marketplace > ikon gear (mcp_config.json):

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

Claude Web/Desktop

Settings > Connectors > Add custom connector. Beri nama last9, tempel URL, lalu autentikasi.

Memerlukan akses admin ke organisasi Claude Anda.


Self-Hosted (STDIO)

Gunakan opsi ini jika klien MCP Anda tidak mendukung transport HTTP, atau jika Anda perlu menjalankan server secara lokal.

Instalasi

Homebrew:

brew install last9/tap/last9-mcp

NPM:

Memerlukan Node.js 22.23.4+, 24.22.1+ atau 26.12.1+: rilis yang lebih lama menerima sertifikat TLS dari perantara eMudhra yang telah disusupi saat penginstal mengunduh biner.

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

Rilis biner (Windows / manual):

Unduh dari GitHub Releases:

PlatformArsip
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

Dapatkan Refresh Token

Hanya admin yang dapat membuat token.

  1. Buka API Access
  2. Klik Generate Token dengan izin Write
  3. Salin token

Konfigurasi Klien

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

Tempat menempelkan ini:

KlienLokasi
Claude Web/DesktopSettings > Developer > Edit Config (claude_desktop_config.json)
CursorSettings > Cursor Settings > MCP > Add New Global MCP Server
WindsurfSettings > Cascade > MCP Marketplace > ikon gear (mcp_config.json)
VS CodeBungkus dalam { "mcp": { "servers": { ... } } } di settings.json — detail
Konfigurasi STDIO VS Code
{
  "mcp": {
    "servers": {
      "last9": {
        "type": "stdio",
        "command": "/opt/homebrew/bin/last9-mcp",
        "env": {
          "LAST9_REFRESH_TOKEN": "<your_refresh_token>"
        }
      }
    }
  }
}

Untuk NPM: gunakan "command": "npx" dan tambahkan "args": ["-y", "@last9/mcp-server@latest"].

Windows

Setelah mengunduh dari GitHub Releases, ekstrak dan arahkan ke path lengkap:

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

Opsi NPM lebih mudah di Windows — tidak perlu mengelola path.

Variabel Lingkungan

VariabelDefaultDeskripsi
LAST9_REFRESH_TOKEN(wajib)Refresh token dari API Access
LAST9_DATASOURCEorg defaultNama datasource/cluster — berguna jika Anda memiliki beberapa cluster Levitate
LAST9_FAKE_NOW_ISO(tidak disetel)Hanya untuk eval/replay; jangan pernah disetel di lingkungan produksi. Waktu RFC3339 (misalnya 2026-01-02T15:04:05Z) yang menggantikan waktu saat ini ketika menyelesaikan rentang relatif seperti lookback_minutes, sehingga proses dapat direproduksi. Nilai yang tidak valid menyebabkan kesalahan saat startup. Timeout, cache, dan kedaluwarsa token tetap menggunakan waktu nyata
LAST9_API_HOSTapp.last9.ioGanti host API
LAST9_TOOLSETSsemua toolToolset yang dipisahkan koma untuk ditampilkan (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). Alias: LAST9_MCP_TOOLSETS
LAST9_MCP_READ_ONLYfalseSetel true agar hanya menyajikan tool baca-saja; lihat Mode baca-saja. Nilai yang bukan boolean menyebabkan kesalahan saat startup. Alias: LAST9_READ_ONLY
LAST9_MCP_ALLOW_WRITE_TOOLS—Tool tulis yang dipisahkan koma dan tetap disajikan dalam mode baca-saja. Alias: LAST9_ALLOW_WRITE_TOOLS
LAST9_MAX_GET_LOGS_ENTRIES5000Jumlah maksimum entri untuk permintaan get_logs yang dipecah menjadi beberapa bagian
LAST9_USE_LOG_SEARCH_APIfalseSetel true agar menjawab get_logs dan get_service_logs dengan satu panggilan pencarian di sisi server, bukan pemecahan menjadi beberapa bagian di sisi klien. Setiap panggilan mendapat waktu 90 detik, lalu memberikan saran untuk mempersempit rentang; respons 502 atau 503 dicoba ulang sekali dalam batas waktu tersebut
LAST9_DEBUG_CHUNKINGfalseSetel true untuk mencatat detail perencanaan pemecahan menjadi beberapa bagian untuk get_logs, get_service_logs, get_traces
LAST9_DISABLE_TELEMETRYtrueSetel false untuk mengaktifkan tracing OTel internal
OTEL_SDK_DISABLED—Variabel lingkungan OTel standar. Mengganti LAST9_DISABLE_TELEMETRY
OTEL_EXPORTER_OTLP_ENDPOINT—Endpoint kolektor OTLP (hanya saat telemetri diaktifkan)
OTEL_EXPORTER_OTLP_HEADERS—Header autentikasi OTLP (hanya saat telemetri diaktifkan)

Pengukuran waktu fase tool

Dengan telemetri internal diaktifkan, span tool menyertakan last9.phase.<phase>.duration_ms (milidetik waktu nyata yang berlalu) dan last9.phase.<phase>.failed (apakah fase tersebut mengembalikan kesalahan). Kolom yang sama juga dicatat sebagai log debug tool phase completed, dengan tool dan phase, jika logger yang dikonfigurasi menerima rekaman debug. Input, teks kueri, kredensial, dan isi kesalahan tidak ditambahkan melalui pengukuran waktu ini.

ToolFase
get_log_patternssample: mengambil dan mendekode sampel; mine: penambangan pola; deep_link: menyelesaikan indeks opsional dan membuat tautan
get_logsfetch: mengambil, mendekode, dan menggabungkan hasil, termasuk percobaan ulang dan pemeriksaan kewajaran jumlah opsional; count_sanity: pemeriksaan opsional bertingkat; post_process: panduan, ringkasan, dan pemformatan JSON; deep_link: penyelesaian indeks dan pembuatan tautan
get_service_profilerequest: menyiapkan dan mengirim permintaan melalui klien API bersama, lalu membaca seluruh respons sebelum pemformatan singkat

Hanya fase yang dijalankan yang dicatat, termasuk pengambilan data yang gagal. Helper opsional yang menekan kesalahan tetap mempertahankan perilaku tersebut; failed: false tidak menjamin bahwa tautan opsional atau pemeriksaan jumlah tersedia. Durasi count_sanity yang bertingkat sudah termasuk dalam fetch; jangan menjumlahkannya dua kali. Waktu pengambilan data mencakup pekerjaan klien, jadi bukan pengukuran eksekusi backend saja. Bandingkan fase-fase ini pada rentang dan jalur pencarian yang setara sebelum menyesuaikan sampling atau caching.

Untuk menyelidiki latensi, jalankan ulang layanan, datasource, indeks, rentang, dan batas yang sama pada build baseline dan kandidat. Catat SHA build, total tool, durasi fase, last9.logs.search_path, atribut percobaan ulang jika ada, dan flag cakupan. Bandingkan panggilan yang lambat maupun yang umum. Pengambilan data atau permintaan profil yang lambat menunjukkan fase jaringan/API yang perlu diselidiki; eksekusi backend memerlukan bukti terkaitnya sendiri sebelum latensi ekor dikaitkan dengan backend. Diagnostik ini saja tidak membuktikan adanya peningkatan latensi.

Mode baca-saja

--read-only (atau LAST9_MCP_READ_ONLY=true) hanya menyajikan tool beranotasi readOnlyHint: true, sehingga tidak ada tool yang dapat membuat, mengubah, atau menghapus aturan peringatan, kanal notifikasi, dasbor, atau aturan drop, mengakui atau menetapkan ulang peringatan, maupun membisukan grup. Tool tanpa anotasi dianggap sebagai tool tulis dan disembunyikan.

Untuk mempertahankan beberapa tool tulis, cantumkan dengan --allow-write-tools (atau LAST9_MCP_ALLOW_WRITE_TOOLS):

last9-mcp --read-only --allow-write-tools=acknowledge_alert,mute_alert_group
  • Server menolak untuk memulai jika nama yang diizinkan bukan tool tulis (salah ketik atau nama tool baca); kesalahan akan mencantumkan tool tulis yang valid.
  • --allow-write-tools tanpa --read-only menyebabkan kesalahan saat startup, karena semua tool tulis sudah disajikan.
  • Mode baca-saja dapat digabungkan dengan --toolsets: tool hanya disajikan jika memenuhi keduanya. --toolsets=alerts --read-only --allow-write-tools=mute_alert_group menyajikan tool baca peringatan ditambah mute_alert_group; tool tulis yang diizinkan tetapi berada di luar toolset yang dipilih tetap disembunyikan.
  • Mode --http dan dump-tools mematuhi flag dan variabel lingkungan yang sama: go run . dump-tools --read-only mencetak permukaan baca-saja, beserta instruksi server yang disajikannya di instructions.
  • Deskripsi, skema, dan hasil tool baca, serta instruksi server, tidak pernah menyebut tool tulis yang disembunyikan. Tool tulis yang diizinkan tetap dapat menyebut saudara tersembunyinya (create_alert membuat aturan nonaktif yang diaktifkan oleh patch_alert), jadi izinkan pasangan seperti itu secara bersamaan.

Yang Dapat Dilakukan

Orientasi

  • get_workspace_overview — Panggilan pertama yang disarankan saat permintaan tidak menyebut layanan atau tool (permintaan yang menyebutkannya langsung menuju tool terkait): lingkungan, sinyal yang terlihat (log, trace, metrik) dalam satu jam terakhir, jumlah layanan dan grup peringatan, peringatan yang sedang aktif, serta waktu saat ini dalam satu panggilan ringan. Sinyal yang tidak terlihat dalam satu jam tersebut mungkin masih memiliki data lama, sehingga tetap dapat dikueri. Subpanggilan yang gagal membuat kolomnya bernilai null dan menambahkan entri errors[]. Disajikan di setiap toolset
  • get_current_time — Waktu saat ini, beserta batas absolut untuk last 2h, yesterday atau since yesterday 9am IST, dalam zona IANA atau singkatan umum apa pun. Disajikan di setiap toolset

Kesehatan Layanan

  • get_service_summary — Baris (service, env) armada yang diurutkan: request_count interval, throughput_rpm, jumlah HTTP 4xx/5xx, dan jumlah kesalahan gRPC
  • get_service_environments — Lingkungan yang tersedia untuk layanan Anda. Jalankan ini terlebih dahulu — tool APM lainnya memerlukan env dari sini
  • get_service_performance_details — Rincian lengkap: throughput, tingkat kesalahan, p50/p90/p95/rata-rata/maksimum, apdex, ketersediaan (diringkas secara default; seri lengkap dengan include_series)
  • get_service_operations_summary — Operasi yang dikelompokkan berdasarkan endpoint HTTP, panggilan DB, messaging, klien HTTP
  • get_service_dependency_graph — Peta dependensi dengan throughput, latensi, dan tingkat kesalahan untuk upstream/downstream/infra
  • get_apm_service_deviations — Bandingkan rentang saat ini dengan baseline berdurasi sama: regresi/peningkatan, rekonsiliasi Apdex, dan hasil akhir (armada atau satu layanan)
  • get_exceptions — Pengecualian sisi server dengan filter layanan dan span

Observabilitas Database

Empat tool yang langsung memeriksa performa database Anda, yang diturunkan dari span trace OpenTelemetry dan, jika trace tidak tersedia, metrik infrastruktur seperti CloudWatch. Tidak perlu instrumentasi tambahan jika Anda sudah menggunakan OTel.

  • get_databases — Temukan semua database di seluruh infrastruktur Anda: jenis DB, host, throughput (kueri/menit), latensi p95, tingkat kesalahan, jumlah layanan yang bergantung padanya. Juga menemukan database dari metrik infrastruktur seperti CloudWatch, tanpa memerlukan instrumentasi trace — baris tersebut menampilkan nilai aktivitas, bukan metrik trace
  • get_database_slow_queries — Eksekusi kueri paling lambat yang sebenarnya, diurutkan berdasarkan durasi, dengan ID trace untuk menelusuri trace lengkap
  • get_database_queries — Pola dan agregat kueri: frekuensi kueri dijalankan, durasi rata-rata/p95, tingkat kesalahan
  • get_database_server_metrics — Metrik sisi server dari host DB itu sendiri (CPU, koneksi, rasio buffer hit — bergantung pada sistem DB Anda)

Mendukung PostgreSQL, MySQL, MongoDB, Redis, Aerospike, dan apa pun yang memiliki atribut db_system pada trace OTel — serta database yang ditemukan dari metrik infrastruktur seperti CloudWatch, yang barisnya menampilkan nilai aktivitas, bukan metrik trace.

Prometheus / PromQL

  • prometheus_range_query — Kueri rentang PromQL untuk metrik apa pun
  • prometheus_instant_query — Kueri instan; gunakan fungsi rollup seperti avg_over_time, sum_over_time
  • prometheus_label_values — Nilai label untuk seri tertentu
  • prometheus_labels — Semua label yang tersedia untuk suatu seri

Arahkan ini ke datasource/cluster yang berbeda dari default dengan mengatur LAST9_DATASOURCE, atau per panggilan dengan datasource. Jika datasource tidak disertakan, default akan digunakan; kecocokan hampir unik yang dianggap aman oleh matcher (seperti variasi huruf besar-kecil) akan menggunakan kecocokan terdekatnya. Nama yang memiliki huruf hilang, tambahan, atau tertukar tidak dijamin dapat diselesaikan secara otomatis: bahkan satu kandidat pun mungkin memerlukan konfirmasi jika perubahan tersebut dapat memengaruhi kode wilayah atau lingkungan. Kecocokan yang lebih longgar atau ambigu akan mengembalikan kandidat dan tidak menjalankan kueri (bukan kesalahan); nama yang tidak dikenal akan menghasilkan kesalahan. Blok konten tambahan menyebutkan datasource yang digunakan jika Anda tidak menyebutkan namanya secara persis. get_metric_status, get_service_profile, dan get_apm_service_deviations menyelesaikan datasource dengan cara yang sama.

Log

  • get_logs — Kueri log pipeline JSON lengkap (agregasi, filter, ekstraksi field)
  • get_service_logs — Baris log untuk suatu layanan, dapat difilter berdasarkan tingkat keparahan dan konten isi; diringkas menjadi 20 baris kecuali jika response_mode adalah raw
  • get_log_patterns — Baris log layanan dalam rentang waktu yang dikelompokkan ke dalam templat pesan, dengan jumlah, waktu pertama/terakhir terlihat, campuran tingkat keparahan, dan sampel
  • get_emerging_log_patterns — Templat log yang baru, meningkat, menurun, atau menghilang dibandingkan dengan jendela baseline, beserta jumlah dari keduanya
  • get_log_attributes — Katalog global atribut dalam skema log untuk rentang waktu tertentu
  • get_log_attributes_for_pipeline — Field log yang benar-benar ada untuk pipeline yang sedang berjalan (penemuan dengan cakupan terbatas), masing-masing dengan filter_field persisnya
  • get_drop_rules — Aturan pembuangan log dari Last9 Control Plane
  • add_drop_rule — Buat aturan pembuangan baru untuk mengurangi volume log di sumbernya
  • get_remapping_rules — Aturan pemetaan ulang (logs_extract, logs_map, traces_map) dari Last9 Control Plane
  • add_remapping_rule — Buat aturan pemetaan ulang yang mengekstrak atau memetakan atribut log dan trace saat ingest

Trace

  • get_traces — Kueri trace pipeline JSON untuk pencarian dan agregasi yang luas
  • get_service_traces — Trace berdasarkan ID trace atau nama layanan yang persis. Gunakan ini jika Anda memiliki ID trace — lebih cepat
  • get_trace_attributes — Katalog global atribut dalam skema trace
  • get_trace_attributes_for_pipeline — Atribut yang benar-benar ada untuk pipeline yang sedang berjalan (penemuan dengan cakupan terbatas), masing-masing dengan filter_field persisnya
  • get_trace_attribute_values — Nilai unik untuk atribut trace, secara opsional dibatasi ke pipeline tertentu
  • get_trace_attribute_deviations — Mengurutkan nilai atribut yang berbeda di antara dua kohor span berbatas (lambat vs cepat, error vs tanpa error, atau dua jendela waktu). Korelasi, bukan sebab-akibat
  • get_trace_waterfall — Satu trace persis sebagai waterfall induk/anak dengan waktu mandiri gabungan interval, span paling lambat, dan peringatan grafik

Peristiwa Perubahan & Peringatan

  • get_change_events — Deployment, perubahan konfigurasi, rollback. Korelasikan insiden dengan perubahan yang terjadi
  • analyze_change_impact — Apakah suatu perubahan menyebabkan masalah? Membandingkan layanan dan pemanggil langsungnya sebelum dan sesudah perubahan: sinyal utama, penyimpangan APM dan atribut trace, peringatan baru yang aktif, serta keputusan (regression likely / no significant change / insufficient data)
  • get_alert_groups — Grup peringatan Compass yang dikonfigurasi dengan label metadata, tim, tier, dan jumlah aturan — termasuk grup tanpa aturan dan grup yang tidak sedang aktif
  • get_alert_operations_summary — Kesehatan on-call selama suatu rentang waktu: peringatan yang dibuat vs diakui, backlog, pengiriman, dan dengan include_rules, aturan paling berisik, flapping, dan tidak dirutekan. Setiap jumlah menyertakan status-nya (available / partial / unavailable)
  • get_alert_coverage — Hal-hal yang tidak Anda pantau dengan peringatan: sinyal utama yang tidak tercakup, grup peringatan yang sepenuhnya dinonaktifkan atau tidak dirutekan, dan aturan yang dibisukan terlalu lama, masing-masing dengan alat perbaikan yang disarankan. Hanya baca.
  • get_alert_config — Konfigurasi aturan peringatan — dapat dicari berdasarkan nama, tingkat keparahan, jenis, tag
  • get_entity_kpis — Setiap KPI (id, nama, PromQL, unit) pada satu grup peringatan, termasuk KPI yang belum digunakan oleh aturan mana pun — id tersebut diperlukan oleh create_alert dan validate_alert_expression
  • create_kpi — Buat KPI (PromQL + unit) pada grup peringatan jika tidak ada KPI yang sudah ada yang sesuai. Buat sekali dan simpan id yang dikembalikan
  • get_alerts — Peringatan yang sedang aktif dalam rentang waktu tertentu
  • get_alert_rule_state — Status aktif historis (1/0) per aturan peringatan selama rentang waktu, dikelompokkan berdasarkan rule_id. Dapat difilter berdasarkan grup peringatan, nama aturan, filter label, dan status.
  • get_alert_hygiene — Aturan peringatan yang berisik, flapping, usang, dan tidak dirutekan selama 7 atau 30 hari, diurutkan, masing-masing dengan angka yang mendasari keputusan dan perbaikan yang disarankan. Hanya baca.
  • get_notification_channels — Kanal notifikasi yang dikonfigurasi (Slack, PagerDuty, email, dll.). scope=channels mencantumkan kanal itu sendiri (id untuk dilampirkan); default attached mencantumkan lampiran per grup peringatan
  • recommend_alert_config — Panduan desain hanya-baca (siklus hidup, gerbang validasi, konteks penanggap) sebelum membuat aturan peringatan
  • validate_alert_expression — Jalankan ekspresi peringatan dalam mode uji terhadap KPI grup peringatan tanpa menyimpan apa pun
  • describe_alert_chart — Hanya baca: sinyal yang dapat diberi peringatan (key, unit) pada bagan Discover (discover-service, discover-exceptions)
  • create_alert — Buat aturan peringatan (statis, atau adaptif melalui adaptive_std_cmp) dalam grup peringatan yang sudah ada; selalu dibuat dalam keadaan nonaktif sebagai draf. Buat sekali; sempurnakan dengan update_alert / patch_alert
  • create_alert_from_chart — Buat aturan peringatan ambang statis dari bagan Discover dalam satu panggilan. Seperti create_alert, aturan dibuat dalam keadaan nonaktif sebagai draf
  • update_alert — Penggantian penuh konfigurasi evaluasi aturan (dapat mengembalikan ID aturan pengganti)
  • patch_alert — Perubahan sebagian pada aturan: aktifkan/jeda, mute_until, penanggap properties, mingguan recurring_mute_schedule (atau clear_recurring_mute_schedule)
  • delete_alert — Hapus aturan peringatan secara permanen
  • mute_alert_group — Bisukan (atau aktifkan kembali) setiap aturan dalam grup peringatan hingga tenggat waktu
  • acknowledge_alert — Ambil alih peringatan yang sedang aktif, atau lepaskan
  • reassign_alert — Serahkan peringatan yang sudah diakui kepada pengguna lain
  • create_notification_channel — Buat kanal Slack, PagerDuty, Opsgenie, email, atau webhook generik
  • attach_notification_channel — Rutekan kanal yang sudah ada ke grup peringatan untuk breach, threat, atau keduanya
  • detach_notification_channel — Hapus satu lampiran kanal-ke-grup-peringatan
  • delete_notification_channel — Hapus secara permanen kanal yang tidak memiliki lampiran

Alat penulisan peringatan (create_kpi, create_alert, update_alert, patch_alert, delete_alert, create_alert_from_chart, mute_alert_group, acknowledge_alert, reassign_alert, create_notification_channel, attach_notification_channel, detach_notification_channel, delete_notification_channel) memerlukan token dengan cakupan write; delete_alert, detach_notification_channel dan delete_notification_channel memerlukan cakupan delete. Alat-alat tersebut hanya tersedia dalam toolset alerts.

Aturan, kanal, dan lampiran yang dibuat oleh alat-alat ini ditandai sebagai created_via: last9-mcp bersama nama dan versi klien MCP (pada aturan, anotasi _l9_created_via_ dan _l9_created_via_client_, yang dipertahankan oleh patch_alert dan update_alert dan tidak dapat diatur oleh pemanggil). get_entity_alert_rules dan get_notification_channels menampilkan penanda tersebut, dan delete_alert, detach_notification_channel serta delete_notification_channel memberi tahu agen agar hanya membersihkan sumber daya yang ditandai, kecuali jika pengguna menyebutkan sumber daya tertentu.

Dasbor Kustom

  • list_dashboards — Dasbor kustom yang difilter berdasarkan nama dan dipaginasi hingga di bawah 32 KB: ID, nama, waktu pembaruan terakhir, pembuat, dan status kunci
  • get_dashboard — Definisi dasbor lengkap berdasarkan ID, termasuk panel dan kueri
  • preview_dashboard — Pratinjau hanya-baca untuk dasbor atau patch yang belum disimpan: kueri yang telah diselesaikan, hasil terbatas per panel, dan perbedaan panel bersih; tidak pernah menyimpan
  • validate_dashboard — Lint + eksekusi + klasifikasi hanya-baca untuk id dasbor tersimpan atau dashboard_definition inline dalam jendela ≤24 jam. Tidak pernah membuat atau memperbarui dasbor
  • create_dashboard — Buat dasbor kustom baru sekali (panel, kueri, metadata). Setelah id dikembalikan, edit panel dengan patch_dashboard.
  • update_dashboard — Susun ulang sebagian besar dasbor yang sudah ada berdasarkan ID (penggantian penuh; dasbor sistem hanya-baca akan menghasilkan kesalahan). Untuk mengedit panel satu per satu, gunakan patch_dashboard
  • patch_dashboard — Edit dasbor yang sudah ada secara terarah berdasarkan ID (tambah/perbarui/hapus/pindahkan panel, atur judul, atur variabel); mengembalikan perbedaan ringkas, bukan dasbor lengkap
  • delete_dashboard — Hapus dasbor kustom berdasarkan ID
  • set_dashboard_lock — Kunci atau buka kunci dasbor kustom berdasarkan ID (hanya pembuat atau admin organisasi); dasbor yang terkunci menolak pembaruan, patch, dan penghapusan
  • list_dashboard_snapshots — Snapshot titik waktu yang dibekukan untuk dasbor (hanya metadata)
  • get_dashboard_snapshot — Snapshot beku lengkap termasuk data panel untuk RCA / tampilan yang dapat dibagikan
  • delete_dashboard_snapshot — Hapus snapshot beku berdasarkan ID

Pembuatan dasbor tersedia melalui MCP prompts/list dan prompts/get, tanpa perlu memasang skill. Ketiga prompt tidak memerlukan argumen:

  • create_dashboard_guide — Penemuan, tata letak, dan pemilihan panel; validasi seluruh kandidat dan jalankan kueri setiap panel sebelum persetujuan, buat sekali, terapkan patch untuk edit terarah, lalu baca kembali.
  • dashboard_examples — Contoh lengkap yang mencakup RED layanan, latensi endpoint, kelas status, kesehatan host, jumlah log, dan panel trace, dengan variabel dependen.
  • query_guide — Semantik counter/gauge/histogram dan metrik trace turunan, instan vs rentang, jendela rate, batas persentase, serta aturan logjson/tracejson.

Konten yang sama dapat dibaca di last9://reference/create_dashboard_guide, last9://reference/dashboard_examples, dan last9://reference/query_guide. Prompt dan resource tetap dapat ditemukan di setiap toolset; untuk menjalankan alur kerja diperlukan alat yang relevan (untuk pembuatan konten dengan sinyal campuran, gunakan --toolsets=dashboards,investigate, yang juga berfungsi sebagai list_datasources). Sesi hanya-baca dapat menyiapkan dan memvalidasi, tetapi tidak dapat menyimpan. Periksa ketersediaan alat sebelum mengikuti langkah-langkahnya.

Pemeriksaan panel saat ini menggunakan prometheus_range_query, prometheus_instant_query, get_logs dan get_traces bersama validate_dashboard. Jenis kueri yang tidak didukung validator dan default yang disederhanakan tidak menjamin kesetaraan rendering. Langkah pemeriksaan kueri terpisah akan beralih ke query_panel setelah #475 dirilis.

Profiling Berkelanjutan

Memerlukan profiling berkelanjutan yang diaktifkan untuk organisasi. Temukan layanan terlebih dahulu dengan get_profile_services, lalu ambil flamegraph atau fungsi yang diurutkan.

  • get_profile_services — Layanan yang memiliki data profiling dalam rentang waktu tersebut (indeks sebelum kueri)
  • get_flamegraph — Pohon flamegraph bertingkat untuk satu layanan (cpu default; juga alloc, wall)
  • get_top_functions — Peringkat sampel mandiri fungsi terpanas untuk satu layanan
  • get_profile_summary — Triage singkat dalam bahasa alami untuk profil satu layanan

Dasbor Grafana

Alat hanya-baca untuk instance Grafana organisasi (melalui proksi Grafana Last9). Kolom kredensial tidak pernah dikembalikan ke model. Aktifkan dengan LAST9_TOOLSETS=grafana (atau biarkan toolset tidak disetel untuk semua alat).

  • grafana_search_dashboards — Cari dasbor berdasarkan substring judul (berhalaman; truncated: true saat batas tercapai)
  • grafana_get_dashboard — Ringkasan dasbor berdasarkan uid (panel, variabel, target PromQL); full_json=true untuk JSON Grafana mentah
  • grafana_list_folders — Pohon folder
  • grafana_list_folder_dashboards — Dasbor dalam satu folder (berhalaman)
  • grafana_list_datasources — Inventaris sumber data tanpa kredensial

Resolusi Nama Fuzzy

  • did_you_mean — Saat agen tidak yakin dengan nama entitas, alat ini mengembalikan kecocokan terdekat dari katalog Anda (layanan, lingkungan, host, basis data, deployment/namespace K8s, job). Hingga 3 saran dengan skor kemiripan. Server memanggil alat ini secara otomatis sebelum sebagian besar alat ketika pencarian nama tidak menghasilkan apa pun.

Profil Layanan

  • get_service_profile — Gambaran telemetri layanan yang sebenarnya sebelum Anda membuat kueri: sinyal yang tersedia, bahasa dan runtime, lingkungan deployment, bentuk log, serta perbaikan ingest yang disarankan jika berlaku. Memungkinkan agen melewati alat trace saat layanan tidak memiliki trace, dan mengurai tingkat keparahan dari isi log ketika SeverityText kosong, alih-alih memfilternya dan tidak menemukan apa pun.

Cara Kerjanya

Tautan langsung di setiap respons. Setiap alat mengembalikan kolom deep_link — URL langsung ke dasbor Last9 untuk kueri dan rentang waktu tersebut. Agen dapat memberikan tautannya kepada Anda; Anda mengekliknya; lalu Anda langsung berada di sana.

Toolset. Secara default, server menyediakan semua alat. Host otomatisasi yang hanya memerlukan investigasi (log/trace/metrik/profil) dapat menyetel LAST9_TOOLSETS=investigate (atau meneruskan --toolsets=investigate) agar tools/list tetap ringkas tanpa perlu menonaktifkan banyak alat di sisi klien. Paket bernama: logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all. Nama yang tidak dikenal akan langsung menyebabkan kegagalan. get_current_time dan get_workspace_overview tersedia di setiap toolset. Dalam mode HTTP, permintaan dapat mempersempitnya lebih lanjut dengan header X-Last9-Toolsets (lihat Toolset per permintaan). Paket alerts juga menyediakan prometheus_range_query dan get_dashboard yang hanya-baca, yang dipanggil oleh prompt author-alert. Paket metrics saja tidak mencakup list_datasources atau did_you_mean — gunakan investigate (atau gabungkan toolset) jika Anda memerlukan alat bantu penemuan tersebut.

Sumber referensi alat. Panduan panjang logjson/tracejson/service-logs/metrics adalah sumber daya MCP (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics, last9://reference/investigation, last9://reference/alerting), bukan teks deskripsi alat yang selalu disertakan. Panduan pemberitahuan mencakup tata bahasa ekspresi pemberitahuan, kolom statis vs adaptif, satuan, hal yang diperiksa oleh validate_alert_expression, serta templat aturan latensi / tingkat kesalahan / saturasi. Aturan kueri penting tetap ada dalam deskripsi alat agar agen yang tidak pernah memanggil resources/read tetap mendapatkan panduan penyusunan kueri yang benar. Temukan kolom khusus organisasi dengan get_log_attributes / get_log_attributes_for_pipeline (dan padanannya untuk trace)—kolom tersebut tidak disisipkan ke dalam deskripsi.

Hasil besar yang dipecah menjadi beberapa bagian. get_logs dan get_traces menangani kumpulan hasil besar dengan membaginya menjadi beberapa bagian, bukan memotongnya. Batas default adalah 5000 entri untuk log; dapat dikonfigurasi melalui LAST9_MAX_GET_LOGS_ENTRIES.


Pengembangan

Mode HTTP, pengujian curl, membangun dari sumber

Jalankan dalam Mode HTTP

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

Server dimulai di http://localhost:8080/mcp.

Uji dengan curl

Handler Streamable HTTP berjalan dalam mode stateless, sehingga setiap permintaan dilayani secara terpisah. Handshake initialize dan header Mcp-Session-Id bersifat opsional — klien yang mengirimkannya tetap berfungsi (header diterima dan diabaikan), dan klien juga dapat langsung menjalankan tools/list / tools/call. Setiap alat merupakan kueri permintaan/respons yang independen; server tidak mengirim notifikasi server→klien, sehingga GET /mcp (aliran SSE) mengembalikan 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
        }
      }
    }'

Toolset per permintaan

Dalam mode HTTP, permintaan dapat mempersempit cakupan alatnya dengan header X-Last9-Toolsets, atau parameter kueri toolsets untuk klien yang tidak dapat menyetel header (/mcp?toolsets=logs,traces). Jika keduanya dikirim, header yang tidak kosong akan diutamakan. Nilainya menggunakan nama yang sama, dipisahkan koma, seperti --toolsets. Permintaan hanya mendapatkan irisan dengan --toolsets saat startup: cakupannya dapat dipersempit, tetapi tidak diperluas, dan all atau nilai kosong akan mempertahankan set startup. Nama yang tidak dikenal akan menghasilkan 400 yang menyebutkan nama tersebut. tools/list, tools/call, dan instruksi initialize semuanya mengikuti set efektif; get_current_time dan get_workspace_overview tetap tersedia di setiap set.

curl -s -X POST http://localhost:8080/mcp \
    -H "Content-Type: application/json" \
    -H "Accept: application/json, text/event-stream" \
    -H "X-Last9-Toolsets: logs,alerts" \
    -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}'

Setiap set efektif yang berbeda dilayani oleh servernya sendiri, yang dibuat pada permintaan pertamanya (puluhan milidetik) dan dipertahankan hingga shutdown; permintaan yang menyatakan ulang set startup akan menggunakan kembali server startup. Tidak ada penghapusan dari cache: hanya toolset bernama yang diterima, sehingga cache menampung paling banyak satu server untuk setiap kombinasi toolset tersebut (saat ini 135, sekitar 75 MB heap aktif secara keseluruhan; cache penuh stabil di sekitar 230 MB memori residen dalam pengujian).

Bangun dari Sumber

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 ditujukan untuk pengembangan lokal. Untuk penggunaan sebenarnya, endpoint HTTP ter-host lebih mudah.


Referensi Alat

Semua parameter, standar input waktu, dan detail

Input Waktu

  • Waktu absolut (start_time_iso/end_time_iso, atau time_iso) lebih diutamakan daripada lookback_minutes.
  • Untuk rentang relatif: gunakan lookback_minutes.
  • Untuk rentang absolut: gunakan RFC3339/ISO8601 — 2026-02-09T15:04:05Z.
  • YYYY-MM-DD HH:MM:SS lama diterima hanya untuk kompatibilitas.
  • Ubah frasa seperti since yesterday 9am IST menjadi batas RFC3339 dengan get_current_time.

get_workspace_overview

Tanpa parameter. Memeriksa 60 menit terakhir secara bersamaan, setiap subpanggilan dengan batas waktu singkat, dan mengembalikan current_time, lookback_minutes, environments, telemetry (boolean logs/traces/metrics), service_count (peringkat get_service_summary layanan unik, setiap lingkungan), alert_group_count, firing_alert_count, dan errors ([{field, error}]). Kolom yang subpanggilannya gagal bernilai null (tidak diketahui), bukan 0 atau false. Pemeriksaan ini tidak dipersempit oleh --toolsets: toolset memfilter alat yang disediakan, sedangkan token API menentukan data yang dapat dibaca server.

get_current_time

  • range (string, opsional): last 2h, past 30 minutes, last 7d (s, m, h, d = 24h, w = 7d; maksimum 366d); today; yesterday; since <point>; <point> to <point>. Titik waktu menggunakan RFC3339, atau today / yesterday / hari dalam seminggu (monday, mon: kemunculan terbarunya, termasuk hari ini) / YYYY-MM-DD dengan 9am, 9:30pm, atau 14:30 opsional. Zona di akhir menggantikan timezone untuk kedua batas; zona di tempat lain akan menyebabkan kesalahan. Kosongkan untuk hanya mendapatkan now.
  • timezone (string, opsional): Nama atau singkatan IANA (IST = Asia/Kolkata, PST/PDT, EST/EDT, UTC, GMT). Default UTC. Zona yang tidak dikenal akan menyebabkan kesalahan, begitu pula CST yang ambigu (gunakan America/Chicago atau Asia/Shanghai).

Mengembalikan now (serta start/end dengan range) sebagai {iso, epoch_seconds, local}; local hanya muncul untuk zona non-UTC.

get_exceptions

  • limit (integer, opsional): Jumlah maksimum pengecualian. Default: 20.
  • lookback_minutes (integer, opsional): Default: 60.
  • start_time_iso / end_time_iso (string, opsional): Rentang waktu absolut.
  • service_name (string, opsional): Filter berdasarkan layanan.
  • span_name (string, opsional): Filter berdasarkan nama span.
  • env (string, opsional): Filter berdasarkan lingkungan.

get_service_summary

  • start_time_iso / end_time_iso (string, opsional)
  • env (string, opsional): Regex PromQL. Default-nya .*. Kecocokan persis memerlukan jangkar (misalnya ^prod$).
  • sort_by (string, opsional): request_count (default), throughput_rpm, http_4xx_count, http_5xx_count, atau grpc_error_count.
  • limit (integer, opsional): Jumlah maksimum baris berperingkat. Kosongkan atau isi 0 untuk menggunakan 10; nilai di atas 100 dibatasi menjadi 100.

get_service_environments

  • start_time_iso / end_time_iso (string, opsional)

Semua alat APM lainnya memerlukan nilai env. Gunakan "" jika hasil ini kosong.

get_service_performance_details

Secara default, mengembalikan ringkasan per seri: points, missing_points (bucket ketersediaan tanpa trafik, dikecualikan dari statistik), min, p50, p90, p99 (peringkat terdekat), max, mean, last, baseline_mean (rata-rata dari separuh pertama titik valid, bukan dari rentang waktu), delta_pct (separuh kedua titik valid dibandingkan dengan baseline; tidak ada jika baseline 0), dan hingga 3 change_points (timestamp, before_mean, after_mean), untuk maksimal 4 seri per metrik dan setiap kuantil waktu respons (rata-rata tertinggi lebih dahulu; series_omitted menghitung sisanya). Seri dengan points: 0 tidak memiliki statistik, dan baseline_mean/delta_pct memerlukan setidaknya 6 titik (3 per separuh). full_series menandakan bahwa titik mentah tersedia melalui include_series.

  • service_name (string, wajib)
  • lookback_minutes (integer, opsional): Default: 60.
  • start_time_iso / end_time_iso (string, opsional)
  • env (string, opsional): Default-nya prod.
  • top_n (integer, opsional): Jumlah maksimum entri per daftar operasi teratas/kesalahan teratas. Default: 5, atau 10 dengan include_series=true. Maksimum 100.
  • include_series (boolean, opsional): Kembalikan setiap titik dari setiap seri, bukan ringkasannya. Default: false.

get_service_operations_summary

  • service_name (string, wajib)
  • lookback_minutes (integer, opsional): Default: 60.
  • start_time_iso / end_time_iso (string, opsional)
  • env (string, opsional): Default-nya prod.

get_service_dependency_graph

  • service_name (string, opsional)
  • lookback_minutes (integer, opsional): Default: 60.
  • start_time_iso / end_time_iso (string, opsional)
  • env (string, opsional): Default-nya prod.

get_apm_service_deviations

  • service_name (string, opsional): Kosongkan untuk cakupan seluruh fleet; isi untuk satu layanan dan korelasi operasinya.
  • lookback_minutes (integer, opsional): Jendela saat ini. Default: 60.
  • start_time_iso / end_time_iso (string, opsional): Jendela saat ini yang ditentukan secara eksplisit.
  • baseline_start_time_iso / baseline_end_time_iso (string, opsional): Baseline yang ditentukan secara eksplisit. Default-nya adalah jendela berdurasi sama yang tepat mendahului jendela saat ini.
  • datasource (string, opsional): Kosongkan untuk menggunakan default; nama perkiraan dicocokkan seperti pada alat Prometheus. Respons menyebutkan default atau kecocokan terdekat yang digunakan; nama ambigu mengembalikan kandidat tanpa melakukan kueri.
  • env (string, opsional): Default-nya adalah prod.
  • max_services / max_operations (integer, opsional): Default 10, maksimum 10 masing-masing.

get_databases

  • env (string, opsional): Filter berdasarkan lingkungan. Menerima ekspresi reguler. Default: semua.
  • lookback_minutes (integer, opsional): Default: 60. Jendela tidak boleh melebihi 7 hari.
  • start_time_iso / end_time_iso (string, opsional)

get_database_slow_queries

  • db_system (string, opsional): misalnya postgresql, mysql, mongodb, redis.
  • host (string, opsional): Host database (net_peer_name).
  • service_name (string, opsional): Nama layanan pemanggil.
  • env (string, opsional)
  • min_duration_ms (float, opsional): Durasi kueri minimum dalam ms.
  • lookback_minutes (integer, opsional): Default: 60.
  • start_time_iso / end_time_iso (string, opsional)
  • limit (integer, opsional): Default: 20.

get_database_queries

  • db_system (string, opsional)
  • host (string, opsional)
  • service_name (string, opsional)
  • env (string, opsional)
  • lookback_minutes (integer, opsional): Default: 60.
  • start_time_iso / end_time_iso (string, opsional)
  • limit (integer, opsional): Default: 20.

get_database_server_metrics

  • db_system (string, wajib): misalnya postgresql, mysql, mongodb, redis, aerospike.
  • host (string, opsional)
  • lookback_minutes (integer, opsional): Default: 60.
  • start_time_iso / end_time_iso (string, opsional)

prometheus_range_query

  • query (string, wajib): Kueri PromQL.
  • start_time_iso / end_time_iso (string, opsional): Default-nya adalah 60 menit terakhir.
  • lookback_minutes (float, opsional): Default: 60.

prometheus_instant_query

  • query (string, wajib)
  • time_iso (string, opsional): Default-nya adalah sekarang.
  • lookback_minutes (float, opsional)

prometheus_label_values

  • match_query (string, opsional): Filter PromQL.
  • label (string, wajib): Nama label.
  • lookback_minutes (float, opsional): Default: 60.
  • start_time_iso / end_time_iso (string, opsional)

Jika tidak ada jendela yang diberikan dan match_query menyebutkan satu metrik (metric{...} atau {__name__="metric"}), hasil kosong selama 60 menit akan dicoba ulang sekali untuk rentang 4 hari; blok teks kedua menyebutkan rentang waktu yang dicakup hasil tersebut.

prometheus_labels

  • match_query (string, opsional): Filter PromQL.
  • lookback_minutes (float, opsional): Default: 60.
  • start_time_iso / end_time_iso (string, opsional)

Mencoba ulang pencarian satu metrik yang kosong untuk rentang 4 hari, seperti prometheus_label_values.

get_logs

  • logjson_query (array, wajib): Kueri pipeline JSON.
  • lookback_minutes (integer, opsional): Default: 5.
  • start_time_iso / end_time_iso (string, opsional)
  • limit (integer, opsional): Default server: 5000.
  • index (string, opsional): physical_index:<name> atau rehydration_index:<block_name>.
  • response_mode (string, opsional): summary (default; juga untuk null) atau raw. Hasil baris mentah yang melebihi 20 baris dikembalikan sebagai summary: lines_summarized, severity_counts (enam label teratas, sisanya di other_severities), first_timestamp/last_timestamp, histogram dengan 10 bucket sepanjang jendela kueri (berdasarkan baris yang dikembalikan, dengan truncated: true jika batas memotong hasil), dan patterns teratas (template, count, hingga dua samples) dengan sisanya dijumlahkan dalam other, maksimal 4000 karakter; metadata tingkat teratas yang tetap tidak muat akan dihilangkan dan disebutkan dalam dropped_fields. raw mengembalikan baris. Hasil agregat tidak pernah diringkas.

Untuk inventaris layanan berbasis log, kueri physical_index_service_count terlebih dahulu:

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

Gunakan service_name sebagai ServiceName, env sebagai lingkungan jika tersedia, dan name sebagai nama indeks fisik. Jika name="default", hilangkan index; untuk indeks fisik non-default yang dipilih pengguna, teruskan index: "physical_index:<name>". Jika backend menolak pemfilteran indeks fisik secara eksplisit, coba lagi tanpa index dan laporkan bahwa pemfilteran indeks fisik secara eksplisit tidak tersedia untuk backend tersebut.

get_service_logs

  • service_name (string, wajib)
  • lookback_minutes (integer, opsional): Default: 60.
  • limit (integer, opsional): Default: 100, atau 20 dengan response_mode: "raw".
  • env (string, opsional)
  • severity_filters (array, opsional): misalnya ["error", "warn"]. Logika OR.
  • body_filters (array, opsional): misalnya ["timeout", "failed"]. Logika OR.
  • start_time_iso / end_time_iso (string, opsional)
  • index (string, opsional)
  • response_mode (string, opsional): summary (default; juga untuk null) atau raw. Jika lebih dari 20 baris, logs diganti dengan summary yang sama seperti pada get_logs, sementara kolom lainnya tetap dipertahankan; raw mengembalikan entri.

Beberapa jenis filter digabungkan dengan AND. Setiap array menggunakan OR secara internal. Gunakan get_logs terlebih dahulu untuk jumlah agregat yang luas; gunakan get_service_logs hanya setelah mempersempit ke layanan/lingkungan/indeks dan sekumpulan kecil sampel.

get_log_patterns

  • service_name (string, wajib)
  • env (string, opsional)
  • start_time_iso / end_time_iso (string, opsional)
  • lookback_minutes (integer, opsional): Default: 60.
  • severity_filters / body_filters (array, opsional): Logika OR, seperti pada get_service_logs. Atur severity_filters hanya jika get_service_profile melaporkan severity_set all; dengan none atau partial, parameter ini menghilangkan baris yang tingkat keparahannya tercantum di dalam body.
  • index (string, opsional)
  • sample_size (integer, opsional): Baris yang diambil sampelnya dari jendela, dimulai dari yang terbaru. Default: 1000, maksimum: 5000.
  • top_n (integer, opsional): Templat yang dikembalikan berdasarkan jumlah. Default: 20, maksimum: 100. Sisanya dijumlahkan dalam other.

Pengelompokan dijalankan di server MCP atas baris sampel, sehingga jumlah, first_seen, dan last_seen berlaku dalam sampel; window.sample_limit_reached menunjukkan kapan sampel mungkin tidak mencakup baris yang cocok (sampel berisi sample_size baris dan API tidak melaporkan total_matching_lines yang persis sama dengan jumlah tersebut, atau pencarian dilakukan dengan logs_truncated), sehingga sampel hanya berisi baris terbaru dalam jendela. Setiap template dan sample dipotong hingga 500 karakter dan diakhiri dengan …, sehingga body yang tidak dapat dikelompokkan (seperti JSON tanpa kolom message) tidak dapat memenuhi respons. Pencarian dengan chunk yang gagal akan menghasilkan kesalahan alat; pencarian yang terpotong atau dibatasi tetap mengembalikan pola, dengan penanda sample_limit_reached. Daftar patterns yang kosong berarti tidak ada yang cocok hanya jika sample_limit_reached bernilai false; jika bernilai true, pencarian berhenti lebih awal dan mungkin melewatkan baris yang cocok.

get_emerging_log_patterns

Menerima semua parameter get_log_patterns (rentang waktu adalah jendela saat ini), ditambah:

  • baseline_start_time_iso / baseline_end_time_iso (string, opsional): Isi keduanya atau kosongkan keduanya. Default-nya adalah jendela berdurasi sama yang tepat mendahului jendela saat ini.
  • min_count (integer, opsional): Jumlah baris yang harus dimiliki pola yang berubah pada jendela tempat jumlahnya lebih besar: saat ini untuk new/increased, baseline untuk decreased/disappeared. Default: 3 (atau sample_size jika lebih kecil), maksimum: sample_size.
  • change_factor (number, opsional): Rasio frekuensi, lebih besar dari 1, yang harus dicapai pola yang muncul di kedua jendela (increased) atau diturunkan hingga kebalikannya (decreased). Default: 2.

Kedua ambang harus terpenuhi, sehingga templat bervolume tinggi yang frekuensinya tidak berubah sebesar change_factor tidak akan pernah dilaporkan. Hanya templat yang berubah yang dikembalikan (new, increased, decreased, disappeared) beserta jumlah current dan baseline; unchanged_patterns menghitung templat yang muncul di kedua jendela dan berubah kurang dari change_factor, sedangkan below_min_count_patterns menghitung perubahan yang dihilangkan karena jumlah barisnya kurang dari min_count. Frekuensi dibandingkan per menit saat kedua sampel memuat semua baris yang cocok, per menit yang diperkirakan dari total_matching_lines sampel yang dibatasi, dan jika tidak, sebagai proporsi sampel; increased/decreased menggambarkan komposisi, bukan laju (comparison_basis). Daftar patterns yang kosong berarti tidak ada perubahan yang melampaui kedua ambang, bukan berarti log tidak berubah: perubahan yang lebih jarang dihitung dalam below_min_count_patterns, dan jendela dengan sample_limit_reached membandingkan sampel, bukan keseluruhan jendela.

get_log_attributes

  • lookback_minutes (integer, opsional): Default: 15.
  • start_time_iso / end_time_iso (string, opsional)
  • region (string, opsional)
  • index (string, opsional)

get_log_attributes_for_pipeline

  • pipeline (array, wajib): Tahap filter sebelumnya untuk membatasi penemuan, misalnya [{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].
  • lookback_minutes (integer, opsional): Default: 15.
  • start_time_iso / end_time_iso (string, opsional)
  • region (string, opsional)
  • index (string, opsional)

get_drop_rules

Tanpa parameter. Mencantumkan aturan drop melalui GET /otel_settings/drop?region=....

add_drop_rule

  • name (string, wajib)
  • filters (array, wajib): Setiap filter: key, value, operator (equals/not_equals), conjunction (and).
  • Kunci filter harus menggunakan attributes["key_name"] atau resource.attributes["key_name"] (diwajibkan oleh API Last9).
  • Membuat aturan melalui POST /otel_settings/drop?region=...&cluster_id=....

get_remapping_rules

  • rule_type (string, wajib): logs_extract, logs_map atau traces_map.
  • region (string, opsional): Default: region datasource yang dikonfigurasi.
  • Mencantumkan aturan melalui GET /otel_settings/remapping/{rule_type}?region=....

add_remapping_rule

Membuat satu aturan per pemanggilan; aturan pemetaan memerlukan satu pemanggilan untuk setiap target_attribute.

  • rule_type (string, wajib): logs_extract, logs_map atau traces_map.
  • name (string, wajib)
  • remap_keys (array, wajib): Kolom sumber. logs_extract dengan json: nama kolom body; dengan pattern: tepat satu regex dengan grup tangkapan bernama. Aturan pemetaan: jalur atribut, nilai pertama yang tidak kosong akan digunakan.
  • target_attribute (string, wajib): logs_extract: log_attributes atau resource_attributes. logs_map: service, severity atau resource_deployment.environment. traces_map: service.
  • extract_type (string, hanya logs_extract, wajib di sana): json atau pattern.
  • action (string, hanya logs_extract): upsert (default) atau insert.
  • prefix (string, hanya logs_extract)
  • preconditions (array, hanya logs_extract): Maksimal satu {key, value, operator}; operator adalah equals (default), not_equals atau like (regex).
  • region (string, opsional): Default: region datasource yang dikonfigurasi.
  • Membuat aturan melalui POST /otel_settings/remapping/{rule_type}?region=.... Tidak pernah dicoba ulang; setelah timeout, periksa dengan get_remapping_rules.

get_traces

Gunakan untuk pencarian luas dan agregasi. Untuk pencarian ID trace yang tepat, gunakan get_service_traces.

  • tracejson_query (array, wajib)
  • start_time_iso / end_time_iso (string, opsional)
  • lookback_minutes (integer, opsional): Default: 60.
  • limit (integer, opsional): Default: 5000.

get_service_traces

Tepat salah satu dari trace_id atau service_name wajib diisi.

  • trace_id (string, opsional): Rentang waktu default: 72 jam.
  • service_name (string, opsional): Rentang waktu default: 60 menit.
  • lookback_minutes (integer, opsional)
  • start_time_iso / end_time_iso (string, opsional)
  • limit (integer, opsional): Default: 10.
  • env (string, opsional)

get_trace_attributes

  • lookback_minutes (integer, opsional): Default: 15.
  • start_time_iso / end_time_iso (string, opsional)
  • region (string, opsional)

get_trace_attributes_for_pipeline

  • pipeline (array, wajib): Tahap filter sebelumnya untuk membatasi penemuan, misalnya [{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].
  • lookback_minutes (integer, opsional): Default: 15.
  • start_time_iso / end_time_iso (string, opsional)
  • region (string, opsional)

get_trace_attribute_values

  • tag_name (string, wajib): Nama atribut dari get_trace_attributes (misalnya resource_department atau attributes['http.method']).
  • pipeline (array, opsional): Tahap filter sebelumnya untuk membatasi nilai; hilangkan untuk nilai global.
  • lookback_minutes (integer, opsional): Default: 15.
  • start_time_iso / end_time_iso (string, opsional): Batas historis RFC3339; diprioritaskan daripada lookback_minutes.
  • region (string, opsional)

get_trace_attribute_deviations

  • comparison_mode (string, wajib): latency, errors, atau time.
  • service_name (string, wajib)
  • environment (string, wajib): Nilai deployment.environment yang tepat.
  • operation (string, opsional)
  • filters (array, opsional): Kondisi filter JSON trace.
  • candidate_attributes (array, opsional): Maksimal 8; hilangkan untuk penemuan terbatas.
  • latency_threshold_ms (number, opsional): Wajib untuk mode latency; ditolak untuk mode lain.
  • start_time_iso / end_time_iso (string, opsional)
  • lookback_minutes (integer, opsional): Default: 15. Maksimum: 15.
  • baseline_start_time_iso / baseline_end_time_iso (string, opsional): Wajib untuk mode time; tidak saling tumpang tindih dan durasinya sama dengan jendela target.
  • minimum_cohort_size (integer, opsional): Default: 100. Minimum: 20.
  • minimum_value_support (integer, opsional): Default: 20. Minimum: 10.
  • limit (integer, opsional): Default: 10. Maksimum: 10.

Memerlukan kapabilitas backend pendamping agar diaktifkan.

get_trace_waterfall

  • trace_id (string, wajib)
  • environment (string, opsional)
  • start_time_iso / end_time_iso (string, opsional)
  • lookback_minutes (integer, opsional): Default: 4320 (72 jam).
  • selected_span_id (string, opsional): Mengembalikan atribut, peristiwa, dan tautan hanya untuk span tersebut.
  • max_spans (integer, opsional): Default: 500. Maksimum: 1000; kebijakan redaksi organisasi dapat menetapkan batas yang lebih rendah.

Mengembalikan envelope investigation-evidence/v1 dari layanan trace tanpa perubahan; waterfall berada di bawah data. Layanan membangun waterfall dan menyamarkan nilai berdasarkan kebijakan per organisasi (kredensial, literal kueri, URL, email, IP, pengenal pengguna) sebelum data meninggalkan backend: sanitizer menyebutkan kebijakan yang dijalankan dan evidence.sanitization menghitung data yang disamarkan atau dipotong. Jika ada data yang diperlukan tetapi disamarkan, minta admin organisasi menyesuaikan kebijakan, bukan mencari cara untuk mengakalinya. Tool menolak respons yang tidak memiliki blok sanitizer, memiliki sanitizer.version selain trace-evidence-sanitizer/v1, body yang mengulang kunci JSON, atau body berukuran lebih dari 512 KiB (batas max_spans lebih rendah). Memerlukan kapabilitas backend pendamping agar diaktifkan.

get_change_events

  • start_time_iso / end_time_iso (string, opsional)
  • lookback_minutes (integer, opsional): Default: 60.
  • service_name (string, opsional)
  • env (string, opsional)
  • event_name (string, opsional): Panggil tanpa ini terlebih dahulu untuk mendapatkan available_event_names.

analyze_change_impact

Berikan tepat salah satu dari change_event atau service + timestamp.

  • change_event (object, opsional): Satu elemen dari get_change_events change_events[], tanpa perubahan. Menggunakan metric.service, metric.deployment_environment dan values[].timestamp yang paling awal.
  • service (string, opsional): Wajib bersama timestamp jika change_event tidak diberikan.
  • timestamp (string, opsional): RFC3339 atau detik unix, dibulatkan ke bawah ke menit.
  • env (string, opsional): Lingkungan yang tepat. Default: lingkungan peristiwa, jika tidak ada maka semua.
  • baseline_minutes (integer, opsional): Default: 60. Dibatasi ke 30..120.
  • after_minutes (integer, opsional): Default: baseline_minutes. Dibatasi ke 30..120 dan tidak melebihi waktu saat ini.

regression likely jika salah satu kondisi berikut terpenuhi: tingkat kesalahan naik setidaknya 1 poin persentase, p95 naik setidaknya 40%, atau throughput (rpm) turun setidaknya 50% untuk layanan atau salah satu dari 10 pemanggil teratasnya, yang diurutkan berdasarkan throughput gabungan pada kedua jendela (hanya jika ada setidaknya 100 permintaan sebelum perubahan dan, untuk throughput, setelahnya; p95 hanya menghitung permintaan latency_env); sebuah alert mulai aktif setelah perubahan dan masih aktif pada akhir jendela setelah perubahan (dicocokkan tanpa membedakan huruf besar-kecil berdasarkan nama grup alert atau label service, service_name atau service.name, jika tidak ada maka berdasarkan anotasi (tidak pernah teks bebas seperti ringkasan); dengan env, alert berlabel lingkungan lain, tanpa membedakan huruf besar-kecil, diabaikan dan alert tanpa label ditandai env_match: unlabelled); regresi dari get_apm_service_deviations. insufficient data jika jendela setelah perubahan kurang dari 5 menit (termasuk perubahan di masa mendatang), layanan memiliki terlalu sedikit permintaan, atau sinyal utama, pencarian pemanggil langsung, alert, atau get_apm_service_deviations gagal, seluruhnya atau pada kueri mana pun yang tercantum di deviations.apm.unavailable: bukti yang hilang tidak pernah menghasilkan no significant change, dan regresi yang tetap ditemukan akan menyebutkan apa yang gagal. no significant change adalah jawaban yang valid, bukan kegagalan. Deviasi atribut trace hanya dijalankan jika env ditetapkan, selama maksimal 15 menit di setiap sisi; deviasi tersebut menjelaskan hasil, tetapi tidak pernah menentukannya, sehingga melewatkan atau gagal mengambilnya tidak mengubah hasil. Setiap daftar memuat 10 item dan melaporkan jumlah item yang dihilangkan; panggilan upstream yang gagal hanya menyisakan error pada bagiannya. Latensi sinyal utama berasal dari satu lingkungan pada kedua jendela, yang disebutkan di latency_env: jika tidak ada env, gunakan lingkungan tersibuk. Tingkat kesalahan sinyal utama menghitung kesalahan 5xx dan gRPC; deviations.apm juga menghitung span berstatus kesalahan dan 429. Sinyal pemanggil berasal dari span servernya sendiri, sehingga pemanggil yang hanya memiliki span klien menunjukkan 0 rpm.

regressions mencantumkan satu entri untuk setiap pemicu di balik regression likely, sesuai urutan reason, dan bernilai [] untuk hasil lainnya. Setiap entri memiliki service, role (changed atau dependent), env, metric (tepat satu dari error_rate_pct, latency_p95_ms, throughput_rpm, alert, apm_deviation) dan baseline/after dalam satuan metriknya (%, ms, rpm, atau nilai sinyal APM itu sendiri; null untuk alert). Entri alert menambahkan rule_id dan state, yaitu status instans pada irisan pemantauan alert terbaru di jendela setelah perubahan yang mencantumkannya, selalu firing: alert yang mulai aktif setelah perubahan tetapi sudah pulih pada akhir jendela setelah perubahan bukan regresi, sehingga tidak membuat tiket; alert tersebut tetap berada di alerts.started dengan state-nya, dan reason menghitungnya. env adalah lingkungan tempat metrik diukur: env yang diminta, jika tidak, tingkat kesalahan dan throughput menjumlahkan semua lingkungan (env: "") sementara p95 menggunakan lingkungan tersibuk, latency_env; alert menggunakan label lingkungannya sendiri dan deviasi APM menggunakan lingkungannya sendiri. Setiap regresi berlaku untuk seluruh layanan, jadi tidak ada yang menyebutkan endpoint.

get_alert_groups

Inventaris grup alert Compass yang dikonfigurasi untuk audit changeboard / cakupan label. Mencakup grup tanpa aturan dan grup yang tidak sedang aktif. Tidak mengembalikan PromQL.

  • alert_group_name / alert_group_type / data_source_name (string, opsional): Pencocokan substring tanpa membedakan huruf besar-kecil.
  • team / tier (string, opsional): Pencocokan tepat tanpa membedakan huruf besar-kecil pada metadata yang dikonfigurasi.
  • label_key + label_value (string, opsional): Harus ditetapkan bersama. Pencocokan tepat tanpa membedakan huruf besar-kecil pada satu pasangan metadata.labels — baik kunci maupun nilainya.

Mengembalikan {"count":N,"groups":[...]} JSON ringkas dengan id, name, type, entity_class, team, tier, metadata.labels, dan jumlah aturan. team / labels yang kosong berarti tidak ditetapkan.

get_alert_operations_summary

  • start_time_iso / end_time_iso (string, wajib): Jendela RFC3339, maksimal 31 hari.
  • timezone (string, opsional): Nama IANA untuk batas hari. Default: UTC.
  • severities / services (array, opsional): Mempersempit ringkasan.
  • include_rules (boolean, opsional): Sertakan juga kebersihan per aturan (20 teratas berdasarkan fire_count, aturan yang sering berubah status dan tidak dirutekan, dengan truncated jika API membatasi daftar aturannya). Default: false.

Mengembalikan JSON dengan alerts_raised, acknowledged, unacknowledged, current_backlog, delivered, notification_outcomes, top_rules, needs_attention dan coverage. Setiap metrik adalah {status, count?, reason?}; jumlah partial hanya mencakup sebagian jendela dan bukan batas bawah.

get_alert_coverage

Menjawab "apa yang belum saya beri alert?" untuk layanan, lingkungan, satu grup alert, atau seluruh organisasi jika tidak ada cakupan yang diberikan. Hanya-baca: tool ini tidak pernah membuat, mengubah, atau mengaktifkan kembali apa pun. Juga tersedia di toolset investigate.

  • service (string, opsional): Nama layanan.
  • environment (string, opsional): Lingkungan deployment (misalnya prod).
  • entity_id (string, opsional): UUID grup alert (entitas), seperti yang dikembalikan oleh get_alert_groups.
  • muted_days (integer, opsional): Jumlah hari penuh, 1 hingga 3650. Default: 7; 0 berarti default. Aturan yang dibisukan lebih lama dari ini merupakan celah muted_too_long. Nilai dipangkas; string kosong diabaikan. Jenis kesenjangan: uncovered_signal (tidak ada aturan aktif untuk latency, error_rate, throughput, atau saturation; menyebutkan aturan nonaktif yang akan mencakupnya), all_rules_disabled (grup alert yang semua aturannya dinonaktifkan), no_notification_channel (aturan yang tingkat keparahannya tidak memiliki kanal yang dirutekan oleh grup alert-nya), muted_too_long (dibisukan tanpa batas waktu atau lebih dari muted_days; muted_since adalah pembaruan terakhir aturan dan mute_until dihilangkan untuk pembisuan tanpa batas waktu).

Mengembalikan JSON ringkas {scope, generated_at, complete, summary, counts, groups}. groups memuat satu entri {kind, count, gaps, omitted} untuk setiap jenis yang ada, dengan mencantumkan paling banyak 10 kesenjangan per jenis (omitted menghitung sisanya; persempit cakupan untuk melihatnya); setiap kesenjangan memuat suggested_tool (create_alert, create_alert_from_chart, attach_notification_channel, atau patch_alert) dan suggested_args, yang hanya memuat input yang diterima alat tersebut (patch_alert: entity_id, id dan is_disabled=false atau mute_until=0; attach_notification_channel: alert_group_id dan breach/threat severity; create_alert: entity_id; create_alert_from_chart: service_name); entity_id, rule_id, dan signal milik kesenjangan itu sendiri dicantumkan di sampingnya. Panggil alat yang disarankan hanya jika tersedia dalam sesi dan pengguna mengonfirmasi. complete bernilai true hanya jika API tidak mencantumkan kesenjangan, setiap hitungan bernilai 0, dan setidaknya satu grup alert cocok dengan cakupan (label service_name / env yang persis, diperiksa terhadap daftar get_alert_groups); cakupan yang tidak cocok dengan apa pun, pencarian yang gagal, atau hitungan tanpa kesenjangan yang tercantum tidak dianggap lengkap, dan summary menjelaskan alasannya.

get_alert_config

  • search_term (string, opsional): Pencarian teks bebas pada nama, grup, sumber data, tag.
  • rule_name (string, opsional)
  • severity (string, opsional)
  • rule_type (string, opsional): static atau anomaly.
  • alert_group_name / alert_group_type / data_source_name (string, opsional)
  • tags (array, opsional): Semuanya harus cocok (logika AND).

Setiap aturan mencantumkan Recent Evaluations: 5 sampel satu menit, terbaru lebih dahulu, masing-masing diberi label berdasarkan menit UTC saat sampel berakhir; sampel terbaru berakhir 1–2 menit sebelum pemanggilan, karena monitor mengisi menit terbaru terlambat. firing; ok = monitor melaporkan bahwa aturan tidak sedang menyala (status normal, resolved, pending, atau kosong, sebagaimana is_firing=0 dalam get_alert_rule_state); unknown = tidak ada baris monitor untuk aturan tersebut (belum dievaluasi, atau pencarian pada menit itu gagal dan dicatat di bagian atas respons), atau ada baris dengan status selain firing, normal, resolved, pending, atau kosong (misalnya no_data, silenced). Aturan yang dinonaktifkan menampilkan none. Jika lebih dari 25 aturan aktif cocok, riwayat tidak disertakan untuk semuanya dan respons menyatakannya.

get_entity_kpis

Hanya-baca; tersedia di toolset alerts dan investigate. Mencantumkan setiap KPI pada satu grup alert, termasuk KPI yang belum digunakan oleh aturan alert mana pun. Gunakan ID yang dikembalikan di expression_args / indicators_used; jangan pernah mengarangnya.

  • entity_id (string, wajib): UUID grup alert/entitas, dari get_alert_groups atau get_alert_config.

Mengembalikan JSON {"entity_id","count","kpis":[{"id","name","description","query","unit"}]}, diurutkan berdasarkan nama. unit adalah label tampilan: ambang batas dibandingkan dengan nilai kueri mentah. Jika tidak ada KPI yang sesuai, buat satu dengan create_kpi. Hasil grup kosong hanya menyebutkan create_kpi jika sesi menyediakannya; dengan --read-only (kecuali --allow-write-tools=create_kpi) atau toolset investigate, hasil menyatakan bahwa pembuatan KPI memerlukan sesi alerts yang dapat ditulisi.

create_kpi

Membuat KPI pada grup alert yang sudah ada; hanya toolset alerts. Gunakan hanya jika get_entity_kpis tidak memiliki KPI dengan kueri yang diperlukan. Periksa terlebih dahulu apakah kueri mengembalikan data dengan prometheus_range_query: API hanya menolak kueri yang tidak dapat diurai, dan menyimpan kueri valid untuk metrik yang tidak ada.

  • entity_id (string, wajib): UUID grup alert/entitas.
  • name (string, wajib): Unik dalam grup alert; pembuatan kedua dengan nama yang sama ditolak sebagai konflik.
  • query (string, wajib): PromQL. Untuk membuat alert pada panel dasbor, ambil PromQL panel dari get_dashboard.
  • unit (string, wajib): Satuan nilai mentah kueri, misalnya seconds, ms, percent, ratio, count, req/s. Ini hanya label dan tidak mengonversi apa pun, jadi ambang batas dibandingkan dengan nilai mentah.
  • description (string, opsional)
  • data_source_id (string, opsional): Default-nya adalah sumber data grup alert.

Tidak ada alat MCP yang menghapus atau mengedit KPI (gunakan UI Last9), jadi konfirmasikan nama, kueri, dan satuan sebelum membuatnya. Buat sekali dan simpan ID yang dikembalikan untuk expression_args / indicators_used; jika terjadi konflik nama, gunakan kembali ID KPI yang sudah ada dari get_entity_kpis. Jika terjadi timeout atau kesalahan koneksi, pembuatan mungkin sudah diterapkan atau belum: periksa berdasarkan nama dengan get_entity_kpis sebelum mencoba lagi. Mengembalikan {"id","name","query","unit"}.

get_alerts

  • time_iso (string, opsional): Waktu evaluasi dalam RFC3339.
  • window (integer, opsional): Rentang waktu lihat ke belakang dalam detik. Default: 900. Rentang: 60–86400.
  • lookback_minutes (integer, opsional): Rentang: 1–1440.

get_alert_rule_state

  • start_time (integer atau string, wajib): Awal rentang (inklusif): detik Unix epoch (1718000000) atau RFC3339 (2024-06-10T06:13:20Z). Milidetik, mikrodetik, dan nanodetik epoch dikonversi menjadi detik; nilai sebelum 2000-01-01 ditolak.
  • end_time (integer atau string, wajib): Akhir rentang (inklusif), dalam format yang sama.
  • step (integer, wajib): Resolusi dalam detik antar sampel. Jumlah sampel ((end_time - start_time) / step + 1) dibatasi hingga 100. Setiap sampel adalah satu panggilan upstream yang mencakup min(step, 3600) detik hingga waktu sampelnya; sampel diambil 5 sekaligus, dan alat mengembalikan kesalahan dengan panduan untuk mencoba lagi jika prosesnya memakan waktu lebih dari 60s.
  • alert_group_id (string, opsional): Filter berdasarkan ID grup alert.
  • rule_name (string, opsional): Filter regex pada nama aturan.
  • alert_group_name (string, opsional): Filter regex pada nama grup alert.
  • label_filters (string, opsional): Filter label key=value yang dipisahkan koma.
  • state (string, opsional): Filter berdasarkan status (misalnya firing).

Mengembalikan peta JSON rule_id -> [{timestamp, is_firing}]. Timestamp saat aturan tidak ada dalam respons upstream dilaporkan sebagai is_firing=0 — artinya "tidak teramati sedang menyala", bukan status normal yang terkonfirmasi.

get_alert_hygiene

Audit hanya-baca atas aturan alert yang aktif. Audit ini tidak pernah mengubah apa pun: setiap perbaikan yang disarankan adalah proposal, dan hanya diterapkan setelah pengguna mengonfirmasinya secara eksplisit, melalui update_alert (penyetelan), patch_alert (is_disabled), delete_alert atau attach_notification_channel jika tersedia.

  • window (string, opsional): 7d atau 30d. Default: 7d.
  • limit (integer, opsional): Jumlah maksimum aturan yang ditandai untuk dikembalikan, dimulai dari yang terburuk. Default: 20. Rentang: 1–100.

Jendela berakhir sekarang. Kategori (satu aturan dapat memiliki beberapa kategori): noisy (≥ 5 kali menyala/hari dengan < 20% acked; with an unavailable ack_rate it is judged on fire rate alone and the reason says so; mute time is not reported), flapping (> 4 flapping/hari), stale (terakhir kali menyala sebelum jendela tanpa waktu menyala di dalamnya, atau aturan terkonfigurasi yang aktif tanpa episode dalam jendela sementara siklus hidup coverage selesai dan daftar API tidak terpotong), unrouted (tidak ada penyalaan dalam jendela yang mencapai kanal dan saat ini tidak ada kanal yang terpasang pada grup alert; jika lampiran tidak dapat dibaca, aturan dihitung dalam unavailable.routed). Setiap statistik bernilai {status, count|value, reason} atau null: nilai yang tidak tersedia tidak pernah dianggap nol dan hanya melewati pemeriksaan yang memerlukannya, dan unavailable menghitung aturan aktif untuk setiap nilai yang hilang (fire_count, flap_count, ack_rate, routed, rule_config untuk aturan yang tidak ada dalam daftar aturan alert, yang perbaikannya tidak menyertakan nilai saat ini, dan activity untuk aturan terkonfigurasi tanpa episode yang keheningannya tidak dapat dibuktikan oleh riwayat, yang tidak dinilai). coverage menyatakan seberapa banyak riwayat alert yang tercakup dalam jendela; laju menggunakan rentang yang tercakup, minimal satu hari. upstream_truncated bernilai true jika API hanya mengembalikan 200 aturan paling bising, sehingga aturan yang lebih tenang tidak dievaluasi. Perbaikan dibuat berdasarkan konfigurasi setiap aturan dalam daftar aturan alert: naikkan bad_minutes (N dalam count_true(result) >= N) atau perpanjang eval_window (maksimal 60 menit); untuk ambang statis yang bising, geser ambang di condition (expr > 100) atau ubah ekspresinya menjadi adaptive_std_cmp(metric, sensitivity, window); pasang kanal notifikasi; nonaktifkan atau hapus aturan usang.

Mengembalikan JSON ringkas {window, from, to, coverage, upstream_truncated, rules_evaluated, flagged_rules, truncated, omitted_for_size, unavailable, rules}, dengan target ukuran 32 KB: truncated bernilai true jika jumlah aturan yang ditandai melebihi limit atau target tersebut, dan omitted_for_size menghitung aturan dalam limit yang dipangkas demi ukuran (aturan terburuk selalu dipertahankan, jadi satu aturan yang lebih besar dari 32 KB dikembalikan sendiri dan melampaui target); setiap aturan memiliki findings (category, reason, suggested_fix, opsional alternative_fix) dan stats mentah.

get_notification_channels

  • scope (string, opsional): attached (default) mengembalikan satu baris per lampiran grup alert; id adalah ID lampiran, seperti yang digunakan oleh detach_notification_channel. channels mengembalikan kanal organisasi (id, name, type, send_resolved, created_via); id adalah ID kanal, seperti yang digunakan oleh attach_notification_channel. Tujuan, header, dan sertifikat tidak pernah dikembalikan.

Mengembalikan kanal notifikasi yang dikonfigurasi (Slack, PagerDuty, email, webhook, dll.) sebagai tabel TSV. Baris lampiran (service_fqid terisi) menampilkan global false dan services -; services hanya mencantumkan binding layanan lama. Pada baris lampiran, send_resolved adalah nilai default yang tersimpan pada baris, bukan nilai yang digunakan untuk pengiriman; notifikasi penyelesaian mengikuti send_resolved milik kanal itu sendiri (scope=channels). Kedua cakupan menyertakan created_via (last9-mcp untuk baris yang dibuat oleh agen MCP, selain itu -).

recommend_alert_config

Hanya-baca. Mengembalikan panduan siklus hidup, gerbang validasi, dan persyaratan konteks bagi penanggap; hasilnya bukan bukti dengan sendirinya, jadi dasarkan ambang batas pada alat telemetri.

  • signal (string, wajib): Metrik atau sinyal dampak pengguna, termasuk satuan dan dimensi.
  • objective (string, wajib): Gejala atau dampak pengguna yang perlu dideteksi.
  • rule_type (string, opsional): static (default) atau anomaly.
  • severity (string, opsional): breach (default) atau threat.
  • environment (string, opsional): Lingkungan dan profil trafik.

validate_alert_expression

Menjalankan uji coba ekspresi tanpa menyimpannya. Gunakan sebelum create_alert / update_alert.

  • entity_id (string, wajib): UUID grup alert/entitas.
  • expression (string, wajib): Operasi aritmetika atas indikator yang disebut dengan nama KPI persisnya, misalnya errors / requests. Maksimal 3 indikator. Tulis nama yang mengandung spasi, titik, atau tanda hubung apa adanya (Test Alert / errors), persis seperti yang disimpan oleh create_alert.
  • indicators_used (object, wajib, tidak kosong): Nama indikator ke UUID KPI milik entity_id; cantumkan ID dan nama KPI grup dengan get_entity_kpis. Gunakan nama persis setiap KPI: uji coba ini menerima nama apa pun, tetapi create_alert dan update_alert menolak kunci expression_args yang bukan nama KPI yang terikat. Hanya ekspresi aritmetika yang diperiksa (berikan ekspresi metrik bagian dalam, bukan pembungkus adaptive_std_cmp(...)); condition / alert_condition tidak diperiksa. Pemeriksaan minimal satu timeseries hanya dijalankan jika lebih dari satu indikator digunakan.

Mengembalikan {"valid":true} atau {"valid":false,"reason":"..."}; ekspresi yang tidak valid adalah hasil normal, bukan kesalahan tool.

describe_alert_chart

Hanya-baca. Mencantumkan sinyal yang dapat diberi peringatan (key, unit, eval_query, query_kind) pada chart Discover yang didukung. Token dengan peran viewer ditolak.

  • surface (string, wajib): discover-service atau discover-exceptions; surface lain apa pun, termasuk dasbor kustom, ditolak sebelum API dipanggil (gunakan create_alert dengan KPI).
  • chart_key (string, wajib): misalnya apdex, error_rate, response_time, exception_count.
  • service_name (string, wajib)
  • env (string, opsional)
  • attributes (object, opsional): Dimensi identitas tambahan, menggunakan nama kunci yang dilaporkan tool ini.

create_alert

Membuat aturan dalam grup peringatan yang sudah ada, selalu dalam keadaan nonaktif (draf, meskipun is_disabled=false diberikan). Panggil recommend_alert_config terlebih dahulu, lalu promosikan dengan patch_alert is_disabled=false hanya setelah pengguna mengonfirmasi. Buat sekali dan simpan ID aturan yang dikembalikan. rule_name yang sudah digunakan grup peringatan (tanpa membedakan huruf besar-kecil) akan ditolak tanpa membuat apa pun, dengan menyebutkan id aturan yang sudah ada.

  • entity_id (string, wajib): UUID grup peringatan/entitas.
  • alert_rule (object, wajib): Isi aturan bertipe lengkap, termasuk primary_indicator dan expression_args yang terikat ke KPI entitas yang sebenarnya. Setiap kunci expression_args harus berupa nama persis KPI yang diikatnya (bukan placeholder seperti x), dan primary_indicator serta expression menggunakan nama tersebut. Aturan statis memerlukan condition, alert_condition, dan eval_window (0–60 menit). Aturan adaptif menggunakan expression = adaptive_std_cmp(<primary_indicator>, sensitivity, window); ketiga kolom tersebut bersifat opsional (nilai default expr > 0, count_true(result) >= 1, 1). algorithm tidak dapat diatur. Konteks responder ditempatkan di properties (deskripsi, runbook, anotasi, query_mode).

Perutean notifikasi dikonfigurasi pada grup peringatan, bukan pada aturan.

create_alert_from_chart

Membuat aturan ambang statis dari chart yang dijelaskan oleh describe_alert_chart. Seperti create_alert, aturan dibuat dalam keadaan nonaktif sebagai draf dan tidak akan terpicu; promosikan dengan patch_alert is_disabled=false hanya setelah pengguna mengonfirmasi. API chart membuat aturan dalam keadaan aktif, jadi tool ini menonaktifkan aturan segera setelah dibuat; jika gagal, hasilnya adalah kesalahan yang menyebutkan id aturan, yang mungkin sedang aktif.

  • surface / chart_key / service_name / signal_key / name (string, wajib)
  • env (string, opsional)
  • attributes (object, opsional)
  • threshold (number, opsional): Dalam satuan sinyal; harus 0 atau lebih. Sinyal dengan satuan skor seperti apdex memerlukan nilai eksplisit.
  • threshold_operator (string, opsional): > (default), <, >=, <=, ==, !=.
  • eval_window (integer, opsional): Menit, 1–60. Default: 5.
  • bad_minutes (integer, opsional): 1–eval_window. Default: 3.
  • severity (string, opsional): breach atau threat.
  • description (string, opsional)
  • group_id (string, opsional): Biasanya tidak perlu disertakan.

update_alert

Mengganti seluruh konfigurasi evaluasi aturan. Ambil aturan terlebih dahulu dengan get_alert_config atau get_entity_alert_rules. Menolak tanpa mengubah apa pun jika aturan tidak ada atau milik grup peringatan lain. Aturan mungkin dihapus secara lunak lalu dibuat ulang, jadi gunakan ID pengganti yang dikembalikan setelahnya.

  • entity_id (string, wajib)
  • id (string, wajib): UUID aturan peringatan.
  • alert_rule (object, wajib): Konfigurasi lengkap; bentuknya sama dengan create_alert.

patch_alert

Perubahan parsial yang mempertahankan ID aturan. Setidaknya satu perubahan diperlukan. Menolak tanpa mengubah apa pun jika aturan tidak ada atau milik grup peringatan lain.

  • entity_id (string, wajib)
  • id (string, wajib): UUID aturan peringatan.
  • is_disabled (boolean, opsional): false mempromosikan/mengaktifkan, true menjeda.
  • mute_until (integer, opsional): Batas waktu Unix epoch; 0 membatalkan pembisuan.
  • properties (object, opsional): description, runbook, annotations, query_mode. Setiap kolom yang dikirim menggantikan nilai tersimpan; kolom yang tidak disertakan atau kosong mempertahankan nilai tersimpannya. annotations menggantikan seluruh peta, jadi kirim semua kunci yang ingin dipertahankan; {} menghapusnya.
  • recurring_mute_schedule (object, opsional): Mengganti jadwal mingguan: enabled (default false), timezone (nama IANA, wajib), dan windows (1–20 dari weekdays sebagai sun..sat, start_time / end_time sebagai HH:MM 24 jam). Waktu akhir yang sama dengan atau lebih awal daripada waktu mulai akan berakhir pada hari berikutnya. Kirim semua jendela waktu yang ingin dipertahankan.
  • clear_recurring_mute_schedule (boolean, opsional): Menghapus seluruh jadwal; tidak dapat digabungkan dengan recurring_mute_schedule. Berbeda dengan enabled=false, yang mempertahankan jendela waktu tersimpan.

Pengguna dengan peran viewer hanya dapat mengubah mute_until. Perubahan pembisuan tingkat aturan ditolak saat grup atau entitas sedang dibisukan. Baca kembali perubahan dengan get_entity_alert_rules, yang menampilkan mute_until, recurring_mute_schedule dan properties.

delete_alert

Menghapus aturan secara permanen. Verifikasi dengan get_alert_config dan dapatkan konfirmasi eksplisit dari pengguna terlebih dahulu. Menolak tanpa menghapus apa pun jika aturan tidak ada atau milik grup peringatan lain.

  • entity_id (string, wajib)
  • id (string, wajib): UUID aturan peringatan.

mute_alert_group

Membisukan semua aturan saat ini dan mendatang dalam suatu grup; untuk membisukan satu aturan, gunakan patch_alert dengan mute_until. Memerlukan akses editor.

  • entity_id (string, wajib): UUID grup peringatan/entitas.
  • until (integer, wajib): Detik Unix epoch saat pembisuan berakhir. 0 membatalkan pembisuan; nilai negatif seperti -1 membisukan tanpa batas waktu.

acknowledge_alert

Mengambil alih alert yang sedang aktif, atau melepaskan kepemilikannya. Tidak menyelesaikan atau membisukan alert. Mengakui alert yang sudah Anda miliki adalah operasi aman tanpa perubahan. ack menolak tanpa mencatat apa pun kecuali get_alerts mencantumkan alert yang persis sama (ketiga id) dalam satu jam terakhir.

  • alert_group_id / rule_id / rule_type (string, wajib): Salin dari alert di get_alerts.
  • action (string, opsional): ack (default) atau unack. Hanya pemilik atau admin org yang dapat membatalkan pengakuan.
  • mute_until (integer, opsional): Hanya ack. Mencatat pembisuan yang sudah Anda terapkan dengan mute_alert_group atau patch_alert; tidak membisukan apa pun.

reassign_alert

Mengalihkan alert yang sudah memiliki pemilik ke pengguna lain; akui alert terlebih dahulu jika belum memiliki pemilik. Jika tidak ada yang dialihkan karena alert tidak memiliki pemilik, tool ini menyatakan apakah get_alerts mencantumkan alert tersebut dalam satu jam terakhir. Last9 tidak memberi tahu pemilik baru.

  • alert_group_id / rule_id / rule_type (string, wajib): Salin dari alert di get_alerts.
  • owner_email (string, opsional): Diutamakan; dicocokkan tanpa membedakan huruf besar-kecil dengan pengguna org yang aktif.
  • owner_user_id (string, opsional): Berikan tepat satu dari owner_email atau owner_user_id.

create_notification_channel

Membuat channel; channel tidak merutekan apa pun sampai dilampirkan dengan attach_notification_channel. Buat sekali dan simpan id-nya; tidak ada tool untuk memperbarui. Hanya mengembalikan id, name, type, dan send_resolved.

  • name (string, wajib): Harus unik untuk setiap jenis; tanpa titik dua.
  • type (string, wajib): slack, pagerduty, opsgenie, email, atau generic_webhook.
  • destination (string, wajib): URL Slack Incoming Webhook (atau ID channel dengan slack_app_mode), routing key PagerDuty, API key Opsgenie, alamat email kerja yang dipisahkan koma dari domain apa pun, bukan hanya domain org (API menolak alamat penyedia email pribadi seperti Gmail, dan org yang menggunakan login pribadi hanya menerima alamat adminnya), atau URL webhook HTTPS.
  • slack_app_mode (boolean, opsional): Hanya Slack. Default: false.
  • mention_handles (string, opsional): Dipisahkan koma, misalnya user|U123ABC|name, special|here, special|channel.
  • webhook_headers (object, opsional): Hanya generic_webhook.
  • webhook_ca_certificate (string, opsional): Hanya generic_webhook; satu sertifikat CA PEM hingga 64 KiB.
  • send_resolved (boolean, opsional): Default: true.

attach_notification_channel

Merutekan channel yang sudah ada ke satu grup peringatan. Idempoten. Lampiran menyalin pengaturan pengiriman channel (header, sertifikat, mention) saat dilampirkan; jika pengaturan channel berubah kemudian, lampirkan ulang.

  • channel_id (integer, wajib): ID channel (get_notification_channels dengan scope=channels), bukan ID lampiran.
  • alert_group_id (string, wajib): Dari get_alert_groups.
  • severity (string, wajib): breach, threat, atau both. both membuat dua lampiran; jika lampiran kedua gagal, lampiran pertama tetap terpasang dan kesalahan menyebutkan tingkat keparahan yang perlu dicoba ulang.

detach_notification_channel

Menghapus satu lampiran. Memerlukan token dengan cakupan delete; token dengan cakupan write tidak dapat melepas lampiran.

  • attachment_id (integer, wajib): id dari get_notification_channels dengan scope=attached. ID channel ditolak.
  • alert_group_id (string, opsional): Menolak jika lampiran tersebut milik grup lain.

delete_notification_channel

Menghapus channel secara permanen jika tidak memiliki lampiran; lepaskan lampirannya terlebih dahulu. Memerlukan token dengan cakupan delete. Mengonfirmasi penghapusan dengan mencantumkan ulang channel.

  • channel_id (integer, wajib): id dari get_notification_channels dengan scope=channels. ID lampiran ditolak.

did_you_mean

  • query (string, wajib): Nama yang akan dicari — sebagian, salah eja, atau disingkat.
  • type (string, opsional): Batasi berdasarkan jenis entitas: service, environment, host, database, k8s_deployment, k8s_namespace, job.

Mengembalikan hingga 3 kecocokan terdekat beserta skor kemiripan. Gunakan ini sebelum pemanggilan tool apa pun saat nama entitas belum pasti. Jika pemanggilan sebelumnya mengembalikan hasil kosong, coba ini sebelum mengulangi pemanggilan.

get_service_profile

  • service_name (string, wajib): Layanan yang akan digunakan untuk menyusun profil telemetri.
  • datasource (string, opsional): Nama datasource. Abaikan untuk menggunakan default; nama perkiraan akan diresolusikan seperti pada tool Prometheus. Mengembalikan ringkasan investigasi singkat, diikuti profil lengkap dalam format JSON mentah: keberadaan sinyal (logs/traces/metrics sebagai present, absent, atau unknown), bahasa dan runtime, lingkungan deployment, log signal_shape (log_format, severity_set, level_field, trace_context_in_logs), serta perbaikan ingest yang disarankan jika berlaku. Saat backend melaporkan freshness, ringkasan menambahkan baris last seen dengan freshness.logs.last_seen dan freshness.traces.last_seen (RFC3339, atau none jika null), serta peringatan traces stale saat freshness.traces_stale adalah true: span berhenti sementara log berlanjut, jadi selidiki regresi di sekitar freshness.traces.last_seen, bukan konfigurasi yang hilang. Diturunkan dari upstream dan di-cache dengan TTL sekitar 15 menit.

Panggil ini sebelum investigasi apa pun yang mencakup layanan agar pemilihan alat sesuai dengan telemetri aktual layanan — lewati alat trace saat traces adalah absent, dan saat severity_set adalah none atau partial, uraikan severity dari level_field di isi log, bukan menggunakan severity_filters. metrics selalu unknown dan dependencies tidak terisi di v1. Saat logs dan traces sama-sama absent, pastikan namanya dengan did_you_mean sebelum menyimpulkan bahwa layanan tidak dipantau.

list_dashboards

  • name (string, opsional): Substring nama dashboard yang tidak peka huruf besar-kecil. Mempersempit daftar dan total.
  • limit (integer, opsional): Jumlah dashboard per halaman, 1–200. Default: 100.
  • cursor (string, opsional): next_cursor dari halaman sebelumnya; teruskan name yang sama bersamanya.

Mengembalikan {"dashboards": [{"id", "name", "updated_at", "created_by", "locked"}], "total", "next_cursor"}, diurutkan dari yang paling baru diperbarui. created_by tidak disertakan jika kosong; locked tidak disertakan jika API tidak melaporkan readonly. updated_at adalah detik epoch Unix dalam bentuk string. Halaman dapat berakhir lebih awal agar ukurannya tetap di bawah 32 KB; next_cursor tidak ada di halaman terakhir.

get_dashboard

  • id (string, wajib): UUID dashboard.
  • region (string, opsional): Region untuk pengisian kueri panel. Default-nya adalah region datasource yang dikonfigurasi.

Hasilnya menambahkan locked tingkat teratas (false jika API tidak menyediakannya) dan created_by (ID pengguna pembuat).

Untuk membuat alert pada panel, lihat last9://reference/alerting.

validate_dashboard

Hanya baca. Tidak pernah membuat atau memperbarui dashboard. Terima tepat satu dari dashboard_id atau dashboard_definition.

  • dashboard_id (string, opsional): UUID dashboard tersimpan yang akan divalidasi.
  • dashboard_definition (object, opsional): Isi dashboard inline yang belum disimpan (dry run sungguhan). Envelope pembuatan {dashboard, metadata} dibuka untuk mengambil objek dashboard.
  • start_time_iso / end_time_iso (string, opsional): Rentang waktu validasi (RFC3339). Harus ≤ 24 jam.
  • region (string, opsional): Region untuk eksekusi kueri panel.

Mengembalikan dashboard_validation/v1: klasifikasi lint + eksekusi per panel (data / no_data / invalid / error). Hasil kosong pada hari pertama diklasifikasikan sebagai valid_no_data tanpa probe diagnose. Dashboard tanpa panel mengembalikan success: false dengan error: "no_panels". Field panel dari format lain (Grafana gridPos, title, type, dan targets pada panel yang memerlukan kueri) serta field dengan tipe yang salah dicantumkan per panel di shape_problems, dihitung dalam summary.panels_invalid_shape, dan membuat overall menjadi fail.

preview_dashboard

Pratinjau sisi klien, hanya baca. Teruskan dashboard (objek dashboard yang belum disimpan dari permintaan pembuatan) atau id beserta ops (operasi berurutan yang sama seperti patch_dashboard). start_time_iso dan end_time_iso wajib diisi dengan stempel waktu RFC3339 yang mencakup paling lama 24 jam. variables bersifat opsional dan berisi penggantian nilai skalar; jika tidak ada, nilai dashboard dan default bawaan akan digunakan.

{
  "id": "dashboard-id",
  "ops": [{"op": "update_panel", "panel_id": "panel-id", "fields": {"name": "Request latency"}}],
  "start_time_iso": "2026-10-01T08:00:00Z",
  "end_time_iso": "2026-10-01T09:00:00Z"
}

Mengembalikan saved: false, ringkasan definisi/kueri validation (termasuk definition_error untuk ketidakcocokan skema pembuatan), dan panels dengan status ok / empty / error, kueri yang telah diresolusikan, serta diagnostik target. PromQL dan LogJSON dieksekusi; jenis kueri yang tidak didukung dan variabel yang tidak dapat diresolusikan membuat panel berstatus error. Panel valid yang bukan kueri berstatus ok; definisi panel yang tidak valid berstatus error. Patch diff mencakup panels_added bersih, panels_changed (termasuk pemindahan) dan panels_removed, serta perubahan operasi yang berurutan. ID dan indeks berbasis nol mengidentifikasi panel; indeks yang dihapus merujuk pada dashboard asli. Panel tersimpan harus memiliki ID yang berbeda dan tidak kosong.

Batas: 50 panel, 100 kueri, 100 operasi, 65536 byte JSON untuk masing-masing dashboard input dan kandidat, serta batas waktu eksekusi 60 detik. Kueri yang telah diresolusikan dengan ukuran lebih dari 65536 byte JSON ditolak sebelum eksekusi. Bukti menyimpan paling banyak tiga sampel dan 1024 byte JSON per target, dengan truncated: true jika sampel tidak disertakan. Laporan JSON yang lebih dari 262144 byte gagal dan menyarankan untuk mengurangi input.

Dashboard tidak dibuat atau diperbarui. Ini memeriksa kandidat terhadap skema pembuatan dan menjalankan kueri menggunakan validator yang ada; ini tidak menjamin penerimaan atau perenderan oleh backend. ID, default, atau field yang dibuang oleh backend, maupun pengeditan serentak, dapat mengubah hasil yang tersimpan. Pratinjau menggunakan operasi patch lokal dan default versi panel yang sama seperti operasi tulis.

create_dashboard

Hanya untuk dashboard baru. Setelah panggilan ini mengembalikan dashboard.id, edit panel dengan patch_dashboard (atau susun ulang dengan update_dashboard) — jangan membuat dashboard lagi untuk menambahkan, memangkas, atau memperbaiki panel.

  • dashboard (object, wajib): Definisi dashboard dengan name dan panels[]. Setiap panel memerlukan name, version, layout (x, y, w, h), visualization.type, dan queries[].
  • metadata (object, opsional): Metadata dashboard — field _category dan _type (misalnya {"_category":"custom","_type":"metrics"}).

update_dashboard

Gunakan hanya untuk menyusun ulang sebagian besar dashboard; untuk menambahkan, mengedit, menghapus, atau memindahkan panel satu per satu, gunakan patch_dashboard. Penggantian penuh berdasarkan ID (isi yang sama seperti create): setiap panel harus dikirim ulang secara persis.

  • id (string, wajib): UUID dashboard yang akan diperbarui.
  • dashboard (object, wajib): Isi dashboard pengganti penuh (bentuk yang sama seperti create).
  • metadata (object, opsional): Metadata pengganti. Dashboard sistem hanya-baca menghasilkan error alat yang dapat dipulihkan.

patch_dashboard

Utamakan ini daripada update_dashboard untuk penyempurnaan kecil: panel yang tidak berubah tidak pernah dikirim ulang. Membaca dashboard, menerapkan ops secara berurutan, lalu menulisnya kembali, sehingga perubahan yang dibuat di tempat lain antara pembacaan dan penulisan akan tertimpa. Mengembalikan {dashboard_id, changes[]}; operasi yang sudah dipenuhi oleh dashboard tidak disertakan, dan jika tidak ada yang berubah, tidak ada yang ditulis. Diff diperiksa terhadap pembacaan ulang setelah penulisan: fields panel menampilkan nilai tersimpan, not_stored mencantumkan kunci yang dibuang API, dan not_removed mencantumkan kunci yang dipertahankan API meskipun ada null. Nilai diff yang lebih dari 200 karakter dipersingkat di tempat, dengan tipe JSON-nya tetap dipertahankan.

  • id (string, wajib): UUID dashboard yang akan di-patch.
  • ops (array, wajib): Operasi yang diterapkan secara berurutan; jika ada yang tidak valid, tidak ada yang ditulis dan error menyebutnya sebagai ops[i].
    • add_panel: panel (objek panel lengkap; version default-nya 1), index opsional (posisi penyisipan berbasis nol, default-nya di akhir).
    • update_panel: panel_id, fields (kunci panel tingkat teratas yang akan diganti; null menghapus kunci; id tidak dapat diubah).
    • remove_panel: panel_id.
    • move_panel: panel_id, index (posisi berbasis nol setelah pemindahan).
    • set_title: title (nama dashboard).
    • set_variable: variable; mengganti variabel dengan target yang sama, jika tidak, menambahkannya.

delete_dashboard

  • id (string, wajib): UUID dashboard yang akan dihapus. Dashboard sistem hanya-baca tidak dapat dihapus.

set_dashboard_lock

  • id (string, wajib): UUID dashboard.
  • locked (boolean, wajib): true mengunci dashboard, false membuka kuncinya.

Alat tulis; panggil hanya jika pengguna memintanya secara eksplisit. Hanya pembuat dashboard atau admin organisasi yang dapat mengunci atau membuka kuncinya, dan dashboard bawaan selalu hanya-baca. Mengembalikan {"id", "locked"} beserta status hasilnya. Saat terkunci, update_dashboard, patch_dashboard dan delete_dashboard tidak melakukan penulisan dan mengembalikan error alat yang dapat dipulihkan, diawali dashboard is locked, yang menyebut pembuat dan menyarankan untuk membuka kunci atau menyalin dashboard dengan create_dashboard.

list_dashboard_snapshots

  • dashboard_id (string, wajib): UUID dashboard yang snapshot-nya akan dicantumkan.

Mengembalikan metadata saja (id, name, expires_at, dan sebagainya). Gunakan get_dashboard_snapshot untuk data panel yang dibekukan.

get_dashboard_snapshot

  • id (string, wajib): UUID snapshot.

Mengembalikan snapshot beku lengkap, termasuk dashboard_definition, panel_data, time_range, dan variables.

delete_dashboard_snapshot

  • id (string, wajib): UUID snapshot yang akan dihapus.

get_profile_services

  • lookback_minutes / start_time_iso / end_time_iso (opsional): Rentang waktu; utamakan lookback atau batas ISO eksplisit (default 60m).
  • region (string, opsional): Penggantian region.

Mengembalikan layanan yang memiliki data profiling dalam rentang waktu tersebut. Panggil ini sebelum get_flamegraph / get_top_functions / get_profile_summary.

get_flamegraph

  • service (string, wajib): Nama layanan dari get_profile_services.
  • profile_type (string, opsional): cpu (default), alloc, atau wall. Tetapkan jenis saat membandingkan rentang waktu.
  • env / cluster / namespace / runtime (string, opsional): Filter cakupan.
  • limit (number, opsional): Jumlah maksimum baris stack agregat (default 1000, maksimum 10000).
  • lookback_minutes / start_time_iso / end_time_iso / region (opsional).

Mengembalikan pohon flamegraph bertingkat (name / value / self / children). truncated: true berarti batas baris API tercapai.

get_top_functions

Filter sama seperti get_flamegraph. Mengembalikan peringkat fungsi terpanas berdasarkan sampel mandiri. Hasilnya mungkin terpotong; periksa truncated.

get_profile_summary

Filter sama seperti get_flamegraph. Mengembalikan triase profil layanan dalam bahasa alami secara singkat.

grafana_search_dashboards

  • query (string, opsional): Substring judul. Jika kosong, pencarian mencakup banyak hasil (tunduk pada batas 5.000 baris).

Mengembalikan {"dashboards":[…], "truncated":bool} dengan uid, title, uri, url, type, tags. Gunakan uid dengan grafana_get_dashboard.

grafana_get_dashboard

  • uid (string, wajib): uid dashboard Grafana.
  • full_json (boolean, opsional): Jika true, kembalikan JSON Grafana mentah, bukan ringkasan yang difilter.

Ringkasan default: versi, tag, variabel templating, dan tipe/datasource/gridPos/target promQL setiap panel. Jenis panel plugin yang tidak dikenal muncul di unsupportedPanelTypes.

grafana_list_folders

Tanpa parameter. Mengembalikan hierarki folder.

grafana_list_folder_dashboards

  • folder_uid (string, wajib): UID folder Grafana.

Mengembalikan {"dashboards":[…], "truncated":bool} untuk dasbor di folder tersebut (dipaginasi hingga 5.000).

grafana_list_datasources

Tanpa parameter. Mengembalikan proyeksi sumber data yang aman (tanpa kolom kredensial).


Pengujian

Jalankan penganalisis goroutine pengujian tanpa menjalankan pengujian aplikasi:

make lint-test

Ini menjalankan penganalisis Go testinggoroutine pada semua paket, termasuk file *_test.go, dan memeriksanya terhadap fixture yang tidak aman dan aman. Kedua alur kerja pengujian CI menjalankan go vet -testinggoroutine ./... sebagai langkah terpisah, sehingga hasil pengujian paket yang tersimpan dalam cache tidak dapat melewati penegakan lint.

Paket root juga menjalankan penganalisis sebagai pengujian. Gunakan go test -count=1 ./... untuk seluruh rangkaian pengujian dengan pemeriksaan tersebut tanpa cache: cache pengujian Go tidak melacak file sumber paket internal yang dibaca oleh subprocess penganalisis. Perintah go test ./... biasa dapat menggunakan kembali hasil pengujian root yang berhasil setelah file-file tersebut berubah.

Fatal, Fatalf, dan FailNow pada testing.T atau testing.B harus dijalankan di goroutine pengujian induk. Worker harus mengirimkan error kembali agar dapat diperiksa oleh induk:

errs := make(chan error, 1)
go func() { errs <- doWork() }()
if err := <-errs; err != nil {
    t.Fatal(err)
}

Penganalisis mendeteksi pemanggilan langsung dalam closure go func; penganalisis ini bukan pemeriksaan interprosedural umum untuk assertion yang tersembunyi di balik pemanggilan helper sembarang. Pengujian integrasi dilewati kecuali TEST_REFRESH_TOKEN ditetapkan.


MseeP.ai Security Assessment Badge