ADR-020 - Theo dõi và tối ưu chi phí vận hành cho hệ thống dx-vas
📌 Bối cảnh¶
Chi phí vận hành hệ thống dx-vas bao gồm: - Dịch vụ Cloud Run (API Gateway, adapters, frontend SSR...) - Cloud Storage, Firestore, Redis (MemoryStore), BigQuery - Logging & Monitoring (Cloud Logging, Cloud Monitoring) - Traffic egress (khi gọi external API hoặc frontend SSR qua CDN)
Trong quá khứ đã xảy ra các vấn đề như: - Cloud Run scale quá mức → tăng đột biến chi phí hàng tháng - Logging quá chi tiết → tăng chi phí Cloud Logging - Redis giữ session không xóa → billing tăng không kiểm soát
Cần một chiến lược chủ động để giám sát, dự đoán và tối ưu chi phí cloud, vừa để tiết kiệm, vừa để sớm phát hiện bất thường.
🧠 Quyết định¶
Áp dụng hệ thống quan sát và cảnh báo chi phí theo từng dịch vụ và tài nguyên chính của hệ thống dx-vas. Tích hợp với dashboard theo dõi real-time, báo cáo định kỳ, và cảnh báo vượt ngưỡng.
💰 Các nguồn chi phí chính¶
| Nguồn | Công cụ | Đơn vị | Cảnh báo đề xuất |
|---|---|---|---|
| Cloud Run | Google Cloud Billing | VND/hour | > 300K/ngày/service |
| Redis | MemoryStore billing | GB RAM/hour | > 4 GB hoặc > 100K ops/min |
| Cloud Logging | Logging bytes | GB/ngày | > 1GB/ngày/service |
| BigQuery | Storage & Query | GB scanned | > 5GB/ngày |
| Cloud Monitoring | Uptime/Alerting | API calls | Không cần alert, nhưng log usage |
| Firestore / Storage | GB stored + reads | GB & IOPS | Theo dõi xu hướng tăng liên tục |
📊 Dashboard & Phân nhóm chi phí¶
Tạo dashboard chi phí trong Cloud Billing > Budgets & reports:
- Nhóm theo service.label, resource.name, project
- Gán tag: env=prod|staging|dev, owner=platform|lms|crm, critical=true
- Gắn cost attribution qua label: dx-vas_service, env, module
Mỗi service Cloud Run nên có ít nhất:
- cloud.googleapis.com/run/container/start_count
- cloud.googleapis.com/run/request_count
- billing/cost metric qua Cloud Monitoring + BigQuery export
📈 Chi phí Reporting Service & BigQuery¶
💰 Bổ sung bảng chi phí:¶
| Nguồn | Công cụ | Đơn vị | Cảnh báo đề xuất |
|---|---|---|---|
| Reporting Service | Cloud Run | VND/hour | > 150K/ngày |
| BigQuery | Query & Storage | GB scanned | > 5GB/ngày |
📊 Dashboard & Attribution (bổ sung):¶
-
Label gợi ý cho Reporting Service:
-
dx-vas_service=reporting-service module=reporting-
critical=true -
Với BigQuery:
-
Gắn label
report_query_type=dashboard|ad-hoc|scheduled - Theo dõi cụ thể các query chạy bởi Reporting Service (qua
user_email,labelstrongINFORMATION_SCHEMA.JOBS)
🚨 Alerting & Noti¶
- Thiết lập Cloud Budget alert:
-
90% monthly quota → gửi email/slack
-
110% week-over-week cost → Slack + log
- Alert rule (Monitoring):
- Redis memory > 80%
- Logging usage > 1GB/day/service
- Cloud Run instance spike > 3x bình thường trong 15 phút
- Query nào vượt >1GB scanned → gắn vào log cảnh báo
- Tần suất báo cáo tự động > 100 lần/ngày → cảnh báo spam
- Tổng chi phí BigQuery > 2M VND/tháng → Slack alert
🛠 Tích hợp kỹ thuật¶
- Tự động export billing → BigQuery
- Giao diện dashboard qua Looker Studio hoặc Metabase (nếu private)
- Script cron phân tích log: log traffic vượt 100K req/day/service → gửi cảnh báo
- Gắn cost estimator vào CI/CD (Terraform plan → ước lượng chi phí)
✅ Lợi ích¶
- Dự báo chi phí theo thời gian thực
- Phát hiện sớm bất thường do cấu hình sai (scale, cache, logging)
- Tối ưu billing từng microservice rõ ràng
- Phân bổ chi phí công bằng theo team/module
❌ Rủi ro & Giải pháp¶
| Rủi ro | Giải pháp |
|---|---|
| Quá nhiều alert gây nhiễu | Gộp alert theo nhóm, alert only trend not spikes |
| Không gán tag cost → không trace được | CI enforce label & billing tag trên resource |
| Cloud Billing export bị ngắt | Có job kiểm tra cron export hoạt động liên tục |
📎 Tài liệu liên quan¶
“Không quan sát được chi phí, sớm muộn sẽ vượt ngân sách.”