# SLO: mục tiêu, ngân sách lỗi và thời gian không đo được

> Đặt mục tiêu trên check uptime, monitor, heartbeat hoặc span; cách Belvador đếm tốt/xấu, độ phủ, trạng thái và dữ liệu nằm ở đâu.

**SLO (mục tiêu mức dịch vụ)** là lời hứa về một thứ Belvador vốn đã đo: "checkout API trả lời được 99,9 % thời gian", "job xuất dữ liệu ban đêm thành công 99 % số lần", "95 % request `GET /api/orders` xong dưới 300 ms". Belvador đếm tốt và xấu trong một cửa sổ trượt, cho biết **ngân sách lỗi** còn bao nhiêu, và [báo cho bạn](https://belvador.dev/vi/docs/slos/alerts) khi ngân sách đang bị đốt quá nhanh — từ lâu trước khi nó cạn.

| Bạn muốn biết khi… | Dùng |
|---|---|
| Một trang hay API đang sập ngay lúc này | [Check uptime](https://belvador.dev/vi/docs/uptime/quickstart) |
| Một job không chạy hoặc bị lỗi | [Monitor](https://belvador.dev/vi/docs/monitors/overview) |
| Độ tin cậy qua nhiều tuần đang giảm, trước khi người dùng nhận ra | SLO (bài này) |

## 1. Tạo SLO

Mở **SLO → SLO mới** và đi qua bốn bước.

1. **Nguồn** — thứ được đếm:

   | Nguồn | Tốt | Tổng | Ai đếm |
   |---|---|---|---|
   | **Kiểm tra uptime** · khả dụng | lượt kiểm Hoạt động hoặc Suy giảm | lượt kiểm có kết quả xác định | Belvador, từ kết quả của check |
   | **Kiểm tra uptime** · độ trễ | lượt kiểm trả lời trong ngưỡng của bạn | lượt kiểm có kết quả xác định | Belvador |
   | **Monitor** | lần chạy kết thúc OK | lần chạy OK, lỗi, quá giờ hoặc bị lỡ | node của bạn |
   | **Heartbeat** | hạn có ping đúng giờ | hạn đã qua | Belvador |
   | **Span** · khả dụng | span `SERVER` không có trạng thái lỗi | span `SERVER` của dịch vụ (và thao tác) | node của bạn |
   | **Span** · độ trễ | span `SERVER` nhanh hơn ngưỡng | span `SERVER` của dịch vụ (và thao tác) | node của bạn |

   Span chỉ đếm loại `SERVER`, để một request không bị đếm hai lần qua span client và span nội bộ. SLO monitor hoặc span có thể giới hạn trong một **môi trường**; để trống là mọi môi trường.

2. **Thế nào là tốt** — khả dụng, hoặc độ trễ với ngưỡng 1–60000 ms (chỉ cho kiểm tra uptime và span).
3. **Mục tiêu** — từ 90 % đến 99.99 %, trên cửa sổ trượt 7, 28, 30 ngày. Form hiện ngân sách tương ứng, ví dụ "Ngân sách lỗi: 43,2 phút mỗi 30 ngày" cho 99,9 %.
4. **Cảnh báo** — mức đốt nào được phép báo; xem [Cảnh báo tốc độ đốt](https://belvador.dev/vi/docs/slos/alerts).

Belvador bắt đầu đo từ lúc bạn lưu; dữ liệu trước đó không được điền bù. SLO mới cần ít nhất 60 phút đã đo trước khi có kết luận. Số SLO một workspace được tạo tuỳ theo gói.

## 2. Ngân sách lỗi

**Ngân sách lỗi** là phần xấu được phép: `1 − mục tiêu` của cửa sổ. Cách tiêu ngân sách tuỳ nguồn, theo hai cách tính của OpenSLO:

- **Timeslices** (kiểm tra uptime) — ngân sách là thời gian. 99,9 % trong 30 ngày cho phép 43,2 phút xấu; mỗi khoảng xấu tiêu đúng độ dài của nó.
- **Occurrences** (monitor, heartbeat, span) — ngân sách là tỉ lệ sự kiện. 99 % cho phép 1 lần chạy xấu trong mỗi 100 lần.

**Ngân sách còn** hiện theo phần trăm và có thể âm khi SLO đã trượt. **Đạt** là tốt ÷ tổng trong cửa sổ, luôn làm tròn xuống, để một giá trị sát dưới mục tiêu không bao giờ trông như đã đạt.

## 3. Thời gian không rõ không bao giờ được tính là tốt

Có những phút không thể đánh giá: node offline, một lượt uptime có quá ít vùng báo về, nguồn đang tạm dừng, hoặc không có gì chạy. Belvador **bỏ những phút đó ra khỏi cả tốt lẫn tổng** — chúng không bao giờ được tính là tốt.

**Độ phủ** là tỉ lệ cửa sổ Belvador đo được. Dưới 90 %, SLO hiện **Chưa đủ dữ liệu** thay vì một con số, và không gửi cảnh báo. Khoảng trống được vẽ thành khoảng trống trên biểu đồ ngân sách.

## 4. Trạng thái

| Trạng thái | Ý nghĩa |
|---|---|
| **Trong ngân sách** | Đốt chậm hơn mọi ngưỡng cảnh báo |
| **Đang đốt** | Vượt ngưỡng đốt chậm (ticket) |
| **Đốt nhanh** | Vượt ngưỡng đốt nhanh (gọi khẩn) |
| **Hết ngân sách** | Cửa sổ không còn ngân sách |
| **Chưa đủ dữ liệu** | Độ phủ dưới 90 %, hoặc thời gian đã đo còn quá ít |
| **Tạm dừng** | Không đánh giá, không cảnh báo, đến thời điểm bạn chọn hoặc đến khi bạn tiếp tục |

## 5. Sửa SLO

Mỗi lần lưu tạo một **phiên bản** mới, liệt kê trên trang SLO. Đổi tên, mô tả, mục tiêu, cửa sổ hay chính sách cảnh báo thì giữ nguyên lịch sử. Đổi **thứ được đếm** — nguồn, bộ lọc, chỉ số, ngưỡng độ trễ, hoặc có tính nguồn công khai hay không — thì ngân sách tính lại từ lúc đó, vì số đếm cũ không còn cùng ý nghĩa. Form cảnh báo trước khi bạn lưu.

SLO [nhập từ tệp OpenSLO](https://belvador.dev/vi/docs/slos/openslo) chỉ đổi được bằng cách nhập lại tệp.

## 6. Nguồn công khai

Một số dữ liệu có thể được gửi bằng khoá vốn công khai — ví dụ check-in gửi bằng DSN trình duyệt. Bất kỳ ai đọc được trang của bạn đều có thể gửi giá trị giả và làm lệch SLO. Dữ liệu đó **không được đếm** trừ khi bạn bật **Cho phép nguồn công khai** cho SLO đó; SLO khi ấy mang nhãn cảnh báo.

## 7. Dữ liệu SLO nằm ở đâu

- **Belvador giữ:** định nghĩa và các phiên bản, và **chỉ số đếm** — với mỗi SLO và mỗi phút, bao nhiêu tốt và bao nhiêu được đếm. Số đếm theo phút giữ 3 ngày, theo giờ giữ 90 ngày. Cửa sổ đến 6 giờ được đánh giá bằng số đếm theo phút, cửa sổ dài hơn bằng số đếm theo giờ. Trạng thái và lịch sử cảnh báo được giữ cùng.
- **Không bao giờ gửi về Belvador:** nội dung span, nội dung check-in hay bất cứ thứ gì khác trên node của bạn. Với SLO monitor và span, node chỉ nhận id và bộ lọc của SLO, đếm tại chỗ, rồi gửi `(id SLO, tốt, tổng)` mỗi phút. Node không biết tên SLO.
- Span được đếm 3 phút sau khi mỗi phút kết thúc, để các lô đến muộn vẫn rơi đúng phút.

## 8. Chưa có ở phiên bản này

Cửa sổ theo tháng dương lịch, SLO gộp nhiều nguồn, trọng số theo tỉ lệ lấy mẫu và lịch loại trừ chưa được hỗ trợ. Với bảo trì có kế hoạch, hãy [tắt tiếng hoặc tạm dừng](https://belvador.dev/vi/docs/slos/alerts#tam-dung-va-tat-tieng) SLO.
