Sức khỏe hệ thống
/healthz kiểm tra tiến trình API; /readyz kiểm PostgreSQL và Redis. Theo dõi MinIO riêng: lỗi object store ảnh hưởng tệp/báo cáo/snapshot. Worker ghi lỗi scheduler/evaluator/retention/delivery ra log.
Theo dõi last-seen của probe, tuổi job chờ, delivery lỗi, dung lượng PostgreSQL, phân vùng và bộ nhớ Redis. Tuổi snapshot hiển thị trên trang công khai; vẫn cần monitor độc lập cho chính hệ thống này.
Retention
Free giữ mẫu thô 7 ngày, tổng hợp ngày/giờ 90 ngày; Business cấu hình qua platform admin. Raw tables chia partition theo tháng. Worker tạo trước partition và xóa mẫu hết hạn theo tenant. Chỉ xóa partition cũ sau khi xác nhận không còn dòng trong retention.
Backup
docker compose exec -T postgres pg_dump -U postgres -Fc status > status.dumpSao lưu objects MinIO, cấu hình versioning và khóa mã hóa riêng. Redis hỗ trợ phục hồi queue/cache, PostgreSQL vẫn là nguồn chính của jobs/outbox/deliveries. Không đưa .env hoặc credential vào repo/báo cáo.
Restore drill
Dùng DB và bucket riêng. Restore dump bằng pg_restore, khôi phục objects và secrets, chạy migrator, khởi động API/workers rồi kiểm tenant isolation, lịch sử, tệp và snapshot trước chuyển traffic.
scripts/backup-restore.sh thử backup/restore PostgreSQL vào DB local tạm, không ghi đè DB đang chạy. Production vẫn cần thử khôi phục object store và đánh giá recovery point.
Khi dependency lỗi
Khi Redis khởi động lại, worker quét các job đang chờ trong DB. Khi worker chết, job có lease hết hạn được nhận lại. Nếu endpoint công khai không kiểm tra được trang trong PostgreSQL, API bỏ qua Redis và đọc snapshot đã công bố trên MinIO. Phản hồi luôn có stale: true, giữ nguyên updated_at, thương hiệu đã công bố và thông báo tạm ngưng nếu có. Khi DB phục hồi, API trả dữ liệu trực tiếp trở lại.
Fallback có thời gian chờ riêng tối đa 7 giây sau thời gian chờ DB/cache (tối đa 5 giây). API đọc toàn bộ object tối đa 2 lần, mỗi lần tối đa 3 giây, có khoảng nghỉ ngắn giữa hai lần. SDK lưu trữ có thể thử lại HTTP trong từng lần đọc. Luồng nội dung bị ngắt, mạng quá hạn và lỗi lưu trữ tạm thời được thử lại; object không tồn tại, bị từ chối quyền hoặc snapshot không hợp lệ thì dừng ngay. API kiểm tra toàn bộ JSON, slug, thời điểm cập nhật, trạng thái và các danh sách bắt buộc, với giới hạn 64 MiB. Nếu không đọc được snapshot hợp lệ, API trả 503; UI giữ dữ liệu đã tải với thông báo lỗi.
Trong log API, tìm public snapshot read failed: các trường error_kind, storage_code, storage_status, attempt, elapsed_ms và retry cho biết loại lỗi mà không ghi credential hoặc nội dung phản hồi. public snapshot read recovered cho biết lần đọc thứ hai thành công. Theo dõi lỗi và tuổi snapshot riêng với /readyz. Một image build chạy cùng thời điểm chưa chứng minh nguyên nhân của lỗi lưu trữ; cần đối chiếu chẩn đoán mạng/lưu trữ và dung lượng máy.
Kiểm thử tải
Dùng benchmark đi kèm, ghi rõ tài nguyên, digest, throughput và percentile. Dữ liệu synthetic không chứng minh hiệu năng endpoint Internet hay soak test 24 giờ. Chỉ công bố SLA sau khi hoàn tất phép đo đại diện.