Last9
chính thứcMang bối cảnh sản xuất thời gian thực—log, chỉ số và dấu vết—vào môi trường cục bộ của bạn một cách liền mạch để tự động sửa mã nhanh hơn.
Bạn có thể làm gì với Last9 MCP?
-
Điều tra tình trạng sức khỏe dịch vụ — Yêu cầu tóm tắt tổng quan về đội ngũ theo thứ hạng về số lượng yêu cầu, thông lượng và tỷ lệ lỗi thông qua
get_service_summary. -
Kéo nhật ký dịch vụ thô — Truy xuất các dòng nhật ký đã lọc theo mức độ nghiêm trọng hoặc nội dung thân cho một dịch vụ cụ thể bằng
get_service_logs. -
Theo dõi hiệu suất cơ sở dữ liệu — Khám phá các cơ sở dữ liệu, truy vấn chậm và mẫu truy vấn với
get_databasesvà các công cụ liên quan. -
Chạy truy vấn PromQL — Thực thi truy vấn phạm vi hoặc tức thời trên bất kỳ số liệu nào bằng
prometheus_range_queryhoặcprometheus_instant_query. -
Tương quan thay đổi với sự cố — Tìm nạp các sự kiện triển khai và thay đổi cấu hình để hiểu điều gì đã làm thay đổi hành vi sản xuất qua
get_change_events. -
Quản lý bảng điều khiển tùy chỉnh — Liệt kê, tạo, cập nhật hoặc xác thực bảng điều khiển theo chương trình với
list_dashboardsvàcreate_dashboard.
Tài liệu
Máy chủ MCP Last9

Tác tử AI của bạn không biết điều gì đang hỏng trong môi trường production. Công cụ này khắc phục điều đó.
Máy chủ MCP Last9 kết nối Claude, Cursor, Windsurf và bất kỳ trợ lý AI nào hỗ trợ MCP trực tiếp với dữ liệu quan sát production của bạn — log, metrics, traces, exceptions, truy vấn cơ sở dữ liệu, cảnh báo và triển khai. Tác tử không còn đoán mò mà bắt đầu đọc tín hiệu thực tế.
Bắt đầu trong 30 giây (Hosted)
Không cần cài đặt binary. Không cần quản lý token. Một URL, OAuth trong trình duyệt, xong.
Tìm org slug của bạn trong 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
Nhập /mcp, chọn last9, xác thực. Vậy là xong.
Cursor
Settings > MCP > Add New MCP Server:
{
"mcpServers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Nhấp Connect, hoàn tất OAuth.
VS Code
Yêu cầu v1.99+. Mở Command Palette → MCP: Add Server, dán URL, xác thực.
Hoặc trực tiếp trong settings.json:
{
"mcp": {
"servers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
}
Windsurf
Settings > Cascade > Open MCP Marketplace > biểu tượng bánh răng (mcp_config.json):
{
"mcpServers": {
"last9": {
"serverUrl": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Claude Web/Desktop
Settings > Connectors > Add custom connector. Đặt tên là last9, dán URL, xác thực.
Yêu cầu quyền admin cho tổ chức Claude của bạn.
Tự lưu trữ (STDIO)
Sử dụng khi máy khách MCP của bạn không hỗ trợ giao thức HTTP hoặc khi bạn cần máy chủ chạy cục bộ.
Cài đặt
Homebrew:
brew install last9/tap/last9-mcp
NPM:
npm install -g @last9/mcp-server@latest
# or directly:
npx -y @last9/mcp-server@latest
Bản phát hành binary (Windows / thủ công):
Tải xuống từ GitHub Releases:
| Nền tảng | Lưu trữ |
|---|---|
| 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 |
Lấy Refresh Token
Chỉ admin mới có thể tạo token.
- Đi tới API Access
- Nhấp Generate Token với quyền Write
- Sao chép nó
Cấu hình máy khách
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>"
}
}
}
}
Nơi dán cấu hình này:
| Máy khách | Vị trí |
|---|---|
| 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 > biểu tượng bánh răng (mcp_config.json) |
| VS Code | Bọc trong { "mcp": { "servers": { ... } } } trong settings.json — chi tiết |
Cấu hình STDIO VS Code
{
"mcp": {
"servers": {
"last9": {
"type": "stdio",
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
}
Đối với NPM: sử dụng "command": "npx" và thêm "args": ["-y", "@last9/mcp-server@latest"].
Windows
Sau khi tải xuống từ GitHub Releases, giải nén và trỏ đến đường dẫn đầy đủ:
{
"mcpServers": {
"last9": {
"command": "C:\\Users\\<user>\\AppData\\Local\\Programs\\last9-mcp-server.exe",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
Đường dẫn NPM dễ hơn trên Windows — không cần quản lý đường dẫn.
Biến môi trường
| Biến | Mặc định | Mô tả |
|---|---|---|
LAST9_REFRESH_TOKEN | (bắt buộc) | Refresh token từ API Access |
LAST9_DATASOURCE | mặc định org | Tên datasource/cluster — hữu ích khi bạn có nhiều cluster Levitate |
LAST9_API_HOST | app.last9.io | Ghi đè máy chủ API |
LAST9_TOOLSETS | tất cả công cụ | Các bộ công cụ phân tách bằng dấu phẩy để hiển thị (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). Bí danh: LAST9_MCP_TOOLSETS |
LAST9_MAX_GET_LOGS_ENTRIES | 5000 | Số mục tối đa cho các yêu cầu get_logs được phân khối |
LAST9_USE_LOG_SEARCH_API | false | Đặt true để trả lời get_logs và get_service_logs bằng một lệnh gọi tìm kiếm phía máy chủ thay vì phân khối phía máy khách |
LAST9_DEBUG_CHUNKING | false | Đặt true để ghi chi tiết lập kế hoạch phân khối cho get_logs, get_service_logs, get_traces |
LAST9_DISABLE_TELEMETRY | true | Đặt false để bật theo dõi OTel nội bộ |
OTEL_SDK_DISABLED | — | Biến môi trường OTel tiêu chuẩn. Ghi đè LAST9_DISABLE_TELEMETRY |
OTEL_EXPORTER_OTLP_ENDPOINT | — | Điểm cuối bộ thu OTLP (chỉ khi telemetry được bật) |
OTEL_EXPORTER_OTLP_HEADERS | — | Tiêu đề xác thực OTLP (chỉ khi telemetry được bật) |
Những gì nó có thể làm
Sức khỏe dịch vụ
get_service_summary— Các hàng(service, env)của nhóm dịch vụ được xếp hạng: request_count theo khoảng thời gian, throughput_rpm, số lượng HTTP 4xx/5xx và số lỗi gRPCget_service_environments— Các môi trường khả dụng cho dịch vụ của bạn. Chạy công cụ này trước — các công cụ APM khác cầnenvtừ đâyget_service_performance_details— Phân tích đầy đủ: throughput, tỷ lệ lỗi, p50/p90/p95/trung bình/tối đa, apdex, tính khả dụngget_service_operations_summary— Các thao tác được nhóm theo điểm cuối HTTP, lệnh gọi DB, nhắn tin, máy khách HTTPget_service_dependency_graph— Bản đồ phụ thuộc với throughput, độ trễ và tỷ lệ lỗi cho upstream/downstream/infraget_apm_service_deviations— So sánh cửa sổ hiện tại với đường cơ sở có cùng thời lượng: hồi quy/cải thiện, đối chiếu Apdex và kết quả cuối (nhóm dịch vụ hoặc dịch vụ đơn lẻ)get_exceptions— Ngoại lệ phía máy chủ với bộ lọc dịch vụ và span
Quan sát cơ sở dữ liệu
Bốn công cụ đi thẳng vào hiệu suất cơ sở dữ liệu của bạn, được suy ra từ các span trace OpenTelemetry và, khi không có trace, từ các chỉ số hạ tầng như CloudWatch. Không cần công cụ đo lường bổ sung nếu bạn đã sử dụng OTel.
get_databases— Khám phá tất cả cơ sở dữ liệu trong hạ tầng của bạn: loại DB, máy chủ, throughput (truy vấn/phút), độ trễ p95, tỷ lệ lỗi, số dịch vụ phụ thuộc. Cũng khám phá cơ sở dữ liệu từ các chỉ số hạ tầng như CloudWatch mà không cần công cụ đo lường trace — các hàng đó mang giá trị hoạt động thay vì chỉ số traceget_database_slow_queries— Các lần thực thi truy vấn chậm nhất thực tế, được sắp xếp theo thời lượng, với ID trace để đào sâu vào các trace đầy đủget_database_queries— Các mẫu và tổng hợp truy vấn: tần suất truy vấn chạy, thời lượng trung bình/p95, tỷ lệ lỗiget_database_server_metrics— Các chỉ số phía máy chủ từ chính máy chủ DB (CPU, kết nối, tỷ lệ trúng bộ nhớ đệm — phụ thuộc vào hệ thống DB của bạn)
Hỗ trợ PostgreSQL, MySQL, MongoDB, Redis, Aerospike và bất kỳ thứ gì khác mà OTel trace với thuộc tính db_system — cộng với các cơ sở dữ liệu được khám phá từ các chỉ số hạ tầng như CloudWatch, có các hàng mang giá trị hoạt động thay vì chỉ số trace.
Prometheus / PromQL
prometheus_range_query— Truy vấn phạm vi PromQL trên bất kỳ chỉ số nàoprometheus_instant_query— Truy vấn tức thời; sử dụng các hàm tổng hợp nhưavg_over_time,sum_over_timeprometheus_label_values— Giá trị nhãn cho một chuỗi nhất địnhprometheus_labels— Tất cả nhãn khả dụng cho một chuỗi
Trỏ các công cụ này đến một datasource/cluster khác với mặc định bằng cách đặt LAST9_DATASOURCE.
Log
get_logs— Truy vấn log pipeline JSON đầy đủ (tổng hợp, bộ lọc, trích xuất trường)get_service_logs— Các dòng log thô cho một dịch vụ, có thể lọc theo mức độ nghiêm trọng và nội dungget_log_attributes— Danh mục toàn cầu về các thuộc tính trong lược đồ log cho một khoảng thời gianget_log_attributes_for_pipeline— Các trường log thực sự hiện diện cho một pipeline đang chạy (khám phá có phạm vi), mỗi trường vớifilter_fieldchính xác của nóget_drop_rules— Các quy tắc loại bỏ log từ Last9 Control Planeadd_drop_rule— Tạo quy tắc loại bỏ mới để cắt giảm khối lượng log tại nguồn
Trace
get_traces— Truy vấn trace pipeline JSON cho các tìm kiếm và tổng hợp rộngget_service_traces— Trace theo ID trace chính xác hoặc tên dịch vụ. Sử dụng khi bạn có ID trace — nhanh hơnget_trace_attributes— Danh mục toàn cầu về các thuộc tính trong lược đồ traceget_trace_attributes_for_pipeline— Các thuộc tính thực sự hiện diện cho một pipeline đang chạy (khám phá có phạm vi), mỗi thuộc tính vớifilter_fieldchính xác của nóget_trace_attribute_values— Các giá trị riêng biệt cho một thuộc tính trace, tùy chọn có phạm vi theo pipelineget_trace_attribute_deviations— Xếp hạng các giá trị thuộc tính khác nhau giữa hai nhóm span có giới hạn (chậm vs nhanh, lỗi vs không lỗi, hoặc hai khoảng thời gian). Tương quan, không phải nguyên nhânget_trace_waterfall— Một trace chính xác dưới dạng waterfall cha/con với thời gian tự thân hợp nhất khoảng thời gian, các span chậm nhất và cảnh báo đồ thị
Sự kiện thay đổi & Cảnh báo
get_change_events— Triển khai, thay đổi cấu hình, rollback. Tương quan sự cố với những gì đã thay đổiget_alert_groups— Các nhóm cảnh báo Compass đã cấu hình với nhãn siêu dữ liệu, nhóm, cấp độ và số lượng quy tắc — bao gồm các nhóm không có quy tắc và các nhóm không đang kích hoạtget_alert_config— Cấu hình quy tắc cảnh báo — có thể tìm kiếm theo tên, mức độ nghiêm trọng, loại, thẻget_alerts— Các cảnh báo đang kích hoạt trong một khoảng thời gianget_alert_rule_state— Trạng thái kích hoạt lịch sử (1/0) cho mỗi quy tắc cảnh báo trong một khoảng thời gian, được nhóm theorule_id. Có thể lọc theo nhóm cảnh báo, tên quy tắc, bộ lọc nhãn và trạng thái.get_notification_channels— Các kênh thông báo đã cấu hình (Slack, PagerDuty, email, v.v.)
Bảng điều khiển tùy chỉnh
list_dashboards— Tất cả bảng điều khiển tùy chỉnh trong tổ chức của bạn: ID, tên và siêu dữ liệuget_dashboard— Định nghĩa bảng điều khiển đầy đủ theo ID, bao gồm các bảng và truy vấnvalidate_dashboard— Lint + thực thi + phân loại chỉ đọc cho một id bảng điều khiển đã lưu hoặc mộtdashboard_definitionnội tuyến trong cửa sổ ≤24h. Không bao giờ tạo hoặc cập nhật bảng điều khiểncreate_dashboard— Tạo một bảng điều khiển tùy chỉnh hoàn toàn mới một lần (bảng, truy vấn, siêu dữ liệu). Sau khi id được trả về, tinh chỉnh bằngupdate_dashboard.update_dashboard— Tinh chỉnh một bảng điều khiển hiện có theo ID (thay thế toàn bộ; bảng điều khiển hệ thống chỉ đọc trả về lỗi)delete_dashboard— Xóa một bảng điều khiển tùy chỉnh theo IDlist_dashboard_snapshots— Ảnh chụp nhanh đóng băng tại một thời điểm cho một bảng điều khiển (chỉ siêu dữ liệu)get_dashboard_snapshot— Ảnh chụp nhanh đóng băng đầy đủ bao gồm dữ liệu bảng để phân tích RCA / chế độ xem chia sẻdelete_dashboard_snapshot— Xóa một ảnh chụp nhanh đóng băng theo ID
Hồ sơ liên tục
Yêu cầu hồ sơ liên tục được bật cho tổ chức. Khám phá dịch vụ trước bằng get_profile_services, sau đó kéo flamegraph hoặc các hàm được xếp hạng.
get_profile_services— Các dịch vụ có dữ liệu hồ sơ trong cửa sổ (lập chỉ mục trước khi truy vấn)get_flamegraph— Cây flamegraph lồng nhau cho một dịch vụ (cpumặc định; cũng cóalloc,wall)get_top_functions— Xếp hạng mẫu tự thân của các hàm nóng nhất cho một dịch vụget_profile_summary— Phân loại ngắn gọn bằng ngôn ngữ tự nhiên về hồ sơ cho một dịch vụ
Bảng điều khiển Grafana
Các công cụ chỉ đọc chống lại phiên bản Grafana của tổ chức (thông qua proxy Grafana của Last9). Các trường thông tin xác thực không bao giờ được trả về cho mô hình. Bật bằng LAST9_TOOLSETS=grafana (hoặc để trống các bộ công cụ cho tất cả công cụ).
grafana_search_dashboards— Tìm kiếm dashboard theo chuỗi con trong tiêu đề (phân trang;truncated: truekhi đạt giới hạn)grafana_get_dashboard— Tóm tắt dashboard theo uid (panel, biến, mục tiêu PromQL);full_json=trueđể lấy JSON Grafana thôgrafana_list_folders— Cây thư mụcgrafana_list_folder_dashboards— Dashboard trong một thư mục (phân trang)grafana_list_datasources— Danh sách nguồn dữ liệu không bao gồm thông tin xác thực
Giải quyết tên mờ
did_you_mean— Khi agent không chắc chắn về tên một thực thể, chức năng này trả về các kết quả khớp gần nhất từ danh mục của bạn (dịch vụ, môi trường, máy chủ, cơ sở dữ liệu, deployment/namespace K8s, công việc). Tối đa 3 gợi ý kèm điểm tương đồng. Máy chủ tự động gọi chức năng này trước hầu hết các công cụ khi tra cứu tên trả về kết quả rỗng.
Hồ sơ dịch vụ
get_service_profile— Dữ liệu telemetry của một dịch vụ thực sự trông như thế nào, trước khi bạn truy vấn: tín hiệu nào tồn tại, ngôn ngữ và runtime, môi trường triển khai, hình dạng log của dịch vụ, và đề xuất sửa ingest nếu áp dụng. Giúp agent bỏ qua các công cụ trace khi dịch vụ không có trace, và phân tích mức độ nghiêm trọng từ nội dung log khiSeverityTexttrống thay vì lọc theo nó và không tìm thấy gì.
Cách hoạt động
Liên kết sâu trên mọi phản hồi. Mỗi công cụ trả về một trường deep_link — một URL trực tiếp vào dashboard Last9 cho đúng truy vấn và khoảng thời gian đó. Agent có thể đưa bạn liên kết; bạn nhấp vào; bạn đã ở đó.
Bộ công cụ. Theo mặc định, máy chủ hiển thị mọi công cụ. Các máy chủ tự động hóa chỉ cần điều tra (log/trace/metrics/profiles) có thể đặt LAST9_TOOLSETS=investigate (hoặc truyền --toolsets=investigate) để tools/list giữ nhỏ mà không cần vô hiệu hóa hàng loạt phía client. Các gói có tên: logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all. Tên không xác định sẽ lỗi nhanh. Riêng gói metrics không bao gồm list_datasources hoặc did_you_mean — hãy dùng investigate (hoặc kết hợp các bộ công cụ) khi bạn cần các trợ giúp khám phá đó.
Tài nguyên tham chiếu công cụ. Các sổ tay dài logjson/tracejson/service-logs/metrics là tài nguyên MCP (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics, last9://reference/investigation), không phải văn bản mô tả công cụ luôn bật. Các quy tắc truy vấn quan trọng vẫn nằm trong mô tả công cụ để các agent không bao giờ gọi resources/read vẫn nhận được hướng dẫn xây dựng chính xác. Khám phá các trường riêng của tổ chức bằng get_log_attributes / get_log_attributes_for_pipeline (và các phiên bản tương đương cho trace)—chúng không được chèn vào mô tả.
Kết quả lớn được chia nhỏ. get_logs và get_traces xử lý các tập kết quả lớn thông qua chia nhỏ thay vì cắt bớt. Giới hạn mặc định là 5000 mục cho log; có thể cấu hình qua LAST9_MAX_GET_LOGS_ENTRIES.
Phát triển
Chế độ HTTP, kiểm thử curl, xây dựng từ mã nguồn
Chạy ở chế độ HTTP
export LAST9_REFRESH_TOKEN="your_refresh_token"
export LAST9_HTTP=true
export LAST9_PORT=8080
./last9-mcp-server
Máy chủ khởi động tại http://localhost:8080/mcp.
Kiểm thử bằng curl
Trình xử lý Streamable HTTP chạy ở chế độ không trạng thái, vì vậy mọi yêu cầu được phục vụ độc lập. Bắt tay initialize và tiêu đề Mcp-Session-Id là tùy chọn — các client gửi chúng vẫn hoạt động (tiêu đề được chấp nhận và bỏ qua), và client cũng có thể bỏ qua thẳng đến tools/list / tools/call. Mỗi công cụ là một truy vấn yêu cầu/phản hồi độc lập; máy chủ không gửi thông báo máy chủ→client, vì vậy GET /mcp (luồng SSE) trả về 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
}
}
}'
Xây dựng từ mã nguồn
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 dành cho phát triển cục bộ. Để sử dụng thực tế, điểm cuối HTTP được lưu trữ dễ dàng hơn.
Tham chiếu công cụ
Tất cả tham số, chuẩn nhập thời gian và chi tiết
Nhập thời gian
- Thời gian tuyệt đối (
start_time_iso/end_time_iso, hoặctime_iso) được ưu tiên hơnlookback_minutes. - Đối với cửa sổ tương đối: dùng
lookback_minutes. - Đối với cửa sổ tuyệt đối: dùng RFC3339/ISO8601 —
2026-02-09T15:04:05Z. YYYY-MM-DD HH:MM:SScũ được chấp nhận chỉ để tương thích.
get_exceptions
limit(số nguyên, tùy chọn): Số ngoại lệ tối đa. Mặc định: 20.lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.start_time_iso/end_time_iso(chuỗi, tùy chọn): Khoảng thời gian tuyệt đối.service_name(chuỗi, tùy chọn): Lọc theo dịch vụ.span_name(chuỗi, tùy chọn): Lọc theo tên span.env(chuỗi, tùy chọn): Lọc theo môi trường.
get_service_summary
start_time_iso/end_time_iso(chuỗi, tùy chọn)env(chuỗi, tùy chọn): Biểu thức chính quy PromQL. Mặc định là.*. Khớp chính xác cần neo (ví dụ^prod$).sort_by(chuỗi, tùy chọn):request_count(mặc định),throughput_rpm,http_4xx_count,http_5xx_count, hoặcgrpc_error_count.limit(số nguyên, tùy chọn): Số hàng xếp hạng tối đa. Bỏ trống hoặc 0 nghĩa là 10; giá trị trên 100 được kẹp xuống 100.
get_service_environments
start_time_iso/end_time_iso(chuỗi, tùy chọn)
Tất cả các công cụ APM khác yêu cầu giá trị
env. Dùng""nếu chức năng này trả về rỗng.
get_service_performance_details
service_name(chuỗi, bắt buộc)lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.start_time_iso/end_time_iso(chuỗi, tùy chọn)env(chuỗi, tùy chọn): Mặc định làprod.
get_service_operations_summary
service_name(chuỗi, bắt buộc)lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.start_time_iso/end_time_iso(chuỗi, tùy chọn)env(chuỗi, tùy chọn): Mặc định làprod.
get_service_dependency_graph
service_name(chuỗi, tùy chọn)lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.start_time_iso/end_time_iso(chuỗi, tùy chọn)env(chuỗi, tùy chọn): Mặc định làprod.
get_apm_service_deviations
service_name(chuỗi, tùy chọn): Bỏ trống cho phạm vi toàn bộ; cung cấp cho một dịch vụ và các tương quan hoạt động của nó.lookback_minutes(số nguyên, tùy chọn): Cửa sổ hiện tại. Mặc định: 60.start_time_iso/end_time_iso(chuỗi, tùy chọn): Cửa sổ hiện tại tường minh.baseline_start_time_iso/baseline_end_time_iso(chuỗi, tùy chọn): Đường cơ sở tường minh. Mặc định là cửa sổ có cùng thời lượng liền trước.datasource(chuỗi, tùy chọn): Giới hạn so sánh vào một nguồn dữ liệu.env(chuỗi, tùy chọn): Mặc định làprod.max_services/max_operations(số nguyên, tùy chọn): Mặc định 10, tối đa 10 mỗi loại.
get_databases
env(chuỗi, tùy chọn): Lọc theo môi trường. Chấp nhận biểu thức chính quy. Mặc định: tất cả.lookback_minutes(số nguyên, tùy chọn): Mặc định: 60. Cửa sổ không được vượt quá 7 ngày.start_time_iso/end_time_iso(chuỗi, tùy chọn)
get_database_slow_queries
db_system(chuỗi, tùy chọn): ví dụpostgresql,mysql,mongodb,redis.host(chuỗi, tùy chọn): Máy chủ cơ sở dữ liệu (net_peer_name).service_name(chuỗi, tùy chọn): Tên dịch vụ gọi.env(chuỗi, tùy chọn)min_duration_ms(số thực, tùy chọn): Thời lượng truy vấn tối thiểu tính bằng ms.lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.start_time_iso/end_time_iso(chuỗi, tùy chọn)limit(số nguyên, tùy chọn): Mặc định: 20.
get_database_queries
db_system(chuỗi, tùy chọn)host(chuỗi, tùy chọn)service_name(chuỗi, tùy chọn)env(chuỗi, tùy chọn)lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.start_time_iso/end_time_iso(chuỗi, tùy chọn)limit(số nguyên, tùy chọn): Mặc định: 20.
get_database_server_metrics
db_system(chuỗi, bắt buộc): ví dụpostgresql,mysql,mongodb,redis,aerospike.host(chuỗi, tùy chọn)lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.start_time_iso/end_time_iso(chuỗi, tùy chọn)
prometheus_range_query
query(chuỗi, bắt buộc): Truy vấn PromQL.start_time_iso/end_time_iso(chuỗi, tùy chọn): Mặc định là 60 phút cuối.lookback_minutes(số thực, tùy chọn): Mặc định: 60.
prometheus_instant_query
query(chuỗi, bắt buộc)time_iso(chuỗi, tùy chọn): Mặc định là hiện tại.lookback_minutes(số thực, tùy chọn)
prometheus_label_values
match_query(chuỗi, tùy chọn): Bộ lọc PromQL.label(chuỗi, bắt buộc): Tên nhãn.start_time_iso/end_time_iso(chuỗi, tùy chọn)
prometheus_labels
match_query(chuỗi, tùy chọn): Bộ lọc PromQL.start_time_iso/end_time_iso(chuỗi, tùy chọn)
get_logs
logjson_query(mảng, bắt buộc): Truy vấn pipeline JSON.lookback_minutes(số nguyên, tùy chọn): Mặc định: 5.start_time_iso/end_time_iso(chuỗi, tùy chọn)limit(số nguyên, tùy chọn): Mặc định máy chủ: 5000.index(chuỗi, tùy chọn):physical_index:<name>hoặcrehydration_index:<block_name>.
Đối với danh sách dịch vụ dựa trên log, truy vấn physical_index_service_count trước:
sum by (name, service_name, env) (physical_index_service_count{destination="logs"})
Dùng service_name làm ServiceName, env làm môi trường khi có, và name làm tên chỉ mục vật lý. Nếu name="default", bỏ qua index; đối với chỉ mục vật lý không mặc định do người dùng chọn, truyền index: "physical_index:<name>". Nếu backend từ chối lọc chỉ mục vật lý tường minh, thử lại mà không có index và báo cáo rằng lọc chỉ mục vật lý tường minh không khả dụng cho backend đó.
get_service_logs
service_name(chuỗi, bắt buộc)lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.limit(số nguyên, tùy chọn): Mặc định: 20.env(chuỗi, tùy chọn)severity_filters(mảng, tùy chọn): ví dụ["error", "warn"]. Logic OR.body_filters(mảng, tùy chọn): ví dụ["timeout", "failed"]. Logic OR.start_time_iso/end_time_iso(chuỗi, tùy chọn)index(chuỗi, tùy chọn)
Nhiều loại bộ lọc kết hợp với AND. Mỗi mảng dùng OR nội bộ.
Dùng get_logs cho số liệu tổng hợp rộng trước; chỉ dùng get_service_logs sau khi thu hẹp về một dịch vụ/môi trường/chỉ mục và một tập mẫu nhỏ.
get_log_attributes
lookback_minutes(số nguyên, tùy chọn): Mặc định: 15.start_time_iso/end_time_iso(chuỗi, tùy chọn)region(chuỗi, tùy chọn)index(chuỗi, tùy chọn)
get_log_attributes_for_pipeline
pipeline(mảng, bắt buộc): Các giai đoạn lọc trước để thu hẹp phạm vi khám phá, ví dụ[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(số nguyên, tùy chọn): Mặc định: 15.start_time_iso/end_time_iso(chuỗi, tùy chọn)region(chuỗi, tùy chọn)index(chuỗi, tùy chọn)
get_drop_rules
Không có tham số. Liệt kê các quy tắc loại bỏ qua GET /otel_settings/drop?region=....
add_drop_rule
name(chuỗi, bắt buộc)filters(mảng, bắt buộc): Mỗi bộ lọc:key,value,operator(equals/not_equals),conjunction(and).- Khóa bộ lọc phải dùng
attributes["key_name"]hoặcresource.attributes["key_name"](bắt buộc bởi API Last9). - Tạo quy tắc qua
POST /otel_settings/drop?region=...&cluster_id=....
get_traces
Dùng cho tìm kiếm rộng và tổng hợp. Để tra cứu chính xác ID trace, dùng get_service_traces.
tracejson_query(mảng, bắt buộc)start_time_iso/end_time_iso(chuỗi, tùy chọn)lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.limit(số nguyên, tùy chọn): Mặc định: 5000.
get_service_traces
Bắt buộc chính xác một trong trace_id hoặc service_name.
trace_id(chuỗi, tùy chọn): Khoảng thời gian nhìn lại mặc định: 72 giờ.service_name(chuỗi, tùy chọn): Khoảng thời gian nhìn lại mặc định: 60 phút.lookback_minutes(số nguyên, tùy chọn)start_time_iso/end_time_iso(chuỗi, tùy chọn)limit(số nguyên, tùy chọn): Mặc định: 10.env(chuỗi, tùy chọn)
get_trace_attributes
lookback_minutes(số nguyên, tùy chọn): Mặc định: 15.start_time_iso/end_time_iso(chuỗi, tùy chọn)region(chuỗi, tùy chọn)
get_trace_attributes_for_pipeline
pipeline(mảng, bắt buộc): Các giai đoạn lọc trước đó để giới hạn phạm vi khám phá, ví dụ:[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(số nguyên, tùy chọn): Mặc định: 15.start_time_iso/end_time_iso(chuỗi, tùy chọn)region(chuỗi, tùy chọn)
get_trace_attribute_values
tag_name(chuỗi, bắt buộc): Tên thuộc tính từget_trace_attributes(ví dụ:resource_departmenthoặcattributes['http.method']).pipeline(mảng, tùy chọn): Các giai đoạn lọc trước đó để giới hạn phạm vi giá trị; bỏ qua để lấy giá trị toàn cục.lookback_minutes(số nguyên, tùy chọn): Mặc định: 15.start_time_iso/end_time_iso(chuỗi, tùy chọn): Giới hạn RFC3339 lịch sử; được ưu tiên hơnlookback_minutes.region(chuỗi, tùy chọn)
get_trace_attribute_deviations
comparison_mode(chuỗi, bắt buộc):latency,errors, hoặctime.service_name(chuỗi, bắt buộc)environment(chuỗi, bắt buộc): Giá trịdeployment.environmentchính xác.operation(chuỗi, tùy chọn)filters(mảng, tùy chọn): Các điều kiện lọc JSON trace.candidate_attributes(mảng, tùy chọn): Tối đa 8; bỏ qua để khám phá có giới hạn.latency_threshold_ms(số, tùy chọn): Bắt buộc cho chế độlatency; bị từ chối cho các chế độ khác.start_time_iso/end_time_iso(chuỗi, tùy chọn)lookback_minutes(số nguyên, tùy chọn): Mặc định: 15. Tối đa: 15.baseline_start_time_iso/baseline_end_time_iso(chuỗi, tùy chọn): Bắt buộc cho chế độtime; không chồng lấn và có thời lượng bằng với cửa sổ mục tiêu.minimum_cohort_size(số nguyên, tùy chọn): Mặc định: 100. Tối thiểu: 20.minimum_value_support(số nguyên, tùy chọn): Mặc định: 20. Tối thiểu: 10.limit(số nguyên, tùy chọn): Mặc định: 10. Tối đa: 10.
Yêu cầu khả năng backend đi kèm phải được bật.
get_trace_waterfall
trace_id(chuỗi, bắt buộc)environment(chuỗi, tùy chọn)start_time_iso/end_time_iso(chuỗi, tùy chọn)lookback_minutes(số nguyên, tùy chọn): Mặc định: 4320 (72 giờ).selected_span_id(chuỗi, tùy chọn): Trả về thuộc tính, sự kiện và liên kết chỉ cho span đó.max_spans(số nguyên, tùy chọn): Mặc định: 500. Tối đa: 1000.
Trả về một envelope investigation-evidence/v1; waterfall nằm dưới data.
get_change_events
start_time_iso/end_time_iso(chuỗi, tùy chọn)lookback_minutes(số nguyên, tùy chọn): Mặc định: 60.service_name(chuỗi, tùy chọn)env(chuỗi, tùy chọn)event_name(chuỗi, tùy chọn): Gọi mà không có tham số này trước để lấyavailable_event_names.
get_alert_groups
Danh mục nhóm cảnh báo Compass đã cấu hình cho các cuộc kiểm tra changeboard / nhãn phủ sóng. Bao gồm các nhóm không có quy tắc và các nhóm không kích hoạt. Không trả về PromQL.
alert_group_name/alert_group_type/data_source_name(chuỗi, tùy chọn): Khớp chuỗi con không phân biệt hoa thường.team/tier(chuỗi, tùy chọn): Khớp chính xác không phân biệt hoa thường trên siêu dữ liệu đã cấu hình.label_key+label_value(chuỗi, tùy chọn): Phải được đặt cùng nhau. Khớp chính xác không phân biệt hoa thường trên một cặpmetadata.labels— cả khóa và giá trị.
Trả về JSON nhỏ gọn {"count":N,"groups":[...]} với id, name, type, entity_class, team, tier, metadata.labels, và số lượng quy tắc. team / labels trống nghĩa là chưa được đặt.
get_alert_config
search_term(chuỗi, tùy chọn): Tìm kiếm văn bản tự do trên tên, nhóm, nguồn dữ liệu, thẻ.rule_name(chuỗi, tùy chọn)severity(chuỗi, tùy chọn)rule_type(chuỗi, tùy chọn):statichoặcanomaly.alert_group_name/alert_group_type/data_source_name(chuỗi, tùy chọn)tags(mảng, tùy chọn): Tất cả phải khớp (logic AND).
get_alerts
time_iso(chuỗi, tùy chọn): Thời gian đánh giá theo RFC3339.window(số nguyên, tùy chọn): Khoảng thời gian nhìn lại tính bằng giây. Mặc định: 900. Phạm vi: 60–86400.lookback_minutes(số nguyên, tùy chọn): Phạm vi: 1–1440.
get_alert_rule_state
start_time(số nguyên, bắt buộc): Thời điểm bắt đầu phạm vi theo Unix epoch (bao gồm).end_time(số nguyên, bắt buộc): Thời điểm kết thúc phạm vi theo Unix epoch (bao gồm).step(số nguyên, bắt buộc): Độ phân giải tính bằng giây giữa các mẫu. Số lượng mẫu((end_time - start_time) / step + 1)bị giới hạn ở 100.alert_group_id(chuỗi, tùy chọn): Lọc theo ID nhóm cảnh báo.rule_name(chuỗi, tùy chọn): Bộ lọc regex trên tên quy tắc.alert_group_name(chuỗi, tùy chọn): Bộ lọc regex trên tên nhóm cảnh báo.label_filters(chuỗi, tùy chọn): Bộ lọc nhãnkey=valuephân tách bằng dấu phẩy.state(chuỗi, tùy chọn): Lọc theo trạng thái (ví dụ:firing).
Trả về một bản đồ JSON của rule_id -> [{timestamp, is_firing}]. Một dấu thời gian mà tại đó một quy tắc vắng mặt trong phản hồi upstream được báo cáo là is_firing=0 — điều này có nghĩa là "không quan sát thấy đang kích hoạt", không phải là trạng thái bình thường được xác nhận.
get_notification_channels
Không có tham số. Trả về tất cả các kênh thông báo đã cấu hình (Slack, PagerDuty, email, webhooks, v.v.).
did_you_mean
query(chuỗi, bắt buộc): Tên cần tìm kiếm — một phần, sai chính tả hoặc viết tắt.type(chuỗi, tùy chọn): Giới hạn theo loại thực thể:service,environment,host,database,k8s_deployment,k8s_namespace,job.
Trả về tối đa 3 kết quả khớp gần nhất với điểm tương đồng. Sử dụng công cụ này trước bất kỳ lệnh gọi công cụ nào khi tên thực thể không chắc chắn. Nếu lệnh gọi trước đó trả về kết quả trống, hãy thử công cụ này trước khi thử lại.
get_service_profile
service_name(chuỗi, bắt buộc): Dịch vụ để xây dựng hồ sơ telemetry.datasource(chuỗi, tùy chọn): Tên nguồn dữ liệu. Bỏ qua để dùng mặc định.
Trả về một bản tóm tắt điều tra ngắn theo sau là hồ sơ đầy đủ dưới dạng JSON thô: sự hiện diện tín hiệu (logs/traces/metrics dưới dạng present, absent, hoặc unknown), ngôn ngữ và runtime, môi trường triển khai, signal_shape log (log_format, severity_set, level_field), và đề xuất sửa lỗi ingest khi áp dụng. Được xây dựng từ upstream và lưu cache với TTL khoảng 15 phút.
Gọi công cụ này trước bất kỳ cuộc điều tra nào theo phạm vi dịch vụ để việc chọn công cụ khớp với telemetry thực tế của dịch vụ — bỏ qua các công cụ trace khi traces là absent, và khi severity_set là none hoặc partial, phân tích mức độ nghiêm trọng từ level_field trong nội dung log thay vì sử dụng severity_filters. metrics luôn là unknown và dependencies không được điền trong v1. Khi cả logs và traces đều là absent, hãy xác nhận tên bằng did_you_mean trước khi kết luận dịch vụ không được giám sát.
list_dashboards
Không có tham số. Trả về tất cả các dashboard tùy chỉnh trong tổ chức dưới dạng mảng JSON với id, name, và siêu dữ liệu.
get_dashboard
id(chuỗi, bắt buộc): UUID của dashboard.region(chuỗi, tùy chọn): Khu vực để điền truy vấn bảng điều khiển. Mặc định là khu vực nguồn dữ liệu đã cấu hình.
validate_dashboard
Chỉ đọc. Không bao giờ tạo hoặc cập nhật dashboard. Chấp nhận chính xác một trong dashboard_id hoặc dashboard_definition.
dashboard_id(chuỗi, tùy chọn): UUID dashboard đã lưu để xác thực.dashboard_definition(đối tượng, tùy chọn): Nội dung dashboard chưa lưu nội tuyến (chạy thử thực sự).start_time_iso/end_time_iso(chuỗi, tùy chọn): Cửa sổ xác thực (RFC3339). Phải ≤ 24 giờ.region(chuỗi, tùy chọn): Khu vực để thực thi truy vấn bảng điều khiển.
Trả về dashboard_validation/v1: phân loại lint + thực thi theo từng bảng điều khiển (data / no_data / invalid / error). Kết quả trống ngày đầu tiên được phân loại là valid_no_data mà không có các đầu dò chẩn đoán.
create_dashboard
Chỉ tạo mới. Sau khi lệnh gọi này trả về dashboard.id, hãy tinh chỉnh bằng update_dashboard — không tạo lại để thêm, cắt bớt hoặc sửa các bảng điều khiển.
dashboard(đối tượng, bắt buộc): Định nghĩa dashboard vớinamevàpanels[]. Mỗi bảng điều khiển yêu cầuname,version,layout(x,y,w,h),visualization.type, vàqueries[].metadata(đối tượng, tùy chọn): Siêu dữ liệu dashboard — các trường_categoryvà_type(ví dụ:{"_category":"custom","_type":"metrics"}).
update_dashboard
Ưu tiên sử dụng công cụ này sau create. Thay thế toàn bộ theo id (cùng nội dung như create).
id(chuỗi, bắt buộc): UUID dashboard cần cập nhật.dashboard(đối tượng, bắt buộc): Nội dung dashboard thay thế toàn bộ (cùng cấu trúc như create).metadata(đối tượng, tùy chọn): Siêu dữ liệu thay thế. Các dashboard hệ thống chỉ đọc trả về lỗi 403.
delete_dashboard
id(chuỗi, bắt buộc): UUID dashboard cần xóa. Các dashboard hệ thống chỉ đọc không thể bị xóa.
list_dashboard_snapshots
dashboard_id(chuỗi, bắt buộc): UUID dashboard cần liệt kê các snapshot.
Chỉ trả về siêu dữ liệu (id, name, expires_at, v.v.). Sử dụng get_dashboard_snapshot để lấy dữ liệu bảng điều khiển đã đóng băng.
get_dashboard_snapshot
id(chuỗi, bắt buộc): UUID của snapshot.
Trả về snapshot đóng băng đầy đủ bao gồm dashboard_definition, panel_data, time_range, và variables.
delete_dashboard_snapshot
id(chuỗi, bắt buộc): UUID snapshot cần xóa.
get_profile_services
lookback_minutes/start_time_iso/end_time_iso(tùy chọn): Cửa sổ; ưu tiên lookback hoặc giới hạn ISO rõ ràng (mặc định 60 phút).region(chuỗi, tùy chọn): Ghi đè khu vực.
Trả về các dịch vụ có dữ liệu profiling trong cửa sổ. Gọi công cụ này trước get_flamegraph / get_top_functions / get_profile_summary.
get_flamegraph
service(chuỗi, bắt buộc): Tên dịch vụ từget_profile_services.profile_type(chuỗi, tùy chọn):cpu(mặc định),alloc, hoặcwall. Cố định một loại khi so sánh các cửa sổ.env/cluster/namespace/runtime(chuỗi, tùy chọn): Bộ lọc phạm vi.limit(số, tùy chọn): Số hàng stack tổng hợp tối đa (mặc định 1000, tối đa 10000).lookback_minutes/start_time_iso/end_time_iso/region(tùy chọn).
Trả về cây flamegraph lồng nhau (name / value / self / children). truncated: true có nghĩa là giới hạn hàng API đã bị vượt.
get_top_functions
Cùng bộ lọc như get_flamegraph. Trả về xếp hạng self-sample của các hàm nóng nhất. Có thể bị cắt ngắn; kiểm tra truncated.
get_profile_summary
Cùng bộ lọc như get_flamegraph. Trả về một bản phân loại ngôn ngữ tự nhiên ngắn về hồ sơ cho dịch vụ.
grafana_search_dashboards
query(chuỗi, tùy chọn): Chuỗi con của tiêu đề. Để trống để liệt kê rộng (chịu giới hạn 5.000 hàng).
Trả về {"dashboards":[…], "truncated":bool} với uid, title, uri, url, type, tags. Sử dụng uid với grafana_get_dashboard.
grafana_get_dashboard
uid(chuỗi, bắt buộc): UID dashboard Grafana.full_json(boolean, tùy chọn): Khi true, trả về JSON Grafana thô thay vì bản tóm tắt đã lọc. Tóm tắt mặc định: phiên bản, thẻ, biến templating, và loại/nguồn dữ liệu/vị trí lưới/mục tiêu promQL của từng panel. Các loại panel plugin không xác định xuất hiện trongunsupportedPanelTypes.
grafana_list_folders
Không có tham số. Trả về cây thư mục.
grafana_list_folder_dashboards
folder_uid(chuỗi, bắt buộc): UID thư mục Grafana.
Trả về {"dashboards":[…], "truncated":bool} cho các dashboard trong thư mục đó (phân trang tối đa 5.000).
grafana_list_datasources
Không có tham số. Trả về một phép chiếu an toàn của các nguồn dữ liệu (không có trường thông tin xác thực).
Kiểm thử
Xem TESTING.md để biết cách thiết lập và hướng dẫn kiểm thử tích hợp.
