Giám sát sống chết EC2 chỉ trong giờ hành chính bằng CloudWatch Metric Math (EC2死活監視)
Cách thiết lập cảnh báo CloudWatch cho EC2 chỉ hoạt động từ 8:00 đến 20:00 ngày trong tuần bằng biểu thức Metric Math (FILL, DAY, HOUR) mà không cần Lambda hay EventBridge.
✍️ Tác giả nguồn:
RioTakasu(Rio Takasu, thuộc tập đoàn BIPROGY) trên Qiita Nhật Bản.
🔗 Tiêu đề gốc: CloudWatchだけで「平日8:00~20:00」のEC2死活監視を実現してみた
🌐 Bài gốc: Qiita · 2af5fbe164ef83ddbfda, đăng ngày 14/10/2026, cập nhật ngày 16/10/2026, đọc ngày 17/10/2026.
📝 Biên soạn: BrSE.vn tổng hợp, phân tích kỹ thuật tính toán múi giờ UTC/JST/ICT (Việt Nam) và kinh nghiệm vận hành hạ tầng đám mây cho kỹ sư và BrSE. Đoạn hội thoại và ví dụ mã nguồn được biên soạn độc lập.
📌 Điểm nhấn cốt lõi (Key Takeaways)
- Bài toán tắt máy tiết kiệm chi phí: Các máy chủ EC2 ở môi trường Dev/Staging thường được lập lịch tắt vào ban đêm và cuối tuần. Khi máy tắt, metric
StatusCheckFailedkhông được gửi lên (giá trịNULL). - Nghịch lý cảnh báo thiếu dữ liệu: Nếu cấu hình coi dữ liệu thiếu là bất thường (
breaching), chuông cảnh báo sẽ hú inh ỏi suốt đêm; nếu bỏ qua (ignore), khi máy chủ bị sập đột ngột trong giờ làm việc thì hệ thống lại không phát hiện. - Giải pháp Metric Math thuần túy: Kết hợp hàm
FILL(m1, 1)để giả định trạng thái mất tín hiệu là lỗi, sau đó lồng hàm điều kiện thời gianIF()vớiDAY()vàHOUR()để lọc khung giờ làm việc. - Chuyển đổi múi giờ UTC: CloudWatch Metric Math luôn tính toán theo múi giờ chuẩn quốc tế (UTC). Cần quy đổi chuẩn xác khung giờ làm việc của Nhật (JST, UTC+9) hoặc Việt Nam (ICT, UTC+7).
1. Nỗi đau cảnh báo ảo (False Alarm) trong ca trực vận hành
Trong các dự án phát triển phần mềm Offshore giữa Nhật Bản và Việt Nam, việc tối ưu hóa chi phí đám mây AWS là ưu tiên hàng đầu. Một phương pháp phổ biến là sử dụng Instance Scheduler để tự động tắt hàng chục máy chủ EC2 môi trường kiểm thử (Staging/QA) vào lúc 20:00 tối và bật lại vào 8:00 sáng hôm sau.
Thế nhưng, đội ngũ vận hành (SRE / BrSE trực ca) thường xuyên gặp phải tình cảnh dở khóc dở cười: Đúng 20:05 tối, Slack réo chuông liên hồi vì CloudWatch báo máy chủ EC2 ngừng hoạt động.
Nguyên nhân là do chỉ số kiểm tra tình trạng EC2 StatusCheckFailed có cơ chế hoạt động như sau:
- Khi máy chủ hoạt động bình thường: Trả về
0. - Khi máy chủ bị lỗi phần cứng hoặc hệ điều hành: Trả về
1. - Khi máy chủ bị tắt (Stopped): Không gửi metric nào lên (giá trị bị khuyết, tức
NULL).
夜間に意図的にインスタンスを停止しているのに、アラームが誤発報してしまいます。
Bản dịch: Dù chúng ta chủ động tắt instance vào ban đêm nhưng hệ thống cảnh báo vẫn bị kích hoạt nhầm.
Trước đây, để giải quyết vấn đề này, các nhóm thường phải viết một hàm AWS Lambda kích hoạt bằng EventBridge Rule để bật/tắt (Enable/Disable) trạng thái cảnh báo theo lịch. Tuy nhiên, cách này làm tăng số lượng tài nguyên cần bảo trì và có nguy cơ quên không bật lại cảnh báo nếu Lambda gặp sự cố.
Giải pháp của tác giả RioTakasu là: Tận dụng 100% tính năng CloudWatch Metric Math ngay bên trong Alarm mà không cần thêm bất kỳ dịch vụ trung gian nào.
2. Quy trình thiết lập 3 bước với Metric Math
Sơ đồ nguyên lý xử lý số liệu qua đường ống biểu thức toán học:
Sơ đồ do BrSE.vn tự vẽ, phát hành theo CC0 1.0 Universal. Tệp nằm trong repository; đây không phải screenshot lấy từ Qiita.
Bước 1: Chọn Metric gốc (ID: m1)
- Chọn metric
StatusCheckFailedcủa instance cần theo dõi. - Statistic (Thống kê): Chọn
Maximum. - Period (Chu kỳ): Chọn
1 minute.
Bước 2: Bù đắp dữ liệu khuyết bằng hàm FILL (ID: e1)
Thêm biểu thức:
FILL(m1, 1)
Hàm này có nhiệm vụ: Nếu tại phút đó không có dữ liệu gửi về (máy chủ đang tắt hoặc mất kết nối mạng), nó sẽ tự động điền giá trị 1 (coi như là có lỗi).
| Trạng thái EC2 | Metric gốc (m1) |
Sau khi qua FILL (e1) |
|---|---|---|
| Đang chạy bình thường | 0 |
0 |
| Bị lỗi sập nguồn / OS | 1 |
1 |
| Đang tắt theo lịch | NULL (không có dữ liệu) |
1 |
Bước 3: Lọc khung giờ hành chính bằng hàm IF, DAY, HOUR (ID: e2)
CloudWatch cung cấp các hàm thời gian:
DAY(e1): Trả về thứ trong tuần tính theo múi giờ UTC (1: Thứ Hai, 2: Thứ Ba, …, 7: Chủ Nhật).HOUR(e1): Trả về giờ hiện tại tính theo múi giờ UTC (từ 0 đến 23).
Quy đổi múi giờ Nhật Bản (JST = UTC+9)
Khung giờ cần giám sát là Thứ Hai đến Thứ Sáu, từ 8:00 đến 20:00 (JST). Vì 8:00 sáng JST tương đương 23:00 đêm hôm trước theo giờ UTC, khung giờ này bị chia cắt qua nửa đêm UTC thành 2 khoảng:
- Khoảng 1 (Từ 9:00 đến 19:59 JST): Tương ứng với Thứ Hai – Thứ Sáu, từ 0:00 đến 10:59 UTC:
DAY(e1) <= 5 AND HOUR(e1) < 11 - Khoảng 2 (Từ 8:00 đến 8:59 JST): Tương ứng với Chủ Nhật – Thứ Năm, lúc 23:00 UTC:
(DAY(e1) <= 4 OR DAY(e1) == 7) AND HOUR(e1) == 23
Biểu thức hoàn chỉnh cho ID e2:
IF(((DAY(e1) <= 5 AND HOUR(e1) < 11) OR ((DAY(e1) <= 4 OR DAY(e1) == 7) AND HOUR(e1) == 23)), e1, 0)
- Nếu thời điểm rơi vào giờ hành chính: Trả về giá trị của
e1(nếu lỗi hoặc tắt máy sẽ bằng1). - Nếu ngoài giờ hành chính: Ép giá trị về
0(bình thường, không kích hoạt chuông).
Cuối cùng, thiết lập điều kiện cảnh báo: e2 >= 1 liên tục trong 3 data points (3 phút) để chống nhiễu mạng tạm thời.
3. Mở rộng cho đội ngũ tại Việt Nam (ICT = UTC+7)
Nếu dự án của bạn có đội ngũ phát triển tại Việt Nam và muốn áp dụng cơ chế này cho khung giờ Thứ Hai đến Thứ Sáu, từ 8:30 đến 17:30 (Giờ Hà Nội, UTC+7):
| Giờ Việt Nam (ICT) | Giờ chuẩn (UTC) | Thứ tương ứng |
|---|---|---|
| Thứ Hai – Thứ Sáu: 8:30 sáng | Thứ Hai – Thứ Sáu: 01:30 sáng | DAY <= 5 AND HOUR >= 1 |
| Thứ Hai – Thứ Sáu: 17:30 chiều | Thứ Hai – Thứ Sáu: 10:30 sáng | DAY <= 5 AND HOUR < 11 |
Nhờ Việt Nam chỉ chênh lệch UTC+7 (không bị lùi sang ngày hôm trước như UTC+9 vào buổi sáng sớm), biểu thức cho giờ làm việc tại Việt Nam thậm chí còn đơn giản hơn rất nhiều:
IF(DAY(e1) <= 5 AND HOUR(e1) >= 1 AND HOUR(e1) < 11, e1, 0)
4. Những giới hạn cần ghi nhớ khi vận hành
- Không nhận diện được ngày nghỉ lễ (祝日): Hàm
DAY()chỉ kiểm tra thứ trong tuần (1 đến 7), hoàn toàn không biết các ngày nghỉ lễ quốc gia của Nhật Bản (như Tuần lễ Vàng, Obon) hay Việt Nam (Tết, Giỗ Tổ). Nếu tắt máy vào ngày lễ rơi vào giữa tuần, cảnh báo vẫn sẽ kích hoạt nếu không tạm ngừng (Mute) thủ công. - Độ trễ khởi động máy chủ: Máy chủ EC2 sau khi bật nguồn cần từ 3 đến 5 phút để hoàn tất khởi động và nạp trạng thái Status Check. Nếu hẹn giờ bật máy đúng 8:00 sáng, lúc 8:01 máy chưa sẵn sàng có thể khiến metric bị tính là lỗi. Kinh nghiệm thực tế: Hãy lập lịch bật máy lúc 7:50 sáng để hệ thống ổn định trước khi bước vào khung giờ giám sát 8:00.
インスタンスの起動からステータスチェック完了までに数分かかるため、8時前に起動しておく運用が望ましいです。
Bản dịch: Do instance mất vài phút từ lúc khởi động đến khi hoàn tất status check, nên duy trì quy trình vận hành bật máy trước 8 giờ.
📚 Sổ tay thuật ngữ IT & Hán Việt (重要IT用語集)
| Thuật ngữ (Kanji) | Furigana / Romaji | Âm Hán Việt | Ý nghĩa tiếng Việt | Cấp độ |
|---|---|---|---|---|
| 死活監視 | しかつかんし |
TỬ HOẠT GIÁM THỊ | Giám sát sống chết (Health check / Liveness monitoring) | Technical |
| 稼働時間帯 | かどうじかんたい |
GIÁ ĐỘNG THỜI GIAN ĐỚI | Khung giờ vận hành, giờ hoạt động | N2 |
| 発報 | はっぽう |
PHÁT BÁO | Bắn cảnh báo, kích hoạt chuông báo động (Trigger alarm) | Technical |
| 誤発報 | ごはんぽう |
NGỘ PHÁT BÁO | Cảnh báo sai, cảnh báo nhầm (False positive) | Technical |
| 欠損データ | けっそんでーた |
KHIẾM TỔN DỮ LIỆU | Dữ liệu bị thiếu, giá trị rỗng (Missing data / NULL) | N2 |
| 補完 | ほかん |
BỔ HOÀN | Bù đắp, điền khuyết (Imputation / Fill) | N1 |
| 換算 | かんさん |
HOÁN TOÁN | Quy đổi, chuyển đổi đơn vị/múi giờ | N2 |
| 意図的 | いとてき |
Ý ĐỒ ĐÍCH | Có chủ đích, cố ý | N2 |
| 祝日 | しゅくじつ |
CHÚC NHẬT | Ngày nghỉ lễ quốc gia | N3 |
| しきい値 | しきいち |
- | Ngưỡng giá trị (Threshold) | Technical |
📐 Ngữ pháp tiếng Nhật IT bổ trợ (文法解説)
- 〜てしまう (
N4/N3): Lỡ làm gì đó / Xảy ra điều không mong muốn- Cấu trúc:
V-て + しまう - Ngữ cảnh IT: アラームが発報されてしまう = Cảnh báo lỡ bị bắn đi ngoài ý muốn.
- Cấu trúc:
- 〜にあたる (
N2): Tương đương với…, ứng với…- Cấu trúc:
Danh từ + にあたる - Ngữ cảnh IT: 日本時間の8時はUTCの前日23時にあたる = 8 giờ sáng Nhật Bản tương ứng với 23 giờ đêm hôm trước theo giờ UTC.
- Cấu trúc:
- 〜を考慮する (
N2): Xem xét, tính đến yếu tố…- Cấu trúc:
Danh từ + を考慮する - Ngữ cảnh IT: 祝日は考慮されない = Ngày lễ không được tính đến trong biểu thức.
- Cấu trúc:
- 〜ことによって (
N3): Bằng việc…, nhờ vào…- Cấu trúc:
V-る + ことによって - Ngữ cảnh IT: 数式を使うことによって = Nhờ vào việc sử dụng biểu thức toán học.
- Cấu trúc: