Last9
ทางการนำบริบทการผลิตแบบเรียลไทม์—ล็อก เมตริก และเทรซ—มาสู่สภาพแวดล้อมในเครื่องของคุณได้อย่างราบรื่น เพื่อแก้ไขโค้ดอัตโนมัติได้เร็วขึ้น
คุณทำอะไรได้บ้างด้วย Last9 MCP?
ขอให้ผู้ช่วยของคุณตรวจสอบเหตุการณ์ในการผลิตโดยใช้ล็อกสด ร่องรอย และเมตริกจาก Last9
- จัดอันดับความสมบูรณ์ของบริการ — ใช้
get_service_summaryเพื่อดูจำนวนคำขอ ปริมาณงาน และข้อผิดพลาด 4xx/5xx ทั่วทั้งระบบของคุณ - ค้นหาคิวรีฐานข้อมูลที่ช้า — ใช้
get_database_slow_queriesเพื่อดึงรายการคิวรีที่ช้าที่สุดจริงพร้อม trace ID เพื่อเจาะลึก - ดึงล็อกบริการ — ใช้
get_service_logsเพื่อดึงบรรทัดล็อกดิบที่กรองตามระดับความรุนแรงและเนื้อหาของ body - ติดตามคำขอเดียว — ใช้
get_trace_waterfallเพื่อดู waterfall แบบ parent/child สำหรับ trace ID ที่แน่นอน - ตรวจสอบสถานะการแจ้งเตือน — ใช้
get_alert_rule_stateเพื่อดูประวัติการ trigger ตามกฎการแจ้งเตือนแต่ละรายการในช่วงเวลาที่กำหนด - จัดการแดชบอร์ด — ใช้
create_dashboardเพื่อสร้างแดชบอร์ดที่กำหนดเองด้วยแผงและคิวรี
เอกสาร
Last9 MCP Server

เอเจนต์ AI ของคุณไม่รู้ว่าอะไรผิดปกติในระบบ production แต่สิ่งนี้จะแก้ปัญหานั้น
Last9 MCP Server เชื่อมต่อ Claude, Cursor, Windsurf และผู้ช่วย AI อื่น ๆ ที่รองรับ MCP เข้ากับข้อมูล Observability ใน production ของคุณโดยตรง ไม่ว่าจะเป็น logs, metrics, traces, exceptions, database queries, alerts และ deployments เอเจนต์จะหยุดคาดเดาและเริ่มอ่านสัญญาณจริงแทน
เริ่มต้นใน 30 วินาที (โฮสต์ให้แล้ว)
ไม่ต้องติดตั้ง binary ไม่ต้องจัดการ tokens แค่ 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
Settings > MCP > Add New MCP Server:
{
"mcpServers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
คลิก Connect และทำ OAuth ให้เสร็จ
VS Code
ต้องใช้ v1.99+ เปิด Command Palette → MCP: Add Server, วาง URL, ยืนยันตัวตน
หรือโดยตรงใน settings.json:
{
"mcp": {
"servers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
}
Windsurf
Settings > Cascade > Open MCP Marketplace > ไอคอนรูปเฟือง (mcp_config.json):
{
"mcpServers": {
"last9": {
"serverUrl": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Claude Web/Desktop
Settings > Connectors > Add custom connector. ตั้งชื่อว่า last9, วาง URL, ยืนยันตัวตน
ต้องมีสิทธิ์ admin ในองค์กร Claude ของคุณ
Self-Hosted (STDIO)
ใช้เมื่อ MCP client ของคุณไม่รองรับ HTTP transport หรือเมื่อคุณต้องการให้เซิร์ฟเวอร์รันในเครื่อง
ติดตั้ง
Homebrew:
brew install last9/tap/last9-mcp
NPM:
npm install -g @last9/mcp-server@latest
# or directly:
npx -y @last9/mcp-server@latest
Binary releases (Windows / manual):
ดาวน์โหลดจาก GitHub Releases:
| Platform | Archive |
|---|---|
| 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 |
รับ Refresh Token
มีเฉพาะ admin ที่สามารถสร้าง tokens ได้
- ไปที่ API Access
- คลิก Generate Token ด้วยสิทธิ์เขียน (Write)
- คัดลอก
การกำหนดค่า Client
Homebrew:
{
"mcpServers": {
"last9": {
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
NPM:
{
"mcpServers": {
"last9": {
"command": "npx",
"args": ["-y", "@last9/mcp-server@latest"],
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
จะวางโค้ดนี้ที่ไหน:
| Client | ตำแหน่ง |
|---|---|
| Claude Web/Desktop | Settings > Developer > Edit Config (claude_desktop_config.json) |
| Cursor | Settings > Cursor Settings > MCP > Add New Global MCP Server |
| Windsurf | Settings > Cascade > MCP Marketplace > ไอคอนรูปเฟือง (mcp_config.json) |
| VS Code | ครอบด้วย { "mcp": { "servers": { ... } } } ใน settings.json — รายละเอียด |
VS Code STDIO config
{
"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 — ไม่ต้องจัดการพาธ
ตัวแปรสภาพแวดล้อม
| Variable | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|
LAST9_REFRESH_TOKEN | (จำเป็น) | Refresh token จาก API Access |
LAST9_DATASOURCE | ค่าเริ่มต้นของ org | ชื่อ datasource/cluster — มีประโยชน์เมื่อคุณมี Levitate clusters หลายตัว |
LAST9_API_HOST | app.last9.io | ใช้แทนค่า API host |
LAST9_TOOLSETS | เครื่องมือทั้งหมด | ชุดเครื่องมือที่เปิดใช้งาน คั่นด้วยเครื่องหมายจุลภาค (logs, traces, metrics, alerts, dashboards, investigate, all). ชื่ออื่น: LAST9_MCP_TOOLSETS |
LAST9_MAX_GET_LOGS_ENTRIES | 5000 | จำนวนรายการสูงสุดสำหรับคำขอที่แบ่งเป็นชิ้น get_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 collector (เฉพาะเมื่อเปิดใช้งาน telemetry) |
OTEL_EXPORTER_OTLP_HEADERS | — | ส่วนหัวการตรวจสอบสิทธิ์ OTLP (เฉพาะเมื่อเปิดใช้งาน telemetry) |
สิ่งที่ทำได้
สุขภาพบริการ (Service Health)
get_service_summary— แถวของ fleet(service, env)ที่จัดอันดับ: interval request_count, throughput_rpm, HTTP 4xx/5xx counts และ gRPC error countsget_service_environments— สภาพแวดล้อมที่พร้อมใช้งานสำหรับบริการของคุณ รันสิ่งนี้ก่อน — เครื่องมือ APM อื่น ๆ ต้องใช้envจากที่นี่get_service_performance_details— รายละเอียดทั้งหมด: throughput, error rate, p50/p90/p95/avg/max, apdex, availabilityget_service_operations_summary— การดำเนินการที่จัดกลุ่มตาม HTTP endpoints, การเรียก DB, การส่งข้อความ, HTTP clientsget_service_dependency_graph— แผนผังการขึ้นต่อกันพร้อม throughput, latency และ error rates สำหรับ upstream/downstream/infraget_apm_service_deviations— เปรียบเทียบหน้าต่างปัจจุบันกับเส้นฐานระยะเวลาเท่ากัน: regressions/improvements, การกระทบยอด Apdex และผลลัพธ์สุดท้าย (fleet หรือบริการเดียว)get_exceptions— ข้อยกเว้นฝั่งเซิร์ฟเวอร์พร้อมตัวกรองบริการและสแปน
การตรวจสอบฐานข้อมูล
เครื่องมือสี่ตัวที่มองตรงไปที่ประสิทธิภาพฐานข้อมูลของคุณ ซึ่งได้จาก OpenTelemetry trace spans ไม่ต้องติดตั้งเครื่องมือเพิ่มเติมหากคุณใช้ OTel อยู่แล้ว
get_databases— ค้นพบฐานข้อมูลทั้งหมดในโครงสร้างพื้นฐานของคุณ: ประเภท DB, host, throughput (queries/min), p95 latency, error rate, จำนวนบริการที่ขึ้นต่อกันget_database_slow_queries— การเรียก query ที่ช้าที่สุดจริง โดยเรียงตามระยะเวลา พร้อม trace IDs สำหรับเจาะลึกเข้าไปใน trace เต็มget_database_queries— รูปแบบและผลรวมของ query: ความถี่ที่ query ทำงาน, ระยะเวลาเฉลี่ย/p95, error rateget_database_server_metrics— เมตริกฝั่งเซิร์ฟเวอร์จากโฮสต์ DB เอง (CPU, การเชื่อมต่อ, buffer hit rates — ขึ้นอยู่กับระบบ DB ของคุณ)
รองรับ PostgreSQL, MySQL, MongoDB, Redis, Aerospike และสิ่งอื่นใดที่ OTel ติดตามด้วยแอตทริบิวต์ db_system
Prometheus / PromQL
prometheus_range_query— การสอบถามช่วง PromQL เหนือเมตริกใด ๆprometheus_instant_query— การสอบถามแบบทันที; ใช้ฟังก์ชัน rollup เช่นavg_over_time,sum_over_timeprometheus_label_values— ค่าป้ายกำกับสำหรับซีรีส์ที่กำหนดprometheus_labels— ป้ายกำกับทั้งหมดที่มีสำหรับซีรีส์
ชี้ไปที่ datasource/cluster ที่แตกต่างจากค่าเริ่มต้นโดยตั้งค่า LAST9_DATASOURCE.
Logs
get_logs— การสอบถาม log แบบ JSON pipeline เต็มรูปแบบ (การรวม, ตัวกรอง, การแยกฟิลด์)get_service_logs— บรรทัด log ดิบสำหรับบริการ กรองได้ตามระดับความรุนแรงและเนื้อหาของ bodyget_log_attributes— แคตตาล็อกทั่วโลกของแอตทริบิวต์ใน schema ของ log สำหรับช่วงเวลาget_log_attributes_for_pipeline— ฟิลด์ log ที่มีอยู่จริงสำหรับ pipeline ที่กำลังดำเนินการ (การค้นพบแบบขอบเขต) แต่ละฟิลด์มีfilter_fieldที่แน่นอนget_drop_rules— กฎการดรอป log จาก Last9 Control Planeadd_drop_rule— สร้างกฎการดรอปใหม่เพื่อลดปริมาณ log ตั้งแต่ต้นทาง
Traces
get_traces— การสอบถาม trace แบบ JSON pipeline สำหรับการค้นหากว้างและการรวมget_service_traces— Traces ตาม trace ID หรือชื่อบริการที่แน่นอน ใช้เมื่อคุณมี trace ID — เร็วกว่าget_trace_attributes— แคตตาล็อกทั่วโลกของแอตทริบิวต์ใน schema ของ traceget_trace_attributes_for_pipeline— แอตทริบิวต์ที่มีอยู่จริงสำหรับ pipeline ที่กำลังดำเนินการ (การค้นพบแบบขอบเขต) แต่ละรายการมีfilter_fieldที่แน่นอนget_trace_attribute_values— ค่าที่แตกต่างสำหรับแอตทริบิวต์ trace ไม่บังคับให้กำหนดขอบเขตตาม pipelineget_trace_attribute_deviations— จัดอันดับค่าแอตทริบิวต์ที่ต่างกันระหว่างกลุ่มสแปนสองกลุ่มที่จำกัด (ช้า vs เร็ว, error vs non-error หรือสองช่วงเวลา) เป็นสหสัมพันธ์ ไม่ใช่สาเหตุget_trace_waterfall— trace เดียวที่แน่นอนเป็นน้ำตก parent/child พร้อม interval-union self-time, สแปนที่ช้าที่สุด และคำเตือนจากกราฟ
เหตุการณ์การเปลี่ยนแปลงและการแจ้งเตือน
get_change_events— การ deploy, การเปลี่ยนแปลงการกำหนดค่า, การย้อนกลับ เชื่อมโยงเหตุการณ์กับสิ่งที่เปลี่ยนแปลงget_alert_config— การกำหนดค่ากฎการแจ้งเตือน — ค้นหาตามชื่อ, ความรุนแรง, ประเภท, แท็กget_alerts— การแจ้งเตือนที่กำลังทำงานอยู่ในช่วงเวลาget_alert_rule_state— สถานะการทำงานในอดีต (1/0) ต่อกฎการแจ้งเตือนตลอดช่วงเวลา จัดกลุ่มตามrule_id. กรองได้ตามกลุ่มการแจ้งเตือน, ชื่อกฎ, ตัวกรองป้ายกำกับ และสถานะget_notification_channels— ช่องทางการแจ้งเตือนที่กำหนดค่าไว้ (Slack, PagerDuty, email ฯลฯ)
แดชบอร์ดที่กำหนดเอง
list_dashboards— แดชบอร์ดที่กำหนดเองทั้งหมดในองค์กรของคุณ: IDs, ชื่อ และ metadataget_dashboard— คำจำกัดความแดชบอร์ดเต็มรูปแบบตาม ID รวมถึงแผงและการสอบถามcreate_dashboard— สร้างแดชบอร์ดที่กำหนดเองใหม่พร้อมแผง การสอบถาม และ metadataupdate_dashboard— อัปเดตแดชบอร์ดที่มีอยู่ตาม ID (แดชบอร์ดระบบแบบอ่านอย่างเดียวจะคืนค่าข้อผิดพลาด)delete_dashboard— ลบแดชบอร์ดที่กำหนดเองตาม IDlist_dashboard_snapshots— สแนปช็อตแบบจุดเวลาที่คงที่สำหรับแดชบอร์ด (เฉพาะ metadata)get_dashboard_snapshot— สแนปช็อตเต็มรูปแบบรวมถึงข้อมูลแผงสำหรับ RCA / มุมมองที่แชร์ได้delete_dashboard_snapshot— ลบสแนปช็อตที่คงที่ตาม ID
การแก้ไขชื่อแบบคลุมเครือ
did_you_mean— เมื่อเอเจนต์ไม่แน่ใจเกี่ยวกับชื่อเอนทิตี เครื่องมือนี้จะคืนการจับคู่ที่ใกล้เคียงที่สุดจากแคตตาล็อกของคุณ (บริการ, สภาพแวดล้อม, โฮสต์, ฐานข้อมูล, K8s deployments/namespaces, jobs) สูงสุด 3 ข้อเสนอแนะพร้อมคะแนนความคล้ายคลึง เซิร์ฟเวอร์เรียกสิ่งนี้โดยอัตโนมัติก่อนเครื่องมือส่วนใหญ่เมื่อการค้นหาชื่อคืนค่าว่าง
วิธีการทำงาน
Deep links ในทุกคำตอบ ทุกเครื่องมือคืนฟิลด์ deep_link — URL โดยตรงไปยังแดชบอร์ด Last9 สำหรับการสอบถามและช่วงเวลานั้น ๆ เอเจนต์สามารถส่งลิงก์ให้คุณ คุณคลิก และไปถึงที่นั่น
Toolsets โดยค่าเริ่มต้นเซิร์ฟเวอร์จะแสดงเครื่องมือทั้งหมด โฮสต์อัตโนมัติที่ต้องการเฉพาะการตรวจสอบ (logs/traces/metrics) สามารถตั้งค่า LAST9_TOOLSETS=investigate (หรือส่ง --toolsets=investigate) เพื่อให้ tools/list เล็กโดยไม่ต้องปิดใช้งานจำนวนมากฝั่ง client ชุดแพ็กที่ตั้งชื่อ: logs, traces, metrics, alerts, dashboards, investigate, all. ชื่อที่ไม่รู้จักจะล้มเหลวทันที แพ็ก metrics เพียงอย่างเดียว ไม่ รวม list_datasources หรือ did_you_mean — ใช้ investigate (หรือรวม toolsets) เมื่อคุณต้องการตัวช่วยการค้นพบเหล่านั้น
ทรัพยากรอ้างอิงเครื่องมือ คู่มือ logjson/tracejson/service-logs/metrics ยาวเป็นทรัพยากร MCP (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics) ไม่ใช่ข้อความคำอธิบายเครื่องมือที่เปิดตลอดเวลา กฎการสอบถามที่สำคัญยังคงอยู่ในคำอธิบายเครื่องมือเพื่อให้เอเจนต์ที่ไม่เคยเรียก resources/read ยังได้รับแนวทางสร้างที่ถูกต้อง ค้นพบฟิลด์เฉพาะของ org ด้วย get_log_attributes / get_log_attributes_for_pipeline (และเทียบเท่า trace) — ไม่ถูกฉีดเข้าไปในคำอธิบาย
การแบ่งผลลัพธ์ขนาดใหญ่เป็นชิ้น get_logs และ get_traces จัดการชุดผลลัพธ์ขนาดใหญ่ผ่านการแบ่งเป็นชิ้นแทนการตัดทิ้ง ค่าเริ่มต้นคือ 5000 รายการสำหรับ logs; กำหนดค่าได้ผ่าน 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
ตัวจัดการ HTTP แบบสตรีมทำงานในโหมด ไร้สถานะ (stateless) ดังนั้นคำขอแต่ละรายการจะถูกให้บริการอย่างอิสระ การจับมือแบบ initialize และส่วนหัว Mcp-Session-Id เป็นตัวเลือก — ไคลเอนต์ที่ส่งมาจะยังทำงานได้ (ส่วนหัวถูกรับและเพิกเฉย) และไคลเอนต์สามารถข้ามไปที่ tools/list / tools/call ได้โดยตรง ทุกเครื่องมือเป็นการสืบค้นแบบคำขอ/ตอบกลับอิสระ เซิร์ฟเวอร์ไม่ส่งการแจ้งเตือนจากเซิร์ฟเวอร์ไปยังไคลเอนต์ ดังนั้น 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(สตริง, ไม่บังคับ): กรองตามชื่อสแปนenv(สตริง, ไม่บังคับ): กรองตามสภาพแวดล้อม
get_service_summary
start_time_iso/end_time_iso(สตริง, ไม่บังคับ)env(สตริง, ไม่บังคับ): regex ของ PromQL ค่าเริ่มต้นคือ.*การจับคู่แบบตรงทั้งหมดต้องใช้เครื่องหมายยึด (เช่น^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(สตริง, ไม่บังคับ): ละเว้นสำหรับขอบเขตฝูงบริการ ให้ระบุสำหรับบริการเดียวและความสัมพันธ์ของการดำเนินการ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(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60start_time_iso/end_time_iso(สตริง, ไม่บังคับ)
get_database_slow_queries
db_system(สตริง, ไม่บังคับ): เช่นpostgresql,mysql,mongodb,redishost(สตริง, ไม่บังคับ): โฮสต์ฐานข้อมูล (net_peer_name)service_name(สตริง, ไม่บังคับ): ชื่อบริการที่เรียกenv(สตริง, ไม่บังคับ)min_duration_ms(ทศนิยม, ไม่บังคับ): ระยะเวลาคิวรีขั้นต่ำในหน่วยมิลลิวินาทีlookback_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(อาร์เรย์, จำเป็น): คิวรีไปป์ไลน์ JSONlookback_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
ใช้สำหรับการค้นหาและการรวมแบบกว้าง สำหรับการค้นหา 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(สตริง, ไม่บังคับ): ระยะเวลามองย้อนกลับค่าเริ่มต้น: 72 ชั่วโมงservice_name(สตริง, ไม่บังคับ): ระยะเวลามองย้อนกลับค่าเริ่มต้น: 60 นาทีlookback_minutes(จำนวนเต็ม, ไม่บังคับ)start_time_iso/end_time_iso(สตริง, ไม่บังคับ)limit(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 10env(สตริง, ไม่บังคับ)
get_trace_attributes
lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 15start_time_iso/end_time_iso(สตริง, ไม่บังคับ)region(สตริง, ไม่บังคับ)
get_trace_attributes_for_pipeline
pipeline(อาร์เรย์, จำเป็น): ขั้นตอนตัวกรองก่อนหน้าเพื่อจำกัดขอบเขตการค้นพบ เช่น[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}]lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 15start_time_iso/end_time_iso(สตริง, ไม่บังคับ)region(สตริง, ไม่บังคับ)
get_trace_attribute_values
tag_name(สตริง, จำเป็น): ชื่อแอตทริบิวต์จากget_trace_attributes(เช่นresource_departmentหรือattributes['http.method'])pipeline(อาร์เรย์, ไม่บังคับ): ขั้นตอนตัวกรองก่อนหน้าเพื่อจำกัดขอบเขตค่า; ละเว้นสำหรับค่าระดับโลกregion(สตริง, ไม่บังคับ)
get_trace_attribute_deviations
comparison_mode(สตริง, จำเป็น):latency,errorsหรือtimeservice_name(สตริง, จำเป็น)environment(สตริง, จำเป็น): ค่าdeployment.environmentที่ตรงทั้งหมดoperation(สตริง, ไม่บังคับ)filters(อาร์เรย์, ไม่บังคับ): เงื่อนไขตัวกรอง JSON ของเทรซcandidate_attributes(อาร์เรย์, ไม่บังคับ): สูงสุด 8; ละเว้นสำหรับการค้นพบแบบมีขอบเขตlatency_threshold_ms(ตัวเลข, ไม่บังคับ): จำเป็นสำหรับโหมดlatency; ถูกปฏิเสธสำหรับโหมดอื่นstart_time_iso/end_time_iso(สตริง, ไม่บังคับ)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 15 สูงสุด: 15baseline_start_time_iso/baseline_end_time_iso(สตริง, ไม่บังคับ): จำเป็นสำหรับโหมดtime; ไม่ทับซ้อนกันและมีความยาวเท่ากับหน้าต่างเป้าหมายminimum_cohort_size(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 100 ขั้นต่ำ: 20minimum_value_support(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 20 ขั้นต่ำ: 10limit(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 10 สูงสุด: 10
ต้องเปิดใช้งานความสามารถของแบ็กเอนด์คู่หู
get_trace_waterfall
trace_id(สตริง, จำเป็น)environment(สตริง, ไม่บังคับ)start_time_iso/end_time_iso(สตริง, ไม่บังคับ)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 4320 (72 ชั่วโมง)selected_span_id(สตริง, ไม่บังคับ): คืนค่าแอตทริบิวต์ เหตุการณ์ และลิงก์สำหรับสแปนนั้นเท่านั้นmax_spans(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 500 สูงสุด: 1000
คืนค่าซอง investigation-evidence/v1; น้ำตกอยู่ภายใต้ data
get_change_events
start_time_iso/end_time_iso(สตริง, ไม่บังคับ)lookback_minutes(จำนวนเต็ม, ไม่บังคับ): ค่าเริ่มต้น: 60service_name(สตริง, ไม่บังคับ)env(สตริง, ไม่บังคับ)event_name(สตริง, ไม่บังคับ): เรียกโดยไม่ระบุค่านี้ก่อนเพื่อรับavailable_event_names
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 รายการพร้อมคะแนนความคล้ายคลึง ใช้ก่อนการเรียกเครื่องมือใดๆ เมื่อชื่อเอนทิตีไม่แน่นอน หากการเรียกก่อนหน้านี้คืนค่าผลลัพธ์ว่าง ให้ลองใช้ก่อนลองใหม่
list_dashboards
ไม่มีพารามิเตอร์ คืนค่าแดชบอร์ดที่กำหนดเองทั้งหมดในองค์กรเป็นอาร์เรย์ JSON พร้อม id, name และข้อมูลเมตา
get_dashboard
id(string, จำเป็น): UUID ของแดชบอร์ดregion(string, ไม่บังคับ): ภูมิภาคสำหรับการเติมข้อมูลคำสั่งค้นหาของแผง ค่าเริ่มต้นคือภูมิภาคแหล่งข้อมูลที่กำหนดค่าไว้
create_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(string, จำเป็น): UUID ของแดชบอร์ดที่จะอัปเดตdashboard(object, จำเป็น): เนื้อหาแดชบอร์ดทดแทนแบบเต็ม (รูปแบบเดียวกับ create)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 ของสแนปช็อตที่จะลบ
การทดสอบ
ดู TESTING.md สำหรับการตั้งค่าและคำแนะนำการทดสอบการรวมระบบ
