Thank You For Reaching Out To Us
We have received your message and will get back to you within 24-48 hours. Have a great day!

Xây dựng khả năng Observability tối ưu cho các hệ thống hiện đại với AWS CloudWatch

20 phút đọc

Với các hệ thống AWS hiện nay, điều quan trọng không phải là việc hệ thống có đang hoạt động hay không. Thay vào đó, vấn đề nằm ở việc liệu đội ngũ kỹ thuật có thực sự nắm rõ những gì đang diễn ra bên trong, phát hiện sớm các dấu hiệu bất thường và nắm được vấn đề trước khi người dùng bị ảnh hưởng. Đó chính là bản chất của Observability. Trên AWS, Amazon CloudWatch thường đóng vai trò trung tâm, có vai trò hợp nhất các tác vụ monitoring, logging, alerting và phân tích vận hành. Khi được thiết kế bài bản, CloudWatch không chỉ là nơi để theo dõi biểu đồ khi xảy ra sự cố mà trở thành một phần thiết yếu trong quy trình vận hành hàng ngày của doanh nghiệp. 

CloudWatch trong kiến trúc AWS hiện đại

Tích hợp AWS CloudWatch Logs: Luồng log từ EC2 được chuyển đến CloudWatch, kích hoạt alerts, gọi Lambda functions để xử lý tự động, đồng thời lưu trữ dữ liệu tại Amazon S3 và Elasticsearch.
Tích hợp AWS CloudWatch Logs: Luồng log từ EC2 được chuyển đến CloudWatch, kích hoạt alerts, gọi Lambda functions để xử lý tự động, đồng thời lưu trữ dữ liệu tại Amazon S3 và Elasticsearch.

Trong môi trường AWS, Amazon CloudWatch là trung tâm tập hợp các tín hiệu vận hành từ các tài nguyên và ứng dụng khác nhau. Bằng cách thu thập metrics, logs và events trên toàn bộ hệ thống, CloudWatch vượt xa giới hạn của một công cụ giám sát hạ tầng đơn thuần. Với các hệ thống phân tán, điều này vô cùng quan trọng là khả năng quan sát giờ đây không chỉ gói gọn trong trạng thái của EC2 hay mức tải của Database.  Đội ngũ cần một cái nhìn toàn diện về cách hệ thống vận hành xuyên suốt các services, runtimes và dependencies. Vì vậy, AWS CloudWatch observability nên được hiểu là một nền tảng observability thống nhất, chứ không chỉ là dashboard giám sát thông thường.

Monitoring truyền thống thường tập trung vào các tín hiệu hạ tầng: CPU, memory, disk, network. Những metrics này vẫn có giá trị, nhưng hiếm khi đủ để giải thích trọn vẹn vấn đề trong các hệ thống cloud-native. Ví dụ: một service có thể có CPU bình thường, nhưng vẫn gặp tình trạng latency tăng cao do downstream dependency bị chậm. Tỷ lệ lỗi có thể tăng vọt sau khi thay đổi cấu hình, ngay cả khi không có chỉ số hạ tầng nào hiện cảnh báo. Đây chính là lúc Observability thể hiện giá trị của mình: không chỉ hỏi "tài nguyên có ổn không?", mà còn đặt câu hỏi "hệ thống thực sự đang vận hành ra sao trong thực tế?"

Trên thực tế, Observability thường được xây dựng dựa trên ba loại tín hiệu chính: 

  • Metrics: thể hiện xu hướng, mức tải, latency và các pattern lỗi
  • Logs: ghi lại sự kiện và dữ liệu thực thi chi tiết
  • Traces: theo dõi requests xuyên suốt nhiều components

CloudWatch hỗ trợ trực tiếp hai tín hiệu đầu tiên thông qua CloudWatch Metrics và CloudWatch Logs. Khi kết hợp với AWS X-Ray, hệ thống có thể phân tích request ở mức sâu hơn. Chính sự kết hợp này giúp AWS CloudWatch observability phát huy giá trị trong các kiến trúc hiện đại xây dựng trên microservices, containers hoặc serverless. Tracing càng phát huy sức mạnh khi được tích hợp với các công cụ trực quan hóa trong CloudWatch. AWS X-Ray đã cung cấp khả năng tracing ở cấp độ request, nhưng CloudWatch ServiceLens giúp tổng hợp các traces đó lại cùng với metrics và logs trong một giao diện vận hành duy nhất. Thay vì chuyển đổi giữa các dashboards, đội ngũ có thể xem service maps, các spike của latency và logs liên quan trong cùng một interface.

Ví dụ: Nếu alarm về API latency được kích hoạt, ServiceLens có thể chỉ ngay service downstream nào đang gây chậm, và liên kết trực tiếp đến các X-Ray traces liên quan. Nhờ đó, thời gian từ phát hiện sự cố đến xác định nguyên nhân gốc được rút ngắn đáng kể. 

Với các hệ thống coi trọng trải nghiệm người dùng, CloudWatch Real User Monitoring (RUM) sẽ hoàn thiện bức tranh này. Trong khi metrics và traces mô tả hành vi của backend, RUM ghi lại trải nghiệm thực tế của người dùng trên trình duyệt, từ thời gian tải trang, lỗi JavaScript cho đến độ trễ frontend theo từng khu vực địa lý hoặc thiết bị.

Khi các công cụ này được sử dụng cùng nhau, bức tranh observability trở nên rõ nét hơn rất nhiều:

  • Metrics báo hiệu latency đang tăng.
  • X-Ray traces chỉ ra điểm nghẽn của request.
  • ServiceLens kết nối các tín hiệu xuyên suốt các services.
  • CloudWatch RUM xác nhận liệu người dùng có thực sự đang gặp tình trạng giảm hiệu năng hay không.

Sự kết hợp này giúp đội ngũ chuyển dịch từ việc giám sát hạ tầng sang observability end-to-end đầy đủ - bao quát cả backend lẫn tương tác thực tế của người dùng.

Custom Metrics: Đo lường những giá trị mà  infrastructure metrics bỏ lỡ

Các dịch vụ AWS như EC2, RDS, ALB, Lambda đều tự động gửi các metrics tiêu chuẩn lên CloudWatch. Những metrics này hữu ích, nhưng chủ yếu mô tả trạng thái tài nguyên. Trong thực tế, nhiều vấn đề nghiêm trọng lại bắt nguồn từ tầng ứng dụng hoặc business logic - những thứ mà infrastructure metrics khó phản ánh đầy đủ. Đây chính là lúc custom metrics phát huy giá trị.

Custom metrics cho phép ứng dụng gửi các tín hiệu riêng lên CloudWatch, giúp phản ánh hiệu suất nghiệp vụ, sức khỏe ứng dụng hoặc áp lực thực tế lên hệ thống mà các biểu đồ CPU/Memory đơn thuần không thể hiện được. Chẳng hạn như:

  • Số đơn hàng xử lý mỗi phút
  • Tỷ lệ giao dịch thanh toán thất bại
  • Độ trễ trung bình của API
  • Số message tồn đọng trong queue 

Những metrics này có thể được gửi lên qua AWS SDK hoặc CloudWatch Agent từ các workloads chạy trên EC2, ECS hoặc EKS. Giá trị thực sự không nằm ở việc thu thập thêm dữ liệu mà ở khả năng đo lường đúng những gì thực sự quan trọng với hệ thống và người dùng. Trong nhiều trường hợp, AWS CloudWatch observability trở nên hiệu quả hơn đáng kể khi các tín hiệu business-level được bổ sung bên cạnh infrastructure metrics.

Một yếu tố then chốt khác là chiến lược thiết lập dimensions. Một metric sẽ hữu ích hơn khi có thể "bóc tách" theo ngữ cảnh: service name, environment, region, endpoint... Điều này giúp việc troubleshooting trở nên dễ dàng hơn khi sự cố xảy ra. Tuy nhiên, quá nhiều dimensions sẽ làm tăng số lượng time series và đẩy chi phí lên. Một thiết lập tốt luôn cân bằng giữa độ sâu phân tích và chi phí - thay vì coi mọi label đều là bắt buộc.

Quản lý chi phí chính là một yếu tố quan trọng trong vận hành. CloudWatch rất mạnh, nhưng cũng có thể trở thành một trong những dịch vụ vận hành tốn kém nếu metrics và logs được thu thập không có chiến lược rõ ràng.

Hai khu vực thường chiếm chi phí lớn. 

  • Log ingestion và storage: Khối lượng lớn application logs có thể làm chi phí ingestion tăng nhanh. Việc thiết lập chính sách retention hợp lý giúp kiểm soát dung lượng lưu trữ. Ví dụ: operational logs chỉ cần lưu 7-30 ngày, trong khi audit logs có thể yêu cầu thời gian dài hơn. Các logs cũ hơn cũng có thể được xuất sang Amazon S3 để lưu trữ dài hạn với chi phí thấp hơn.
  • Custom metrics với nhiều dimensions: Mỗi tổ hợp duy nhất giữa tên metric và dimensions sẽ tạo ra một time series mới trong CloudWatch. Nếu metrics bao gồm quá nhiều labels (service, endpoint, environment, region, version...), số lượng time series có thể tăng theo cấp số nhân - vừa tốn chi phí, vừa khiến dashboards khó đọc.
  • Tần suất publish metrics cũng là yếu tố cần cân nhắc. Việc gửi high-resolution metrics mỗi giây có thể không cần thiết với nhiều workloads. Trong đa số trường hợp, publish mỗi 30-60 giây vẫn đảm bảo khả năng quan sát vận hành, đồng thời giảm đáng kể khối lượng metrics.

Vì vậy, một thiết kế observability thực tế luôn cân bằng giữa khả năng quan sát và tối ưu chi phí. Đội ngũ nên xác định rõ  những tín hiệu thực sự có giá trị cho vận hành, thay vì mặc định thu thập mọi thứ.

Một cách tiếp cận hiệu quả để thiết kế custom metrics là bắt đầu từ Service Level Indicators (SLI). Các đội ngũ thường quan tâm nhất đến: latency, error rate, throughput. Từ đó, họ có thể gửi custom metrics phù hợp và xây dựng alarms dựa trên ngưỡng SLO, thay vì dựa trên các sự kiện hạ tầng chung chung. Cách làm này giúp lớp observability gắn chặt hơn với chất lượng dịch vụ thực tế, đồng thời hỗ trợ phát hiện hành vi bất thường sớm hơn - trước khi vấn đề ảnh hưởng đến người dùng. 

Xây dựng Dashboards theo ngữ cảnh vận hành, không chỉ theo từng services

Một dashboard hiệu quả cần giúp đội ngũ nhanh chóng trả lời một câu hỏi cốt lõi: Điều gì đang bất thường và đội ngũ nên kiểm tra bước tiếp theo ở đâu? Nếu chỉ hiển thị những biểu đồ hạ tầng chung chung, dashboard đó thường sẽ làm chậm quá trình xử lý sự cố thay vì hỗ trợ nó.

Một CloudWatch dashboard hiệu quả thường được xây dựng theo các ngữ cảnh sau:

  • Production health: request volume, error rate, latency, saturation
  • Business flow: số đơn hàng thành công, thanh toán thất bại, độ sâu queue, số lần thử lại
  • Environment view: hành vi trên môi trường production, staging hoặc theo từng khu vực (region). 
  • Service domain: các phân vùng như thanh toán (checkout), xác thực (authentication), tìm kiếm và xử lý ngầm (background processing)

Ví dụ: Một dashboard thương mại điện tử sẽ giá trị hơn nhiều nếu tập hợp được các tín hiệu sau tại một nơi duy nhất:

  • Lưu lượng request qua ALB.
  • Số lượng đơn hàng thành công.
  • Tỷ lệ lỗi 5xx.
  • Độ trễ của API thanh toán.
  • Độ sâu hàng chờ của các tác vụ chạy ngầm. 

Đây chính là bản chất của AWS CloudWatch Observability: giúp đội ngũ hiểu được hành vi hệ thống trong ngữ cảnh nghiệp vụ, thay vì chỉ nhìn vào những con số tài nguyên khô khan.

CloudWatch còn hỗ trợ Metric Math - một tính năng mang lại giá trị lớn hơn nhiều so với tên gọi của nó. Thay vì chỉ vẽ biểu đồ từ các con số thô, đội ngũ vận hành có thể tính toán các tín hiệu thực tế như "tỷ lệ lỗi" từ nhiều nguồn dữ liệu khác nhau. Metric Math đặc biệt hữu ích khi bạn muốn trích xuất các tín hiệu vận hành từ nhiều chỉ số thô (raw metrics). Thay vì theo dõi từng metric riêng lẻ, CloudWatch có thể tính toán các tỷ lệ phần trăm phản ánh chính xác "sức khỏe" của dịch vụ.

Ví dụ điển hình: Tính API error rate từ request metrics. Giả sử hệ thống publish hai metrics:

  • m1 = số request thất bại
  • m2 = tổng số request

Sử dụng CloudWatch metric math, error rate được tính như sau:

(m1 / m2) × 100

Công thức này chuyển đổi các con số thô thành một tỷ lệ phần trăm trực quan, giúp việc thiết lập Dashboard và Alarm trở nên dễ dàng hơn. Ví dụ: Alarm sẽ tự động kích hoạt nếu tỷ lệ lỗi vượt quá 2% trong vòng 5 phút liên tiếp.

Bạn cũng có thể áp dụng Metric Math cho các chỉ số phái sinh khác như:

  • Tỷ lệ thành công (Success rate).
  • Tỷ lệ trúng bộ nhớ đệm (Cache hit ratio).
  • Các mức phân vị độ trễ (Latency percentiles).
  • Tỷ lệ sử dụng tài nguyên (Utilization percentages).

Bằng cách chuyển raw metrics thành các chỉ số cấp cao hơn, dashboards trở nên ý nghĩa hơn và dễ hiểu hơn cho operators trong các sự cố.

Sử dụng Alarms để cảnh báo sớm thay vì monitoring mang tính phản ứng

Dashboards giúp đội ngũ nhìn thấy điều gì đang xảy ra. Alarms giúp họ hành động trước khi vấn đề trở nên trầm trọng. Đây là bước chuyển quan trọng trong AWS CloudWatch observability: monitoring tốt không chỉ là thấy các spike sau khi người dùng phản ánh, mà là phát hiện hành vi bất thường đủ sớm để phản ứng kịp thời.

CloudWatch Alarms có thể được sử dụng theo nhiều cách thực tế:

  • Gửi thông báo qua Amazon SNS
  • Chuyển tiếp cảnh báo đến email hoặc Slack
  • Kích hoạt Lambda để phản ứng tự động
  • Hỗ trợ các hành động như scale-out, khởi động lại service, hoặc chuyển hướng traffic

Các ngưỡng cố định vẫn có chỗ đứng, nhưng không phải lúc nào cũng đủ. Trong các hệ thống mà traffic biến động theo giờ, ngày trong tuần hoặc theo mùa, phát hiện bất thường (anomaly detection) thường hữu ích hơn. Thay vì so sánh metric với một con số tĩnh, CloudWatch có thể so sánh nó với mẫu hành vi bình thường theo thời gian - giúp giảm các cảnh báo nhiễu trong các workloads có biến động traffic dự đoán được.

Một yếu tố then chốt khác là thiết kế alarm. Quá nhiều alarms với ngưỡng kém thường tạo ra nhiễu thay vì giúp phát hiện sự cố. Đó là cách các đội ngũ rơi vào tình trạng alarm fatigue và bắt đầu bỏ qua cảnh báo. Cách tiếp cận tốt hơn là gắn alarms với chất lượng service, ưu tiên các tín hiệu ảnh hưởng trực tiếp đến người dùng và phân loại theo mức độ nghiêm trọng. Mục tiêu không phải là tạo cảnh báo cho mọi thứ, mà là tạo cảnh báo cho những thứ thực sự cần hành động.

Điều tra sự cố với CloudWatch Logs và Logs Insights

Metrics thường cho bạn biết có gì đó sai. Logs mới là thứ giúp giải thích cụ thể sai ở đâu. Trong một hệ thống AWS phân tán, sự khác biệt này rất quan trọng. Một spike trong error rate có thể xuất hiện nhanh trên dashboard, nhưng cuộc điều tra thực sự thường chỉ bắt đầu khi đội ngũ có thể truy vết lỗi ngược lại về một service, một endpoint, một mẫu request, hoặc một log event cụ thể. Đó là lúc CloudWatch Logs trở thành một phần của observability thực thụ, thay vì chỉ là nơi lưu trữ logs.

CloudWatch Logs Insights giúp quá trình điều tra này nhanh hơn rất nhiều, bởi vì nó biến raw logs thành dữ liệu có thể tìm kiếm và có cấu trúc. Thay vì cuộn qua từng log stream, đội ngũ có thể query logs, lọc theo fields, nhóm các events và phát hiện các mẫu mà lẽ ra sẽ mất nhiều thời gian để nhận ra thủ công. Điều này đặc biệt hữu ích trong môi trường microservices, nơi logs phân tán trên nhiều components và nguyên nhân gốc rễ hiếm khi rõ ràng từ một nơi duy nhất. Một query tốt có thể nhanh chóng hiển thị: endpoint nào đang lỗi nhiều nhất, service nào đang tạo ra các lỗi bất thường, hoặc liệu một mẫu traffic đột ngột có liên quan đến một nguồn cụ thể hay không.

Điều này cũng phụ thuộc vào cách logs được ghi ngay từ đầu. Structured JSON logs dễ phân tích và query hơn nhiều so với plain text logs - đặc biệt khi đội ngũ cần lọc theo endpoint, status code, service name hoặc request identifiers. Điều này giúp việc điều tra trở nên đáng tin cậy hơn và giảm thời gian dọn dẹp dữ liệu log trong một sự cố. Chính sách lưu trữ cũng rất quan trọng. Nếu logs được giữ quá ngắn, phân tích lịch sử trở nên yếu. Nếu giữ quá lâu mà không có chính sách rõ ràng, chi phí lưu trữ tăng lên với lợi ích vận hành hạn chế. Trong thực tế, Logs Insights hoạt động tốt nhất khi cả cấu trúc log và lưu trữ đều được thiết kế có chủ đích ngay từ đầu.

Thiết kế Observability như một phần của hệ thống

CloudWatch hoạt động tốt nhất khi nó được lên kế hoạch như một phần của kiến trúc, chứ không phải được triển khai thêm sau khi hệ thống đã đi vào hoạt động. Trong môi trường ECS hoặc EKS, các đội ngũ thường gửi logs và metrics thông qua CloudWatch Agent hoặc Fluent Bit. Trong các hệ thống dựa trên Lambda, phần lớn luồng này đã được tích hợp sẵn. Cách thiết lập có thể khác nhau, nhưng câu hỏi thiết kế vẫn như nhau: hệ thống nên có khả năng giải thích điều gì khi xảy ra sự cố?

Câu hỏi này thường đến trước các lựa chọn về công cụ.

Những metrics nào quan trọng nhất?

Không phải mọi metric đều cần được thu thập. Những metrics hữu ích là những chỉ số giúp giải thích chất lượng service, hành vi traffic và các mẫu lỗi.

Nên log ở mức độ nào? 

Quá ít logging làm chậm quá trình điều tra. Quá nhiều tạo ra nhiễu và chi phí lưu trữ. Mức độ phù hợp phụ thuộc vào những gì đội ngũ có thể cần trong quá trình phân tích sự cố.

Điều gì nên kích hoạt alarms? 

Thiết kế alarm nên phản ánh rủi ro vận hành thực tế, chứ không chỉ là các biến động kỹ thuật trên biểu đồ. Mục đích là phát hiện sớm các vấn đề có ý nghĩa, chứ không phải cảnh báo về mọi biến động.

Đây cũng là lúc kinh nghiệm triển khai thực tế bắt đầu thể hiện. Phần khó hiếm khi là bật CloudWatch lên. Haposoft đã đồng hành cùng nhiều dự án AWS delivery trong môi trường production thực tế, nơi observability là yếu tố then chốt giúp các đội ngũ troubleshooting nhanh hơn và vận hành hệ thống đáng tin cậy hơn. Đó là lý do vì sao observability nên được coi là một phần của thiết kế hệ thống. Một đội ngũ nên biết trước những tín hiệu nào sẽ giúp trả lời các câu hỏi production sau này. Khi tư duy đó đã được thiết lập, CloudWatch không còn là một công cụ monitoring đơn thuần. Nó trở thành một phần trong cách hệ thống được vận hành, debug và cải thiện theo thời gian.

Kết luận

CloudWatch hữu ích nhất khi nó giúp các đội ngũ chuyển từ monitoring thụ động sang vận hành chủ động. Metrics, logs, dashboards, alarms và phân tích log đều quan trọng, nhưng giá trị của chúng đến từ cách chúng kết hợp với nhau trong môi trường production thực tế. Khi được khai thác đúng cách, AWS CloudWatch observability mang lại cho đội ngũ khả năng quan sát nhanh hơn, điều tra sự cố nhanh hơn và cảnh báo sớm hơn trước khi người dùng bị ảnh hưởng. Haposoft mang đến kinh nghiệm triển khai AWS thực chiến cho các hệ thống như vậy và cũng được công nhận là AWS Select Tier Services Partner.

 

cta-background

Đăng ký nhận bản tin hàng tháng của Haposoft

Nhận thông tin chuyên sâu về chuyển đổi số và cập nhật sự kiện trực tiếp vào hộp thư đến của bạn.
© Haposoft 2025. All rights reserved