Last9
ทางการนำบริบทการผลิตแบบเรียลไทม์—ล็อก เมตริก และเทรซ—มาสู่สภาพแวดล้อมในเครื่องของคุณได้อย่างราบรื่น เพื่อแก้ไขโค้ดอัตโนมัติได้เร็วขึ้น
คุณทำอะไรได้บ้างด้วย Last9 MCP?
-
ตรวจสอบสุขภาพของบริการ — ขอสรุปอันดับของฝูงบริการเกี่ยวกับจำนวนคำขอ ปริมาณงาน และอัตราข้อผิดพลาดผ่าน
get_service_summary -
ดึงบันทึกบริการดิบ — ดึงบรรทัดบันทึกที่กรองแล้วตามระดับความรุนแรงหรือเนื้อหาของข้อความสำหรับบริการเฉพาะโดยใช้
get_service_logs -
ติดตามประสิทธิภาพฐานข้อมูล — ค้นหาฐานข้อมูล คำสั่ง查询ที่ช้า และรูปแบบของคำสั่ง查询ด้วย
get_databasesและเครื่องมือที่เกี่ยวข้อง -
รันคำสั่ง PromQL — ดำเนินการคำสั่งแบบช่วงเวลาหรือแบบทันทีกับเมตริกใดๆ โดยใช้
prometheus_range_queryหรือprometheus_instant_query -
เชื่อมโยงการเปลี่ยนแปลงกับเหตุการณ์ — ดึงข้อมูลเหตุการณ์การปรับใช้และการเปลี่ยนแปลงการกำหนดค่าเพื่อทำความเข้าใจสิ่งที่เปลี่ยนแปลงพฤติกรรมการผลิตผ่าน
get_change_events -
จัดการแดชบอร์ดที่กำหนดเอง — แสดงรายการ สร้าง อัปเดต หรือตรวจสอบแดชบอร์ดโดยโปรแกรมด้วย
list_dashboardsและcreate_dashboard
เอกสาร
เซิร์ฟเวอร์ MCP ของ Last9

เอเจนต์ AI ของคุณไม่รู้ว่าอะไรเสียหายในระบบผลิตจริง นี่คือสิ่งที่แก้ปัญหานั้น
เซิร์ฟเวอร์ MCP ของ Last9 เชื่อมต่อ Claude, Cursor, Windsurf และผู้ช่วย AI ที่รองรับ MCP อื่นๆ เข้ากับข้อมูลการสังเกตการณ์ในระบบผลิตจริงของคุณโดยตรง ไม่ว่าจะเป็นล็อก เมตริก เทรซ ข้อยกเว้น คำสั่งฐานข้อมูล การแจ้งเตือน และการปรับใช้ เอเจนต์จะหยุดการเดาและเริ่มอ่านสัญญาณจริง
เริ่มต้นใน 30 วินาที (โฮสต์)
ไม่ต้องติดตั้งไบนารี ไม่ต้องจัดการโทเค็น หนึ่ง URL, OAuth ในเบราว์เซอร์ของคุณ เสร็จสิ้น
ค้นหา org slug ของคุณใน 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
พิมพ์ /mcp, เลือก last9, ยืนยันตัวตน เท่านั้นเอง
Cursor
การตั้งค่า > MCP > เพิ่มเซิร์ฟเวอร์ MCP ใหม่:
{
"mcpServers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
คลิก เชื่อมต่อ, ทำ OAuth ให้เสร็จสิ้น
VS Code
ต้องใช้ v1.99+ เปิด Command Palette → MCP: เพิ่มเซิร์ฟเวอร์, วาง URL, ยืนยันตัวตน
หรือโดยตรงใน settings.json:
{
"mcp": {
"servers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
}
Windsurf
การตั้งค่า > Cascade > เปิด MCP Marketplace > ไอคอนเฟือง (mcp_config.json):
{
"mcpServers": {
"last9": {
"serverUrl": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Claude Web/Desktop
การตั้งค่า > ตัวเชื่อมต่อ > เพิ่มตัวเชื่อมต่อที่กำหนดเอง ตั้งชื่อว่า last9, วาง URL, ยืนยันตัวตน
ต้องมีสิทธิ์เข้าถึงระดับผู้ดูแลระบบสำหรับองค์กร Claude ของคุณ
โฮสต์ด้วยตนเอง (STDIO)
ใช้เมื่อไคลเอนต์ MCP ของคุณไม่รองรับการส่งผ่าน HTTP หรือเมื่อคุณต้องการให้เซิร์ฟเวอร์ทำงานในเครื่อง
การติดตั้ง
Homebrew:
brew install last9/tap/last9-mcp
NPM:
npm install -g @last9/mcp-server@latest
# or directly:
npx -y @last9/mcp-server@latest
การเผยแพร่ไบนารี (Windows / ด้วยตนเอง):
ดาวน์โหลดจาก GitHub Releases:
| แพลตฟอร์ม | ไฟล์เก็บถาวร |
|---|---|
| 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 |
รับโทเค็นรีเฟรช
เฉพาะ ผู้ดูแลระบบ เท่านั้นที่สร้างโทเค็นได้
- ไปที่ การเข้าถึง API
- คลิก สร้างโทเค็น ด้วยสิทธิ์การเขียน
- คัดลอก
การกำหนดค่าไคลเอนต์
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>"
}
}
}
}
ตำแหน่งที่จะวาง:
| ไคลเอนต์ | ตำแหน่งที่ตั้ง |
|---|---|
| Claude Web/Desktop | การตั้งค่า > นักพัฒนา > แก้ไขการกำหนดค่า (claude_desktop_config.json) |
| Cursor | การตั้งค่า > การตั้งค่า Cursor > MCP > เพิ่มเซิร์ฟเวอร์ MCP ทั่วโลกใหม่ |
| Windsurf | การตั้งค่า > Cascade > MCP Marketplace > ไอคอนเฟือง (mcp_config.json) |
| VS Code | ห่อใน { "mcp": { "servers": { ... } } } ใน settings.json — รายละเอียด |
การกำหนดค่า STDIO ของ VS Code
{
"mcp": {
"servers": {
"last9": {
"type": "stdio",
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
}
สำหรับ NPM: ใช้ "command": "npx" และเพิ่ม "args": ["-y", "@last9/mcp-server@latest"].
Windows
หลังจากดาวน์โหลดจาก GitHub Releases, แตกไฟล์และชี้ไปที่พาธเต็ม:
{
"mcpServers": {
"last9": {
"command": "C:\\Users\\<user>\\AppData\\Local\\Programs\\last9-mcp-server.exe",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
เส้นทาง NPM ง่ายกว่าบน Windows — ไม่ต้องจัดการพาธ
ตัวแปรสภาพแวดล้อม
| ตัวแปร | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|
LAST9_REFRESH_TOKEN | (จำเป็น) | โทเค็นรีเฟรชจาก การเข้าถึง API |
LAST9_DATASOURCE | ค่าเริ่มต้นของ org | ชื่อ datasource/cluster — มีประโยชน์เมื่อคุณมีคลัสเตอร์ Levitate หลายตัว |
LAST9_API_HOST | app.last9.io | แทนที่โฮสต์ API |
LAST9_TOOLSETS | เครื่องมือทั้งหมด | ชุดเครื่องมือที่เปิดเผยโดยคั่นด้วยเครื่องหมายจุลภาค (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). ชื่ออื่น: LAST9_MCP_TOOLSETS |
LAST9_MAX_GET_LOGS_ENTRIES | 5000 | รายการสูงสุดสำหรับคำขอ get_logs แบบแบ่งส่วน |
LAST9_USE_LOG_SEARCH_API | false | ตั้งค่า true เพื่อตอบ get_logs และ get_service_logs ด้วยการเรียกค้นฝั่งเซิร์ฟเวอร์ครั้งเดียวแทนการแบ่งส่วนฝั่งไคลเอนต์ |
LAST9_DEBUG_CHUNKING | false | ตั้งค่า true เพื่อบันทึกรายละเอียดการวางแผนการแบ่งส่วนสำหรับ get_logs, get_service_logs, get_traces |
LAST9_DISABLE_TELEMETRY | true | ตั้งค่า false เพื่อเปิดใช้งานการติดตาม OTel ภายใน |
OTEL_SDK_DISABLED | — | ตัวแปรสภาพแวดล้อม OTel มาตรฐาน แทนที่ LAST9_DISABLE_TELEMETRY |
OTEL_EXPORTER_OTLP_ENDPOINT | — | ปลายทางตัวรวบรวม OTLP (เฉพาะเมื่อเปิดใช้งาน telemetry) |
OTEL_EXPORTER_OTLP_HEADERS | — | ส่วนหัวการตรวจสอบสิทธิ์ OTLP (เฉพาะเมื่อเปิดใช้งาน telemetry) |
สิ่งที่สามารถทำได้
สุขภาพบริการ
get_service_summary— แถว(service, env)ของฝูงบินที่จัดอันดับ: interval request_count, throughput_rpm, จำนวน HTTP 4xx/5xx และจำนวนข้อผิดพลาด gRPCget_service_environments— สภาพแวดล้อมที่มีสำหรับบริการของคุณ เรียกใช้ก่อน — เครื่องมือ APM อื่นๆ ต้องใช้envจากที่นี่get_service_performance_details— รายละเอียดทั้งหมด: throughput, อัตราข้อผิดพลาด, p50/p90/p95/avg/max, apdex, ความพร้อมใช้งานget_service_operations_summary— การดำเนินการที่จัดกลุ่มตามปลายทาง HTTP, การเรียก DB, การส่งข้อความ, ไคลเอนต์ HTTPget_service_dependency_graph— แผนที่การพึ่งพาพร้อม throughput, ความหน่วง และอัตราข้อผิดพลาดสำหรับ upstream/downstream/infraget_apm_service_deviations— เปรียบเทียบหน้าต่างปัจจุบันกับพื้นฐานระยะเวลาเท่ากัน: การถดถอย/การปรับปรุง, การกระทบยอด Apdex และผลลัพธ์สุดท้าย (ฝูงบินหรือบริการเดียว)get_exceptions— ข้อยกเว้นฝั่งเซิร์ฟเวอร์พร้อมตัวกรองบริการและสแปน
การสังเกตฐานข้อมูล
เครื่องมือสี่อย่างที่เจาะประสิทธิภาพฐานข้อมูลของคุณโดยตรง มาจากสแปนเทรซ OpenTelemetry และเมื่อไม่มีเทรซ ใช้เมตริกโครงสร้างพื้นฐาน เช่น CloudWatch ไม่ต้องติดตั้งเครื่องมือเพิ่มเติมหากคุณใช้ OTel อยู่แล้ว
get_databases— ค้นพบฐานข้อมูลทั้งหมดในโครงสร้างพื้นฐานของคุณ: ประเภท DB, โฮสต์, throughput (คิวรี/นาที), ความหน่วง p95, อัตราข้อผิดพลาด, จำนวนบริการที่พึ่งพา ยังค้นพบฐานข้อมูลจากเมตริกโครงสร้างพื้นฐาน เช่น CloudWatch โดยไม่ต้องติดตั้งเครื่องมือเทรซ — แถวเหล่านั้นมีค่า activity แทนเมตริกเทรซget_database_slow_queries— การดำเนินการคิวรีที่ช้าที่สุดจริง เรียงตามระยะเวลา พร้อม ID เทรซสำหรับเจาะลึกเทรซเต็มรูปแบบget_database_queries— รูปแบบคิวรีและการรวม: ความถี่ที่คิวรีทำงาน, ระยะเวลาเฉลี่ย/p95, อัตราข้อผิดพลาดget_database_server_metrics— เมตริกฝั่งเซิร์ฟเวอร์จากโฮสต์ DB เอง (CPU, การเชื่อมต่อ, อัตราการชนบัฟเฟอร์ — ขึ้นอยู่กับระบบ DB ของคุณ)
รองรับ PostgreSQL, MySQL, MongoDB, Redis, Aerospike และสิ่งอื่นๆ ที่ OTel เทรซด้วยแอตทริบิวต์ db_system — รวมถึงฐานข้อมูลที่ค้นพบจากเมตริกโครงสร้างพื้นฐาน เช่น CloudWatch ซึ่งแถวมีค่า activity แทนเมตริกเทรซ
Prometheus / PromQL
prometheus_range_query— คำค้นหาช่วง PromQL เหนือเมตริกใดๆprometheus_instant_query— คำค้นหาทันที; ใช้ฟังก์ชันรวมเช่นavg_over_time,sum_over_timeprometheus_label_values— ค่าป้ายกำกับสำหรับซีรีส์ที่กำหนดprometheus_labels— ป้ายกำกับทั้งหมดที่มีสำหรับซีรีส์
ชี้ไปที่ datasource/cluster อื่นที่ไม่ใช่ค่าเริ่มต้นโดยตั้งค่า LAST9_DATASOURCE
ล็อก
get_logs— คำค้นหาล็อกไปป์ไลน์ JSON เต็มรูปแบบ (การรวม, ตัวกรอง, การแยกฟิลด์)get_service_logs— บรรทัดล็อกดิบสำหรับบริการ กรองได้ตามความรุนแรงและเนื้อหาข้อความget_log_attributes— แคตตาล็อกทั่วโลกของแอตทริบิวต์ในสคีมาล็อกสำหรับหน้าต่างเวลาget_log_attributes_for_pipeline— ฟิลด์ล็อกที่มีจริงสำหรับไปป์ไลน์ที่กำลังดำเนินการ (การค้นพบตามขอบเขต) แต่ละฟิลด์มีfilter_fieldที่แน่นอนget_drop_rules— กฎการดร็อปล็อกจาก Last9 Control Planeadd_drop_rule— สร้างกฎการดร็อปใหม่เพื่อลดปริมาณล็อกที่ต้นทาง
เทรซ
get_traces— คำค้นหาเทรซไปป์ไลน์ JSON สำหรับการค้นหากว้างและการรวมget_service_traces— เทรซตาม ID เทรซที่แน่นอนหรือชื่อบริการ ใช้เมื่อคุณมี ID เทรซ — เร็วกว่าget_trace_attributes— แคตตาล็อกทั่วโลกของแอตทริบิวต์ในสคีมาเทรซget_trace_attributes_for_pipeline— แอตทริบิวต์ที่มีจริงสำหรับไปป์ไลน์ที่กำลังดำเนินการ (การค้นพบตามขอบเขต) แต่ละรายการมีfilter_fieldที่แน่นอนget_trace_attribute_values— ค่าที่แตกต่างสำหรับแอตทริบิวต์เทรซ เลือกขอบเขตตามไปป์ไลน์ได้get_trace_attribute_deviations— จัดอันดับค่าแอตทริบิวต์ที่แตกต่างระหว่างกลุ่มสแปนสองกลุ่มที่จำกัด (ช้า vs เร็ว, ข้อผิดพลาด vs ไม่มีข้อผิดพลาด หรือสองหน้าต่างเวลา) ความสัมพันธ์ ไม่ใช่สาเหตุget_trace_waterfall— เทรซที่แน่นอนหนึ่งรายการเป็นน้ำตกพ่อแม่/ลูกพร้อมเวลาตัวเองแบบ union ช่วง, สแปนที่ช้าที่สุด และคำเตือนกราฟ
เหตุการณ์การเปลี่ยนแปลงและการแจ้งเตือน
get_change_events— การปรับใช้, การเปลี่ยนแปลงการกำหนดค่า, การย้อนกลับ เชื่อมโยงเหตุการณ์กับสิ่งที่เปลี่ยนแปลงget_alert_groups— กลุ่มการแจ้งเตือน Compass ที่กำหนดค่าพร้อมป้ายกำกับเมตาดาต้า, ทีม, ระดับ และจำนวนกฎ — รวมถึงกลุ่มที่ไม่มีกฎและกลุ่มที่ไม่มีการแจ้งเตือนget_alert_config— การกำหนดค่ากฎการแจ้งเตือน — ค้นหาได้ตามชื่อ, ความรุนแรง, ประเภท, แท็กget_alerts— การแจ้งเตือนที่กำลังทำงานอยู่ในหน้าต่างเวลาget_alert_rule_state— สถานะการแจ้งเตือนในอดีต (1/0) ต่อกฎการแจ้งเตือนในช่วงเวลา จัดกลุ่มตามrule_idกรองได้ตามกลุ่มการแจ้งเตือน, ชื่อกฎ, ตัวกรองป้ายกำกับ และสถานะget_notification_channels— ช่องทางการแจ้งเตือนที่กำหนดค่า (Slack, PagerDuty, อีเมล ฯลฯ)
แดชบอร์ดที่กำหนดเอง
list_dashboards— แดชบอร์ดที่กำหนดเองทั้งหมดใน org ของคุณ: ID, ชื่อ และเมตาดาต้าget_dashboard— คำจำกัดความแดชบอร์ดเต็มรูปแบบตาม ID รวมถึงแผงและคำค้นหาvalidate_dashboard— lint + ดำเนินการ + จัดประเภทแบบอ่านอย่างเดียวสำหรับ id แดชบอร์ดที่บันทึกหรือdashboard_definitionแบบอินไลน์ในช่วง ≤24 ชม. ไม่สร้างหรืออัปเดตแดชบอร์ดcreate_dashboard— สร้างแดชบอร์ดที่กำหนดเองใหม่ทั้งหมดครั้งเดียว (แผง, คำค้นหา, เมตาดาต้า) หลังจากส่งคืน id แล้ว ปรับปรุงด้วยupdate_dashboardupdate_dashboard— ปรับปรุงแดชบอร์ดที่มีอยู่ตาม ID (แทนที่ทั้งหมด; แดชบอร์ดระบบแบบอ่านอย่างเดียวส่งคืนข้อผิดพลาด)delete_dashboard— ลบแดชบอร์ดที่กำหนดเองตาม IDlist_dashboard_snapshots— สแนปช็อตจุดเวลาที่แช่แข็งสำหรับแดชบอร์ด (เมตาดาต้าเท่านั้น)get_dashboard_snapshot— สแนปช็อตแช่แข็งเต็มรูปแบบรวมถึงข้อมูลแผงสำหรับ RCA / มุมมองที่แชร์ได้delete_dashboard_snapshot— ลบสแนปช็อตแช่แข็งตาม ID
การโปรไฟล์ต่อเนื่อง
ต้องเปิดใช้งานการโปรไฟล์ต่อเนื่องสำหรับ org ค้นพบบริการก่อนด้วย get_profile_services, จากนั้นดึง flamegraph หรือฟังก์ชันที่จัดอันดับ
get_profile_services— บริการที่มีข้อมูลการโปรไฟล์ในหน้าต่าง (จัดทำดัชนีก่อนค้นหา)get_flamegraph— ต้นไม้ flamegraph แบบซ้อนสำหรับหนึ่งบริการ (ค่าเริ่มต้นcpu; ยังมีalloc,wall)get_top_functions— การจัดอันดับตัวอย่างตนเองของฟังก์ชันที่ร้อนแรงที่สุดสำหรับหนึ่งบริการget_profile_summary— การคัดแยกภาษาธรรมชาติสั้นๆ ของโปรไฟล์สำหรับหนึ่งบริการ
แดชบอร์ด Grafana
เครื่องมือแบบอ่านอย่างเดียวกับอินสแตนซ์ Grafana ของ org (ผ่านพร็อกซี Grafana ของ Last9) ฟิลด์ข้อมูลประจำตัวจะไม่ถูกส่งคืนให้โมเดล เปิดใช้งานด้วย LAST9_TOOLSETS=grafana (หรือปล่อยชุดเครื่องมือไม่ตั้งค่าเพื่อเครื่องมือทั้งหมด)
grafana_search_dashboards— ค้นหาแดชบอร์ดด้วยข้อความย่อยของชื่อ (แบ่งหน้า;truncated: trueเมื่อถึงขีดจำกัด)grafana_get_dashboard— สรุปแดชบอร์ดโดย uid (แผง, ตัวแปร, เป้าหมาย PromQL);full_json=trueสำหรับ Grafana JSON ดิบgrafana_list_folders— โครงสร้างโฟลเดอร์grafana_list_folder_dashboards— แดชบอร์ดในโฟลเดอร์เดียว (แบ่งหน้า)grafana_list_datasources— รายการแหล่งข้อมูลโดยไม่มีข้อมูลรับรอง
การแก้ไขชื่อแบบคลุมเครือ
did_you_mean— เมื่อเอเจนต์ไม่แน่ใจเกี่ยวกับชื่อเอนทิตี ฟังก์ชันนี้จะส่งคืนรายการที่ใกล้เคียงที่สุดจากแคตตาล็อกของคุณ (บริการ, สภาพแวดล้อม, โฮสต์, ฐานข้อมูล, K8s deployments/namespaces, jobs) สูงสุด 3 ข้อเสนอแนะพร้อมคะแนนความคล้ายคลึง เซิร์ฟเวอร์เรียกใช้ฟังก์ชันนี้โดยอัตโนมัติก่อนเครื่องมือส่วนใหญ่เมื่อการค้นหาชื่อส่งคืนค่าว่าง
โปรไฟล์บริการ
get_service_profile— ลักษณะ telemetry ของบริการจริงก่อนที่คุณจะสอบถาม: สัญญาณใดที่มีอยู่, ภาษาและรันไทม์, สภาพแวดล้อมการปรับใช้, รูปร่างของล็อก และคำแนะนำในการแก้ไขการรับส่งข้อมูลเมื่อมีผล อนุญาตให้เอเจนต์ข้ามเครื่องมือ trace เมื่อบริการไม่มี trace และแยกความรุนแรงจากเนื้อหาล็อกเมื่อSeverityTextว่างเปล่าแทนที่จะกรองและไม่พบอะไรเลย
วิธีการทำงาน
ลิงก์ลึกในทุกการตอบสนอง เครื่องมือทุกตัวส่งคืนฟิลด์ deep_link — URL โดยตรงไปยังแดชบอร์ด Last9 สำหรับคำสั่งค้นหาและช่วงเวลานั้นๆ เอเจนต์สามารถส่งลิงก์ให้คุณ คุณคลิก และคุณก็ไปถึงที่นั่น
ชุดเครื่องมือ โดยค่าเริ่มต้นเซิร์ฟเวอร์จะเปิดเผยเครื่องมือทั้งหมด โฮสต์อัตโนมัติที่ต้องการเพียงการตรวจสอบ (ล็อก/trace/metrics/profiles) สามารถตั้งค่า LAST9_TOOLSETS=investigate (หรือส่ง --toolsets=investigate) เพื่อให้ tools/list มีขนาดเล็กโดยไม่ต้องปิดใช้งานจำนวนมากฝั่งไคลเอ็นต์ ชุดที่มีชื่อ: logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all ชื่อที่ไม่รู้จักจะล้มเหลวอย่างรวดเร็ว ชุด metrics เพียงอย่างเดียว ไม่ รวม list_datasources หรือ did_you_mean — ใช้ investigate (หรือรวมชุดเครื่องมือ) เมื่อคุณต้องการตัวช่วยการค้นพบเหล่านั้น
ทรัพยากรอ้างอิงเครื่องมือ คู่มือ logjson/tracejson/service-logs/metrics แบบยาวเป็นทรัพยากร MCP (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics, last9://reference/investigation) ไม่ใช่ข้อความคำอธิบายเครื่องมือที่เปิดตลอดเวลา กฎการสอบถามที่สำคัญยังคงอยู่ในคำอธิบายเครื่องมือเพื่อให้เอเจนต์ที่ไม่เคยเรียก resources/read ยังได้รับคำแนะนำการสร้างที่ถูกต้อง ค้นพบฟิลด์เฉพาะองค์กรด้วย get_log_attributes / get_log_attributes_for_pipeline (และเทียบเท่า trace) — ฟิลด์เหล่านี้ไม่ได้ถูกแทรกลงในคำอธิบาย
ผลลัพธ์ขนาดใหญ่แบบแบ่งส่วน get_logs และ get_traces จัดการชุดผลลัพธ์ขนาดใหญ่ผ่านการแบ่งส่วนแทนการตัดทิ้ง ขีดจำกัดเริ่มต้นคือ 5000 รายการสำหรับล็อก กำหนดค่าได้ผ่าน LAST9_MAX_GET_LOGS_ENTRIES
การพัฒนา
โหมด HTTP, การทดสอบด้วย curl, การสร้างจากซอร์ส
เรียกใช้ในโหมด HTTP
export LAST9_REFRESH_TOKEN="your_refresh_token"
export LAST9_HTTP=true
export LAST9_PORT=8080
./last9-mcp-server
เซิร์ฟเวอร์เริ่มต้นที่ http://localhost:8080/mcp
ทดสอบด้วย curl
ตัวจัดการ Streamable HTTP ทำงานในโหมด stateless ดังนั้นคำขอใดๆ จะได้รับการบริการอย่างอิสระ การจับมือ initialize และส่วนหัว Mcp-Session-Id เป็นทางเลือก — ไคลเอ็นต์ที่ส่งยังทำงานได้ (ส่วนหัวถูกรับและละเว้น) และไคลเอ็นต์สามารถข้ามไปที่ tools/list / tools/call ได้โดยตรง เครื่องมือทุกตัวเป็นคำสั่งค้นหาแบบ request/response อิสระ เซิร์ฟเวอร์ไม่ส่งการแจ้งเตือนจากเซิร์ฟเวอร์ไปยังไคลเอ็นต์ ดังนั้น GET /mcp (สตรีม SSE) จึงส่งคืน 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
}
}
}'
สร้างจากซอร์ส
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 สำหรับการพัฒนาท้องถิ่น สำหรับการใช้งานจริง จุดสิ้นสุด HTTP ที่โฮสต์ ง่ายกว่า
การอ้างอิงเครื่องมือ
พารามิเตอร์ทั้งหมด, มาตรฐานเวลาป้อนเข้า, และรายละเอียด
การป้อนเวลา
- เวลาสัมบูรณ์ (
start_time_iso/end_time_iso, หรือtime_iso) มีลำดับความสำคัญเหนือlookback_minutes - สำหรับช่วงเวลาสัมพัทธ์: ใช้
lookback_minutes - สำหรับช่วงเวลาสัมบูรณ์: ใช้ RFC3339/ISO8601 —
2026-02-09T15:04:05Z YYYY-MM-DD HH:MM:SSแบบเดิมได้รับการยอมรับเพื่อความเข้ากันได้เท่านั้น
get_exceptions
limit(จำนวนเต็ม, ไม่บังคับ): ข้อยกเว้นสูงสุด ค่าเริ่มต้น: 20lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60start_time_iso/end_time_iso(สตริง, ไม่บังคับ): ช่วงเวลาสัมบูรณ์service_name(สตริง, ไม่บังคับ): กรองตามบริการspan_name(สตริง, ไม่บังคับ): กรองตามชื่อ spanenv(สตริง, ไม่บังคับ): กรองตามสภาพแวดล้อม
get_service_summary
start_time_iso/end_time_iso(สตริง, ไม่บังคับ)env(สตริง, ไม่บังคับ): PromQL regex ค่าเริ่มต้นคือ.*การจับคู่แบบตรงต้องใช้จุดยึด (เช่น^prod$)sort_by(สตริง, ไม่บังคับ):request_count(ค่าเริ่มต้น),throughput_rpm,http_4xx_count,http_5xx_count, หรือgrpc_error_countlimit(จำนวนเต็ม, ไม่บังคับ): แถวที่จัดอันดับสูงสุด ละเว้นหรือ 0 หมายถึง 10 ค่าที่สูงกว่า 100 จะถูกจำกัดที่ 100
get_service_environments
start_time_iso/end_time_iso(สตริง, ไม่บังคับ)
เครื่องมือ APM อื่นๆ ทั้งหมดต้องใช้ค่า
envใช้""หากฟังก์ชันนี้ส่งคืนค่าว่าง
get_service_performance_details
service_name(สตริง, จำเป็น)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60start_time_iso/end_time_iso(สตริง, ไม่บังคับ)env(สตริง, ไม่บังคับ): ค่าเริ่มต้นคือprod
get_service_operations_summary
service_name(สตริง, จำเป็น)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60start_time_iso/end_time_iso(สตริง, ไม่บังคับ)env(สตริง, ไม่บังคับ): ค่าเริ่มต้นคือprod
get_service_dependency_graph
service_name(สตริง, ไม่บังคับ)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60start_time_iso/end_time_iso(สตริง, ไม่บังคับ)env(สตริง, ไม่บังคับ): ค่าเริ่มต้นคือprod
get_apm_service_deviations
service_name(สตริง, ไม่บังคับ): ละเว้นสำหรับขอบเขต fleet; ระบุสำหรับบริการเดียวและความสัมพันธ์การดำเนินการlookback_minutes(จำนวนเต็ม, ไม่บังคับ): หน้าต่างปัจจุบัน ค่าเริ่มต้น: 60start_time_iso/end_time_iso(สตริง, ไม่บังคับ): หน้าต่างปัจจุบันที่ชัดเจนbaseline_start_time_iso/baseline_end_time_iso(สตริง, ไม่บังคับ): เส้นฐานที่ชัดเจน ค่าเริ่มต้นคือหน้าต่างก่อนหน้าที่มีความยาวเท่ากันdatasource(สตริง, ไม่บังคับ): จำกัดการเปรียบเทียบกับแหล่งข้อมูลเดียวenv(สตริง, ไม่บังคับ): ค่าเริ่มต้นคือprodmax_services/max_operations(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น 10, สูงสุด 10 ต่อรายการ
get_databases
env(สตริง, ไม่บังคับ): กรองตามสภาพแวดล้อม ยอมรับนิพจน์ทั่วไป ค่าเริ่มต้น: ทั้งหมดlookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60 หน้าต่างต้องไม่เกิน 7 วันstart_time_iso/end_time_iso(สตริง, ไม่บังคับ)
get_database_slow_queries
db_system(สตริง, ไม่บังคับ): เช่นpostgresql,mysql,mongodb,redishost(สตริง, ไม่บังคับ): โฮสต์ฐานข้อมูล (net_peer_name)service_name(สตริง, ไม่บังคับ): ชื่อบริการที่เรียกenv(สตริง, ไม่บังคับ)min_duration_ms(ทศนิยม, ไม่บังคับ): ระยะเวลาคำสั่งขั้นต่ำในหน่วย mslookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60start_time_iso/end_time_iso(สตริง, ไม่บังคับ)limit(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 20
get_database_queries
db_system(สตริง, ไม่บังคับ)host(สตริง, ไม่บังคับ)service_name(สตริง, ไม่บังคับ)env(สตริง, ไม่บังคับ)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60start_time_iso/end_time_iso(สตริง, ไม่บังคับ)limit(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 20
get_database_server_metrics
db_system(สตริง, จำเป็น): เช่นpostgresql,mysql,mongodb,redis,aerospikehost(สตริง, ไม่บังคับ)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60start_time_iso/end_time_iso(สตริง, ไม่บังคับ)
prometheus_range_query
query(สตริง, จำเป็น): คำสั่ง PromQLstart_time_iso/end_time_iso(สตริง, ไม่บังคับ): ค่าเริ่มต้นคือ 60 นาทีสุดท้ายlookback_minutes(ทศนิยม, ไม่บังคับ): ค่าเริ่มต้น: 60
prometheus_instant_query
query(สตริง, จำเป็น)time_iso(สตริง, ไม่บังคับ): ค่าเริ่มต้นคือตอนนี้lookback_minutes(ทศนิยม, ไม่บังคับ)
prometheus_label_values
match_query(สตริง, ไม่บังคับ): ตัวกรอง PromQLlabel(สตริง, จำเป็น): ชื่อป้ายกำกับstart_time_iso/end_time_iso(สตริง, ไม่บังคับ)
prometheus_labels
match_query(สตริง, ไม่บังคับ): ตัวกรอง PromQLstart_time_iso/end_time_iso(สตริง, ไม่บังคับ)
get_logs
logjson_query(อาร์เรย์, จำเป็น): คำสั่งค้นหา JSON pipelinelookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 5start_time_iso/end_time_iso(สตริง, ไม่บังคับ)limit(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้นเซิร์ฟเวอร์: 5000index(สตริง, ไม่บังคับ):physical_index:<name>หรือrehydration_index:<block_name>
สำหรับรายการบริการตามล็อก ให้สอบถาม physical_index_service_count ก่อน:
sum by (name, service_name, env) (physical_index_service_count{destination="logs"})
ใช้ service_name เป็น ServiceName, env เป็นสภาพแวดล้อมเมื่อมี และ name เป็นชื่อดัชนีทางกายภาพ หาก name="default", ละเว้น index; สำหรับดัชนีทางกายภาพที่ไม่ใช่ค่าเริ่มต้นที่ผู้ใช้เลือก ให้ส่ง index: "physical_index:<name>" หากแบ็กเอนด์ปฏิเสธการกรองดัชนีทางกายภาพที่ชัดเจน ให้ลองใหม่โดยไม่มี index และรายงานว่าการกรองดัชนีทางกายภาพที่ชัดเจนไม่พร้อมใช้งานสำหรับแบ็กเอนด์นั้น
get_service_logs
service_name(สตริง, จำเป็น)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60limit(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 20env(สตริง, ไม่บังคับ)severity_filters(อาร์เรย์, ไม่บังคับ): เช่น["error", "warn"]ตรรกะ ORbody_filters(อาร์เรย์, ไม่บังคับ): เช่น["timeout", "failed"]ตรรกะ ORstart_time_iso/end_time_iso(สตริง, ไม่บังคับ)index(สตริง, ไม่บังคับ)
ประเภทตัวกรองหลายประเภทรวมกับ AND แต่ละอาร์เรย์ใช้ OR ภายใน
ใช้ get_logs สำหรับการนับรวมกว้างก่อน ใช้ get_service_logs หลังจากจำกัดให้แคบลงที่บริการ/สภาพแวดล้อม/ดัชนีและชุดตัวอย่างขนาดเล็กเท่านั้น
get_log_attributes
lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 15start_time_iso/end_time_iso(สตริง, ไม่บังคับ)region(สตริง, ไม่บังคับ)index(สตริง, ไม่บังคับ)
get_log_attributes_for_pipeline
pipeline(อาร์เรย์, จำเป็น): ขั้นตอนตัวกรองก่อนหน้าเพื่อจำกัดขอบเขตการค้นพบ เช่น[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}]lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 15start_time_iso/end_time_iso(สตริง, ไม่บังคับ)region(สตริง, ไม่บังคับ)index(สตริง, ไม่บังคับ)
get_drop_rules
ไม่มีพารามิเตอร์ แสดงกฎการละทิ้งผ่าน GET /otel_settings/drop?region=...
add_drop_rule
name(สตริง, จำเป็น)filters(อาร์เรย์, จำเป็น): แต่ละตัวกรอง:key,value,operator(equals/not_equals),conjunction(and)- คีย์ตัวกรองต้องใช้
attributes["key_name"]หรือresource.attributes["key_name"](จำเป็นโดย Last9 API) - สร้างกฎผ่าน
POST /otel_settings/drop?region=...&cluster_id=...
get_traces
ใช้สำหรับการค้นหากว้างและการรวม สำหรับการค้นหา trace ID ที่แน่นอน ให้ใช้ get_service_traces
tracejson_query(อาร์เรย์, จำเป็น)start_time_iso/end_time_iso(สตริง, ไม่บังคับ)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60limit(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 5000
get_service_traces
ต้องระบุอย่างน้อยหนึ่งใน trace_id หรือ service_name
trace_id(string, ไม่บังคับ): ระยะเวลาย้อนหลังเริ่มต้น: 72 ชั่วโมงservice_name(string, ไม่บังคับ): ระยะเวลาย้อนหลังเริ่มต้น: 60 นาทีlookback_minutes(integer, ไม่บังคับ)start_time_iso/end_time_iso(string, ไม่บังคับ)limit(integer, ไม่บังคับ): ค่าเริ่มต้น: 10env(string, ไม่บังคับ)
get_trace_attributes
lookback_minutes(integer, ไม่บังคับ): ค่าเริ่มต้น: 15start_time_iso/end_time_iso(string, ไม่บังคับ)region(string, ไม่บังคับ)
get_trace_attributes_for_pipeline
pipeline(array, จำเป็น): ขั้นตอนการกรองก่อนหน้าเพื่อกำหนดขอบเขตการค้นพบ เช่น[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}]lookback_minutes(integer, ไม่บังคับ): ค่าเริ่มต้น: 15start_time_iso/end_time_iso(string, ไม่บังคับ)region(string, ไม่บังคับ)
get_trace_attribute_values
tag_name(string, จำเป็น): ชื่อแอตทริบิวต์จากget_trace_attributes(เช่นresource_departmentหรือattributes['http.method'])pipeline(array, ไม่บังคับ): ขั้นตอนการกรองก่อนหน้าเพื่อกำหนดขอบเขตค่า; ละเว้นสำหรับค่าทั่วโลกlookback_minutes(integer, ไม่บังคับ): ค่าเริ่มต้น: 15start_time_iso/end_time_iso(string, ไม่บังคับ): ขอบเขตเวลา RFC3339 ในอดีต; มีลำดับความสำคัญเหนือกว่าlookback_minutesregion(string, ไม่บังคับ)
get_trace_attribute_deviations
comparison_mode(string, จำเป็น):latency,errors, หรือtimeservice_name(string, จำเป็น)environment(string, จำเป็น): ค่าdeployment.environmentที่แน่นอนoperation(string, ไม่บังคับ)filters(array, ไม่บังคับ): เงื่อนไขการกรอง JSON ของ tracecandidate_attributes(array, ไม่บังคับ): สูงสุด 8; ละเว้นสำหรับการค้นพบแบบมีขอบเขตlatency_threshold_ms(number, ไม่บังคับ): จำเป็นสำหรับโหมดlatency; ปฏิเสธสำหรับโหมดอื่นstart_time_iso/end_time_iso(string, ไม่บังคับ)lookback_minutes(integer, ไม่บังคับ): ค่าเริ่มต้น: 15 สูงสุด: 15baseline_start_time_iso/baseline_end_time_iso(string, ไม่บังคับ): จำเป็นสำหรับโหมดtime; ไม่ทับซ้อนกันและมีระยะเวลาเท่ากับหน้าต่างเป้าหมายminimum_cohort_size(integer, ไม่บังคับ): ค่าเริ่มต้น: 100 ขั้นต่ำ: 20minimum_value_support(integer, ไม่บังคับ): ค่าเริ่มต้น: 20 ขั้นต่ำ: 10limit(integer, ไม่บังคับ): ค่าเริ่มต้น: 10 สูงสุด: 10
ต้องเปิดใช้งานความสามารถแบ็กเอนด์ที่เกี่ยวข้อง
get_trace_waterfall
trace_id(string, จำเป็น)environment(string, ไม่บังคับ)start_time_iso/end_time_iso(string, ไม่บังคับ)lookback_minutes(integer, ไม่บังคับ): ค่าเริ่มต้น: 4320 (72 ชั่วโมง)selected_span_id(string, ไม่บังคับ): ส่งคืนแอตทริบิวต์ อีเวนต์ และลิงก์สำหรับ span นั้นเท่านั้นmax_spans(integer, ไม่บังคับ): ค่าเริ่มต้น: 500 สูงสุด: 1000
ส่งคืนซองจดหมาย investigation-evidence/v1; น้ำตกอยู่ภายใต้ data
get_change_events
start_time_iso/end_time_iso(string, ไม่บังคับ)lookback_minutes(integer, ไม่บังคับ): ค่าเริ่มต้น: 60service_name(string, ไม่บังคับ)env(string, ไม่บังคับ)event_name(string, ไม่บังคับ): เรียกโดยไม่มีค่านี้ก่อนเพื่อรับavailable_event_names
get_alert_groups
คลังกลุ่มการแจ้งเตือน Compass ที่กำหนดค่าไว้สำหรับการตรวจสอบ changeboard / ความครอบคลุมของป้ายกำกับ รวมถึงกลุ่มที่มีกฎเป็นศูนย์และกลุ่มที่ไม่มีการแจ้งเตือน ไม่ส่งคืน PromQL
alert_group_name/alert_group_type/data_source_name(string, ไม่บังคับ): การจับคู่สตริงย่อยแบบไม่คำนึงถึงตัวพิมพ์เล็กใหญ่team/tier(string, ไม่บังคับ): การจับคู่แบบไม่คำนึงถึงตัวพิมพ์เล็กใหญ่ที่แน่นอนบนเมตาดาต้าที่กำหนดค่าไว้label_key+label_value(string, ไม่บังคับ): ต้องตั้งค่าด้วยกัน การจับคู่แบบไม่คำนึงถึงตัวพิมพ์เล็กใหญ่ที่แน่นอนบนคู่metadata.labelsหนึ่งคู่ — ทั้งคีย์และค่า
ส่งคืน JSON {"count":N,"groups":[...]} แบบกระชับพร้อมด้วย id, name, type, entity_class, team, tier, metadata.labels และจำนวนกฎ team / labels ที่ว่างเปล่าหมายถึงไม่ได้ตั้งค่า
get_alert_config
search_term(string, ไม่บังคับ): ค้นหาข้อความอิสระในชื่อ กลุ่ม แหล่งข้อมูล แท็กrule_name(string, ไม่บังคับ)severity(string, ไม่บังคับ)rule_type(string, ไม่บังคับ):staticหรือanomalyalert_group_name/alert_group_type/data_source_name(string, ไม่บังคับ)tags(array, ไม่บังคับ): ทั้งหมดต้องตรงกัน (ตรรกะ AND)
get_alerts
time_iso(string, ไม่บังคับ): เวลาการประเมินในรูปแบบ RFC3339window(integer, ไม่บังคับ): ระยะเวลาย้อนหลังเป็นวินาที ค่าเริ่มต้น: 900 ช่วง: 60–86400lookback_minutes(integer, ไม่บังคับ): ช่วง: 1–1440
get_alert_rule_state
start_time(integer, จำเป็น): จุดเริ่มต้น Unix epoch ของช่วง (รวม)end_time(integer, จำเป็น): จุดสิ้นสุด Unix epoch ของช่วง (รวม)step(integer, จำเป็น): ความละเอียดเป็นวินาทีระหว่างตัวอย่าง จำนวนตัวอย่าง((end_time - start_time) / step + 1)ถูกจำกัดสูงสุดที่ 100alert_group_id(string, ไม่บังคับ): กรองตาม ID กลุ่มการแจ้งเตือนrule_name(string, ไม่บังคับ): กรอง regex บนชื่อกฎalert_group_name(string, ไม่บังคับ): กรอง regex บนชื่อกลุ่มการแจ้งเตือนlabel_filters(string, ไม่บังคับ): ตัวกรองป้ายกำกับkey=valueคั่นด้วยเครื่องหมายจุลภาคstate(string, ไม่บังคับ): กรองตามสถานะ (เช่นfiring)
ส่งคืนแผนที่ JSON ของ rule_id -> [{timestamp, is_firing}] ไทม์สแตมป์ที่กฎไม่ปรากฏในการตอบสนองต้นทางจะรายงานเป็น is_firing=0 — ซึ่งหมายความว่า "ไม่พบว่ากำลังแจ้งเตือน" ไม่ใช่สถานะปกติที่ยืนยันแล้ว
get_notification_channels
ไม่มีพารามิเตอร์ ส่งคืนช่องทางการแจ้งเตือนที่กำหนดค่าทั้งหมด (Slack, PagerDuty, อีเมล, webhooks ฯลฯ)
did_you_mean
query(string, จำเป็น): ชื่อที่ต้องการค้นหา — บางส่วน สะกดผิด หรือตัวย่อtype(string, ไม่บังคับ): จำกัดเฉพาะประเภทเอนทิตี:service,environment,host,database,k8s_deployment,k8s_namespace,job
ส่งคืนรายการที่ใกล้เคียงที่สุดสูงสุด 3 รายการพร้อมคะแนนความคล้ายคลึง ใช้ก่อนการเรียกเครื่องมือใดๆ ที่ไม่แน่ใจในชื่อเอนทิตี หากการเรียกก่อนหน้านี้ส่งคืนผลลัพธ์ว่าง ให้ลองใช้ก่อนลองใหม่
get_service_profile
service_name(string, จำเป็น): บริการที่ต้องการสร้างโปรไฟล์เทเลเมทรีdatasource(string, ไม่บังคับ): ชื่อแหล่งข้อมูล ละเว้นสำหรับค่าเริ่มต้น
ส่งคืนสรุปการตรวจสอบสั้นๆ ตามด้วยโปรไฟล์เต็มเป็น JSON ดิบ: การมีสัญญาณ (logs/traces/metrics เป็น present, absent, หรือ unknown), ภาษาและรันไทม์, สภาพแวดล้อมการปรับใช้, ระดับ signal_shape ของล็อก (log_format, severity_set, level_field) และคำแนะนำการแก้ไขการรับข้อมูลเมื่อมี มาจากต้นทางและแคชด้วย TTL ประมาณ 15 นาที
เรียกก่อนการตรวจสอบที่จำกัดเฉพาะบริการใดๆ เพื่อให้การเลือกเครื่องมือตรงกับเทเลเมทรีจริงของบริการ — ข้ามเครื่องมือ trace เมื่อ traces เป็น absent และเมื่อ severity_set เป็น none หรือ partial ให้แยกวิเคราะห์ความรุนแรงจาก level_field ในเนื้อหาล็อกแทนการใช้ severity_filters metrics เป็น unknown เสมอ และ dependencies ไม่ถูกเติมใน v1 เมื่อ logs และ traces เป็น absent ทั้งคู่ ให้ยืนยันชื่อด้วย did_you_mean ก่อนสรุปว่าบริการไม่ได้รับการตรวจสอบ
list_dashboards
ไม่มีพารามิเตอร์ ส่งคืนแดชบอร์ดที่กำหนดเองทั้งหมดในองค์กรเป็นอาร์เรย์ JSON พร้อมด้วย id, name และเมตาดาต้า
get_dashboard
id(string, จำเป็น): UUID ของแดชบอร์ดregion(string, ไม่บังคับ): ภูมิภาคสำหรับการเติมคิวรีแผง ค่าเริ่มต้นเป็นภูมิภาคแหล่งข้อมูลที่กำหนดค่าไว้
validate_dashboard
อ่านอย่างเดียว ไม่สร้างหรืออัปเดตแดชบอร์ด รับอย่างใดอย่างหนึ่งของ dashboard_id หรือ dashboard_definition
dashboard_id(string, ไม่บังคับ): UUID ของแดชบอร์ดที่บันทึกไว้เพื่อตรวจสอบdashboard_definition(object, ไม่บังคับ): เนื้อหาแดชบอร์ดที่ยังไม่ได้บันทึกแบบอินไลน์ (การทดลองรันจริง)start_time_iso/end_time_iso(string, ไม่บังคับ): หน้าต่างการตรวจสอบ (RFC3339) ต้อง ≤ 24 ชั่วโมงregion(string, ไม่บังคับ): ภูมิภาคสำหรับการดำเนินการคิวรีแผง
ส่งคืน dashboard_validation/v1: การจำแนก lint + execute รายแผง (data / no_data / invalid / error) ผลลัพธ์ว่างในวันแรกจำแนกเป็น valid_no_data โดยไม่มีโพรบวินิจฉัย
create_dashboard
เฉพาะใหม่เท่านั้น หลังจากการเรียกนี้ส่งคืน dashboard.id ให้ปรับปรุงด้วย update_dashboard — อย่าสร้างอีกเพื่อเพิ่ม ตัด หรือแก้ไขแผง
dashboard(object, จำเป็น): คำจำกัดความแดชบอร์ดพร้อมด้วยnameและpanels[]แต่ละแผงต้องมีname,version,layout(x,y,w,h),visualization.typeและqueries[]metadata(object, ไม่บังคับ): เมตาดาต้าแดชบอร์ด — ฟิลด์_categoryและ_type(เช่น{"_category":"custom","_type":"metrics"})
update_dashboard
ควรใช้หลังการสร้าง การแทนที่ทั้งหมดโดย id (เนื้อหาเดียวกับการสร้าง)
id(string, จำเป็น): UUID ของแดชบอร์ดที่จะอัปเดตdashboard(object, จำเป็น): เนื้อหาแดชบอร์ดแทนที่ทั้งหมด (รูปแบบเดียวกับการสร้าง)metadata(object, ไม่บังคับ): เมตาดาต้าที่แทนที่ แดชบอร์ดระบบแบบอ่านอย่างเดียวส่งคืนข้อผิดพลาด 403
delete_dashboard
id(string, จำเป็น): UUID ของแดชบอร์ดที่จะลบ แดชบอร์ดระบบแบบอ่านอย่างเดียวไม่สามารถลบได้
list_dashboard_snapshots
dashboard_id(string, จำเป็น): UUID ของแดชบอร์ดที่ต้องการแสดงรายการสแนปช็อต
ส่งคืนเฉพาะเมตาดาต้า (id, name, expires_at ฯลฯ) ใช้ get_dashboard_snapshot สำหรับข้อมูลแผงที่แช่แข็ง
get_dashboard_snapshot
id(string, จำเป็น): UUID ของสแนปช็อต
ส่งคืนสแนปช็อตที่แช่แข็งทั้งหมดรวมถึง dashboard_definition, panel_data, time_range และ variables
delete_dashboard_snapshot
id(string, จำเป็น): UUID ของสแนปช็อตที่จะลบ
get_profile_services
lookback_minutes/start_time_iso/end_time_iso(ไม่บังคับ): หน้าต่าง; ควรใช้ระยะเวลาย้อนหลังหรือขอบเขต ISO ที่ชัดเจน (ค่าเริ่มต้น 60 นาที)region(string, ไม่บังคับ): การแทนที่ภูมิภาค
ส่งคืนบริการที่มีข้อมูลโปรไฟล์ในหน้าต่าง เรียกก่อน get_flamegraph / get_top_functions / get_profile_summary
get_flamegraph
service(string, จำเป็น): ชื่อบริการจากget_profile_servicesprofile_type(string, ไม่บังคับ):cpu(ค่าเริ่มต้น),alloc, หรือwallปักหมุดประเภทเมื่อเปรียบเทียบหน้าต่างenv/cluster/namespace/runtime(string, ไม่บังคับ): ตัวกรองขอบเขตlimit(number, ไม่บังคับ): แถวสแตกที่รวมสูงสุด (ค่าเริ่มต้น 1000, สูงสุด 10000)lookback_minutes/start_time_iso/end_time_iso/region(ไม่บังคับ)
ส่งคืนโครงสร้างต้นไม้ flamegraph แบบซ้อน (name / value / self / children) truncated: true หมายถึงถึงขีดจำกัดแถวของ API
get_top_functions
ตัวกรองเดียวกันกับ get_flamegraph ส่งคืนการจัดอันดับตัวอย่างตนเองของฟังก์ชันที่ร้อนแรงที่สุด อาจถูกตัดทอน; ตรวจสอบ truncated
get_profile_summary
ตัวกรองเดียวกันกับ get_flamegraph ส่งคืนการคัดแยกภาษาธรรมชาติสั้นๆ ของโปรไฟล์สำหรับบริการ
grafana_search_dashboards
query(string, ไม่บังคับ): สตริงย่อยของชื่อ รายการว่างแสดงกว้างๆ (ขึ้นอยู่กับขีดจำกัด 5,000 แถว)
ส่งคืน {"dashboards":[…], "truncated":bool} พร้อมด้วย uid, title, uri, url, type, tags ใช้ uid กับ grafana_get_dashboard
grafana_get_dashboard
uid(string, จำเป็น): uid ของแดชบอร์ด Grafanafull_json(boolean, ไม่บังคับ): เมื่อเป็น true ให้ส่งคืน JSON Grafana ดิบแทนสรุปที่กรองแล้ว Default summary: version, tags, templating variables, and each panel's type/datasource/gridPos/promQL targets. Unknown plugin panel types appear inunsupportedPanelTypes.
grafana_list_folders
ไม่มีพารามิเตอร์ คืนค่าโครงสร้างโฟลเดอร์
grafana_list_folder_dashboards
folder_uid(string, required): Grafana folder uid.
คืนค่า {"dashboards":[…], "truncated":bool} สำหรับแดชบอร์ดในโฟลเดอร์นั้น (แบ่งหน้าได้สูงสุด 5,000 รายการ)
grafana_list_datasources
ไม่มีพารามิเตอร์ คืนค่าการแสดงผลที่ปลอดภัยของ datasources (ไม่มีฟิลด์ข้อมูลรับรอง)
การทดสอบ
ดู TESTING.md สำหรับการตั้งค่าและคำแนะนำการทดสอบแบบบูรณาการ
