Thiết Kế Dashboard Grafana Cho TimescaleDB Không Gây Quá Tải CPU
Hướng dẫn kiến trúc TimescaleOps tối ưu biểu đồ Grafana trên TimescaleDB bằng định tuyến Continuous Aggregates động, PgBouncer và tách trang Status.
Hai mươi kỹ sư vận hành cùng mở bảng Grafana khung 90 ngày bật tự làm mới mỗi 5 giây sẽ bắn 240 câu lệnh SQL mỗi phút vào cơ sở dữ liệu. Kết hợp định tuyến bảng tổng hợp theo độ rộng khung nhìn và PgBouncer giúp bảo vệ hoàn toàn tài nguyên CPU của TimescaleDB.
| Quy Mô Luồng Mẫu | Chu Kỳ Chunk / Phân Vùng | RAM DDR5 Khuyến Nghị | Dung Lượng Ổ Đĩa Ước Tính | Cấu Hình Hạ Tầng Tham Chiếu |
|---|---|---|---|---|
| 5 Internal Engineers | Shared DB + Grafana |
8 GB DDR5 | 128 GB NVMe | Vultr HF 8GB / Hostinger KVM 2 |
| 25 Operators • 5s Refresh | PgBouncer + CAGG Routing |
16 GB DDR5 | 384 GB NVMe | Vultr HF 16GB + ChemiCloud Status |
| 100+ SaaS Tenant Viewers | Read Replica + Query Cache |
32 GB DDR5 | 800 GB NVMe | UltaHost VDS 32GB + Hostinger Web |
| Public Telemetry Portal | Edge Cached API + CAGG |
64 GB DDR5 | 2 TB ZFS + CDN | InterServer + Hostinger Web Cloud |
-- Automatically route Grafana queries by selected zoom span
WITH params AS (
SELECT ($__timeTo()::timestamptz - $__timeFrom()::timestamptz) AS span
)
SELECT bucket AS "time", close AS "value", volume
FROM ohlcv_1m, params
WHERE params.span <= INTERVAL '14 days'
AND symbol_id = $symbol_id
AND bucket BETWEEN $__timeFrom() AND $__timeTo()
UNION ALL
SELECT bucket AS "time", close AS "value", volume
FROM ohlcv_1h, params
WHERE params.span > INTERVAL '14 days'
AND symbol_id = $symbol_id
AND bucket BETWEEN $__timeFrom() AND $__timeTo()
ORDER BY 1 ASC;
1. Khớp Độ Phân Giải Truy Vấn TimescaleDB Theo Số Điểm Ảnh Ngang Của Grafana
Một khung biểu đồ trên màn hình chỉ có khoảng 1.200–2.000 điểm ảnh ngang. Trả về hàng triệu bản ghi thô cho khung nhìn 6 tháng gây nghẽn băng thông vô ích; hãy dùng mệnh đề kiểm tra khoảng thời gian để tự động đọc bảng tổng hợp 1 giờ khi thu nhỏ và chỉ đọc bảng chi tiết khi phóng cận cảnh.
2. Chắn Trước Cổng PostgreSQL 5432 Bằng Bộ Gộp Kết Nối PgBouncer
Mỗi lần tải trang Dashboard có 15 biểu đồ con sẽ gửi đồng loạt 15 truy vấn SQL song song. Đặt PgBouncer ở chế độ transaction pooling giúp dồn hàng trăm phiên xem biểu đồ vào 25 tiến trình PostgreSQL cố định.
3. Tách Trang Cảnh Báo Uptime Khỏi Máy Chủ Cơ Sở Dữ Liệu TimescaleDB Chính
Không nên đặt trang thông báo trạng thái hệ thống chung máy chủ với cơ sở dữ liệu cảm biến — khi ổ đĩa chính đầy hoặc quá tải, khách hàng cũng mất luôn trang xem thông báo bảo trì. Hãy tách cổng Status ra gói lưu trữ web độc lập.
Câu Hỏi Kỹ Thuật Về TS-08 // GRAFANA-LIVE Trên TimescaleOps
Nên dùng Grafana Live WebSocket hay truy vấn SQL TimescaleDB cho đồng hồ nhảy dưới 1 giây?
Dùng Grafana Live nhận luồng đẩy trực tiếp từ MQTT/NATS cho ô hiển thị tức thời, và dùng truy vấn SQL vào TimescaleDB cho toàn bộ biểu đồ xu hướng lịch sử.
Nên giới hạn statement_timeout bao nhiêu cho tài khoản đọc Grafana trên TimescaleDB?
Hãy chạy lệnh ALTER ROLE grafana_reader SET statement_timeout = '5s'; để ngăn các truy vấn thiếu điều kiện lọc chiếm dụng CPU quá 5 giây.
Hàm time_bucket_gapfill() của TimescaleDB có hoạt động tốt trên biểu đồ Grafana không?
Rất tốt. Kết hợp time_bucket_gapfill() cùng locf() giúp nối liền mạch đường đồ thị qua các khoảng nghỉ bảo trì máy móc hoặc lúc cảm biến không phát sinh thay đổi.