Learning Outcome & Exercises: Observability
Tổng kết chương Observability: học xong mình phải làm được gì, và làm bài tập nào để chứng minh?
Đọc hiểu chưa đủ để đi phỏng vấn. Mỗi chương kết thúc bằng những việc làm được và chứng minh được: có code chạy, có test cho cả trường hợp lỗi, có log hoặc số đo. Bài tập nằm trong repo riêng java-backend-interview-labs, thư mục labs/observability.
1. Mục tiêu đầu ra
Học xong chương này, bạn tự làm được:
- Có structured log kèm traceId, metric RED và trace phân tán cho một request.
- Định nghĩa SLI/SLO và một alert theo burn rate.
- Dùng dashboard để khoanh vùng một sự cố giả lập và viết postmortem.
2. Basic: Log + metric
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
JSON log có traceId; Micrometer metric http_server_requests; Prometheus scrape.
Bài liên quan: Log, metric, trace, Prometheus & Grafana
Hoàn thành khi:
- Ảnh/ghi chú query PromQL
3. Intermediate: Tracing
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
OpenTelemetry cho 2 service + DB; tìm span chậm nhất của một request.
Bài liên quan: OpenTelemetry, Profiling & chẩn đoán JVM
Hoàn thành khi:
- Trace có ít nhất 3 span
4. Challenge: SLO & incident
Trạng thái: ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành
SLO 99.9% cho checkout, alert burn rate; gây lỗi có chủ đích, dùng dashboard tìm nguyên nhân, viết postmortem.
Bài liên quan: SLI, SLO, alert, Xử lý incident & postmortem, Chọn ELK, Loki hay log của cloud
Hoàn thành khi:
- Postmortem theo mẫu blameless
- Cần Docker cho stack Prometheus/Grafana
5. Tiêu chí hoàn thành chung
- Tự giải thích được bài toán và vì sao chọn giải pháp.
- Code chạy được bằng lệnh ghi trong README, không chứa secret.
- Có test tự động cho happy path và failure path.
- Có log hoặc số đo trong
evidence/chứng minh kết quả. - Có câu trả lời phỏng vấn ngắn bằng tiếng Việt và tiếng Anh.
- README của lab có link ngược về bài học tương ứng.
6. Lab và trạng thái
| Mức | Bài tập | Trạng thái | Test / bằng chứng |
|---|---|---|---|
| Basic | Log + metric | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Intermediate | Tracing | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
| Challenge | SLO & incident | ⬜ Chưa triển khai: chưa có code/test, chưa tính là hoàn thành | — |
Repo lab: java-backend-interview-labs/labs/observability. TODO: link GitHub là placeholder cho tới khi repo được push.
evidence/; chỉ đánh dấu xong khi có bằng chứng.Phỏng vấn hỏi về Observability, câu nào hay gặp nhất và trả lời sao?
Q1. Log, metric và trace khác nhau thế nào?
🇻🇳 Tiếng Việt:
Metric cho biết có vấn đề và mức độ, rẻ để lưu lâu. Trace cho biết request chậm ở service nào. Log cho chi tiết từng sự kiện. Gắn chúng bằng traceId để đi từ alert tới trace tới log.
🇬🇧 English:
Metrics tell you that something is wrong and how much, and are cheap to keep. Traces tell you which service a request was slow in. Logs give per-event detail. Correlate them with a traceId to go from alert to trace to log.
Cách nhớ ngắn gọn
- Mỗi bài tập = code + test + log.
- Luôn có ít nhất một failure case.
- Chưa có bằng chứng thì chưa xong.
Tự kiểm tra
Bài tập Basic (Log + metric) được coi là xong khi nào?
Ảnh/ghi chú query PromQL. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Intermediate (Tracing) được coi là xong khi nào?
Trace có ít nhất 3 span. Chưa có code chạy và bằng chứng thì chưa tính là xong.
Bài tập Challenge (SLO & incident) được coi là xong khi nào?
Postmortem theo mẫu blameless; Cần Docker cho stack Prometheus/Grafana. Chưa có code chạy và bằng chứng thì chưa tính là xong.