Cloud Cost Observability: Giám Sát Chi Phí AWS/Azure/GCP Theo Kiểu SRE

Cloud cost observability là cách đưa chi phí cloud vào cùng một hệ thống quan sát với hạ tầng, ứng dụng và quy trình vận hành. Thay vì cuối tháng mới mở hóa đơn AWS/Azure/GCP rồi giật mình, đội system/cloud/SRE cần thấy được: dịch vụ nào đang tăng tiền, workload nào không có owner, môi trường nào bị quên tắt, thay đổi deploy nào làm chi phí tăng, và khi nào cần cảnh báo trước khi vượt ngân sách.

Bài này đi theo hướng thực chiến cho production/lab: thiết kế tagging, export billing, tạo dashboard, đặt budget alert, viết rule phát hiện bất thường, tích hợp Prometheus/Grafana, và checklist nghiệm thu. Mục tiêu không phải “tiết kiệm bằng mọi giá”, mà là biến chi phí cloud thành một tín hiệu vận hành có thể đo, cảnh báo và tối ưu liên tục.

1. Vì sao cloud cost observability quan trọng trong production?

Trong môi trường on-premise, chi phí phần cứng thường là CAPEX: mua máy chủ, switch, storage rồi khấu hao. Trên cloud, chi phí là OPEX và thay đổi theo giờ: autoscaling thêm instance, NAT Gateway tăng data processing, log ingestion tăng do debug mode, snapshot cũ không xóa, hoặc một cluster Kubernetes tạo Load Balancer cho từng service. Nếu không quan sát liên tục, hóa đơn tháng sau mới là “monitoring system” — và lúc đó đã muộn.

Các tình huống thường gặp

  • Một job ETL quét S3/Blob Storage nhiều hơn dự kiến, data transfer tăng mạnh.
  • Kubernetes namespace dev tạo nhiều Persistent Volume nhưng không có lifecycle cleanup.
  • NAT Gateway hoặc Cloud NAT bị dùng cho traffic lớn thay vì VPC endpoint/private endpoint.
  • Logging platform nhận quá nhiều log DEBUG sau một lần deploy.
  • Compute chạy 24/7 cho môi trường lab, staging dù chỉ dùng giờ hành chính.

2. Kiến trúc tham chiếu cho cloud cost observability

Một kiến trúc tốt nên tách 5 lớp: tagging/metadata, billing export, normalization, dashboard, và alert/action. Không nên chỉ dựa vào dashboard mặc định của nhà cung cấp cloud, vì production thường dùng nhiều account/subscription/project, nhiều team và nhiều môi trường.

  • AWS: Cost Explorer, Cost and Usage Report (CUR), Budgets, Cost Anomaly Detection.
  • Azure: Cost Management + Billing, Budgets, Cost exports to Storage Account.
  • GCP: Cloud Billing export to BigQuery, Budgets & alerts, Recommender.
  • Observability stack: Prometheus, Grafana, Loki/ELK, Alertmanager, Slack/Email/Opsgenie.

3. Chuẩn hóa tagging: nền móng của FinOps

Nếu không có tag/label chuẩn, bạn chỉ thấy “EC2 tốn 2.000 USD” chứ không biết team nào, sản phẩm nào, môi trường nào gây ra. Tagging là phần ít hào nhoáng nhưng quyết định 70% khả năng phân tích chi phí.

Bộ tag tối thiểu nên có

owner       = platform-team
service     = billing-api
env         = prod
cost-center = cc-1024
managed-by  = terraform
criticality = high

Giải thích nhanh: owner giúp biết ai chịu trách nhiệm; service gắn chi phí với sản phẩm; env tách prod/staging/dev; cost-center phục vụ kế toán; managed-by giúp phát hiện tài nguyên tạo thủ công; criticality giúp cân nhắc khi tối ưu.

4. Bật billing export cho từng cloud

AWS: Cost and Usage Report (CUR)

Với AWS, CUR là nguồn dữ liệu chi tiết nhất. Bạn nên export về S3, bật resource IDs, và query bằng Athena. Ví dụ tạo database Athena cho CUR:

CREATE DATABASE IF NOT EXISTS cost_observability;
-- Sau khi CUR tạo crawler/table, kiểm tra 10 service tốn tiền nhất
SELECT
  line_item_product_code AS service,
  ROUND(SUM(line_item_unblended_cost), 2) AS cost_usd
FROM cur_table
WHERE bill_billing_period_start_date = DATE '2026-06-01'
GROUP BY line_item_product_code
ORDER BY cost_usd DESC
LIMIT 10;

Output mẫu:

service              cost_usd
AmazonEC2            842.31
AmazonRDS            311.42
AWSDataTransfer      188.90
AmazonCloudWatch     126.77
AmazonS3              91.03

Azure: Cost Management export

Azure hỗ trợ export cost định kỳ ra Storage Account. Với Azure CLI, bạn có thể kiểm tra cost theo resource group:

az costmanagement query   --type ActualCost   --scope /subscriptions/<subscription-id>   --timeframe MonthToDate   --dataset '{"granularity":"Daily","aggregation":{"totalCost":{"name":"PreTaxCost","function":"Sum"}},"grouping":[{"type":"Dimension","name":"ResourceGroup"}]}'

GCP: Billing export to BigQuery

Trên GCP, cách linh hoạt nhất là export Cloud Billing sang BigQuery. Query mẫu để xem chi phí theo service và label:

SELECT
  service.description AS service,
  labels.value AS environment,
  ROUND(SUM(cost), 2) AS cost_usd
FROM `billing.gcp_billing_export_v1_*`, UNNEST(labels) AS labels
WHERE labels.key = 'env'
  AND usage_start_time >= TIMESTAMP('2026-06-01')
GROUP BY service, environment
ORDER BY cost_usd DESC
LIMIT 20;

5. Đưa cost signal vào Prometheus/Grafana

Prometheus không phải billing database, nhưng rất hữu ích để đưa số liệu chi phí tổng hợp thành metric vận hành. Bạn có thể chạy một exporter nhỏ theo cron: query CUR/BigQuery/API, sau đó expose metric dạng cloud_cost_usd_total.

# HELP cloud_cost_usd_total Cloud cost by service/team/env
# TYPE cloud_cost_usd_total gauge
cloud_cost_usd_total{cloud="aws",service="AmazonEC2",team="platform",env="prod"} 842.31
cloud_cost_usd_total{cloud="aws",service="CloudWatch",team="platform",env="prod"} 126.77
cloud_cost_usd_total{cloud="gcp",service="Kubernetes Engine",team="data",env="dev"} 210.40

Ví dụ alert Prometheus khi chi phí CloudWatch trong ngày vượt ngưỡng:

groups:
- name: cloud-cost
  rules:
  - alert: CloudWatchCostTooHigh
    expr: cloud_cost_usd_total{service="CloudWatch",env="prod"} > 100
    for: 30m
    labels:
      severity: warning
      team: platform
    annotations:
      summary: "CloudWatch cost is above daily threshold"
      description: "CloudWatch cost is {{ $value }} USD. Check log ingestion, metric cardinality and retention."

6. Dashboard nên có những gì?

  • MTD cost: Month-to-date cost theo cloud/account/subscription/project.
  • Daily burn rate: chi phí trung bình/ngày và dự báo cuối tháng.
  • Top services: EC2/RDS/NAT/Logging/Storage/Kubernetes theo thứ tự chi phí.
  • Cost by owner/service/env: giúp team tự chịu trách nhiệm.
  • Untagged resources: tài nguyên thiếu tag bắt buộc.
  • Anomaly panel: tăng bất thường so với 7 ngày trước.

7. Troubleshooting các nguồn tăng chi phí phổ biến

NAT Gateway/Data Transfer tăng đột biến

Kiểm tra workload nào đi qua NAT. Trên AWS, hãy cân nhắc VPC Endpoint cho S3, DynamoDB, ECR, CloudWatch Logs. Với Kubernetes, kiểm tra image pull, backup job, outbound API call và service mesh telemetry.

Log ingestion tăng mạnh

Nguyên nhân thường là debug log, exception loop, high-cardinality label hoặc trace sampling quá cao. Hãy đặt retention theo môi trường: dev 7 ngày, staging 14 ngày, prod 30–90 ngày tùy compliance. Không nên lưu mọi thứ mãi mãi.

Kubernetes tạo quá nhiều tài nguyên cloud

Mỗi Service type LoadBalancer, PVC, Ingress controller, node pool đều có chi phí riêng. Nên có policy kiểm soát namespace, resource quota, limit range và admission policy bắt buộc label owner, service, env.

8. Checklist nghiệm thu triển khai

  1. 100% account/subscription/project đã bật billing export.
  2. Tối thiểu 90% tài nguyên production có tag/label bắt buộc.
  3. Có dashboard MTD cost, daily burn rate, top services, untagged resources.
  4. Có budget alert theo tháng và anomaly alert theo ngày.
  5. Có quy trình review chi phí hằng tuần giữa platform, product và finance.
  6. Có runbook xử lý khi chi phí tăng bất thường.
  7. Có automation phát hiện tài nguyên idle: unattached disk, old snapshot, stopped instance, load balancer không traffic.

9. Lab thực hành: dashboard chi phí đơn giản

Lab này phù hợp cho đội cloud/platform muốn thử nhanh trước khi triển khai production.

  1. Chọn một cloud account lab, bật billing export.
  2. Tạo tag chuẩn cho 3 workload: web, database, monitoring.
  3. Viết script query chi phí theo ngày và xuất metric Prometheus textfile.
  4. Dựng Grafana panel “Daily cost by service”.
  5. Tạo alert khi daily cost vượt 120% trung bình 7 ngày.
  6. Cố tình bật debug log hoặc tạo tài nguyên test để xác minh alert hoạt động.

10. Kết luận

Cloud cost observability không chỉ là việc xem hóa đơn. Nó là một phần của vận hành production: có owner, có metric, có dashboard, có alert, có runbook và có vòng lặp cải tiến. Khi chi phí trở thành tín hiệu quan sát được, đội kỹ thuật có thể tối ưu chủ động mà không làm giảm độ tin cậy hệ thống.

Tác giả: Mạnh Hoàng

Tôi là Hoàng Mạnh, người sáng lập blog SysadminSkills.com. Tôi viết về quản trị hệ thống, bảo mật máy chủ, DevOps và cách ứng dụng AI để tự động hóa công việc IT. Blog này là nơi tôi chia sẻ những gì đã học được từ thực tế – đơn giản, ngắn gọn và áp dụng được ngay.