Docker có một câu trả lời ưa thích cho câu hỏi “container sao rồi”: running. Vấn đề là running chỉ có nghĩa tiến trình còn tồn tại. Ứng dụng bên trong có thể đã treo, mất kết nối database, hoặc đang trả lỗi cho toàn bộ người dùng. Giám sát container thực chất phải nhìn sâu hơn một chữ trạng thái.
Vì sao container “đang chạy” chưa chắc đã khỏe?
Vì trạng thái của Docker mô tả tiến trình, không mô tả ứng dụng. Vài kịch bản quen thuộc với bất kỳ ai vận hành Docker đủ lâu:
- Ứng dụng Java hết heap, treo cứng nhưng tiến trình không chết. Docker:
running. - Container web mất kết nối tới database, mọi request trả 500. Docker:
running. - Container crash rồi được restart policy dựng dậy mỗi 5 phút, người dùng gặp lỗi lai rai cả ngày. Docker:
running, kèm số restart tăng dần mà không ai nhìn.
Muốn biết sự thật, bạn cần nhiều nguồn tín hiệu và một cách gộp chúng lại trung thực. Đó chính là thiết kế ba tầng của AgentWatch.
Ba tầng health của AgentWatch là gì?
Agent chạy trên server nhìn mỗi container qua ba tầng, tầng nào có tín hiệu xấu thì trạng thái chung phản ánh ngay:
| Tầng | Nguồn tín hiệu | Trả lời câu hỏi |
|---|---|---|
| 1. Docker HEALTHCHECK | Lệnh health do chính image khai báo, Docker chạy định kỳ | Ứng dụng tự thấy mình khỏe không? |
| 2. Probe HTTP nội bộ | Agent gọi endpoint health của ứng dụng trên localhost | Ứng dụng có thật sự phản hồi request không? |
| 3. Trạng thái tiến trình | Trạng thái container và số lần restart từ Docker | Tiến trình còn sống không, có đang crash lặp lại không? |
Ba tầng bù trừ cho nhau. HEALTHCHECK sâu nhất nhưng không phải image nào cũng khai báo. Probe HTTP xác nhận ứng dụng phản hồi thật, do bạn cấu hình khi ứng dụng có endpoint health. Trạng thái tiến trình luôn có sẵn với mọi container, không cần chuẩn bị gì. Kết quả gộp thành một trạng thái duy nhất trên dashboard: khỏe, có vấn đề, hay đã chết, kèm lý do từ tầng nào.
Agent đọc thông tin container như thế nào?
Agent của AgentWatch là một binary Go duy nhất chạy trên server, đọc Docker socket của chính máy đó và báo cáo về hệ thống qua HTTPS mỗi 30 giây. Với container, nó chỉ lấy metadata: tên, image, trạng thái, số lần restart và kết quả health.
Cũng quan trọng không kém là những gì agent không làm: không đọc log container, không đọc dữ liệu hay biến môi trường bên trong, không chạy lệnh vào container, không nhận lệnh điều khiển từ xa. Probe HTTP nội bộ chỉ được phép gọi localhost và không đi theo redirect. Toàn bộ hành vi, danh sách file cài đặt và cách gỡ sạch được mô tả trong bài agent AgentWatch là gì, cài đặt và bảo mật.
Container unhealthy thì được cảnh báo ra sao?
Khi trạng thái gộp của container chuyển xấu, AgentWatch mở một sự cố và gửi cảnh báo vào kênh bạn chọn, Zalo hoặc email, ghi rõ container nào trên server nào và từ tầng tín hiệu nào. Khi container khỏe lại, sự cố tự đóng kèm tin phục hồi và thời lượng.
Nhờ đó chuỗi sự kiện nửa đêm quen thuộc đổi hẳn kịch bản. Thay vì sáng hôm sau lần theo log để đoán container chết lúc nào, bạn có dòng thời gian sẵn: unhealthy lúc 01:42, phục hồi lúc 01:47, restart tăng từ 3 lên 7. Việc còn lại là sửa nguyên nhân, không phải dựng lại hiện trường.
Cần chuẩn bị gì để bắt đầu?
Gần như không gì cả, vì tầng 3 hoạt động với mọi container ngay khi agent chạy:
- Tạo tài khoản AgentWatch và thêm server ở chế độ cài agent.
- Chạy lệnh cài một dòng trên server. Agent tự phát hiện Docker và bắt đầu báo cáo danh sách container.
- Nếu ứng dụng có endpoint health, khai báo probe HTTP nội bộ để có tầng 2. Nếu image có HEALTHCHECK, tầng 1 tự động được dùng.
Viết thêm HEALTHCHECK cho image là khoản đầu tư nhỏ mà đáng: một dòng trong Dockerfile đổi lấy tín hiệu sức khỏe từ chính bên trong ứng dụng.
Giám sát Docker bằng AgentWatch tốn bao nhiêu?
Giám sát container nằm trong phần agent, nên tính theo số server cài agent chứ không tính theo số container: gói Free cho 2 server. Gói trả phí từ 49.000đ mỗi tháng cho 5 server, gói Team 149.000đ cho 15 server và Business 399.000đ cho 50 server, khác nhau thêm ở chu kỳ check và thời gian giữ lịch sử. Xem đầy đủ trong bảng giá hoặc bắt đầu từ trang chủ.
Trong beta, tài khoản mới dùng gói Business miễn phí. Nếu hạ tầng của bạn đang chạy trên Docker, ba tầng health này là khác biệt giữa “chắc là ổn” và biết chắc là ổn.
