Event, issue và cách xử lý
Lỗi được gom thành issue thế nào, các trạng thái, tìm kiếm, lọc, gán người và lưu trữ.
Một event là một lần báo lỗi từ ứng dụng. Một issue là mọi event có cùng nguyên nhân, được gom lại — một bug xảy ra 3.000 lần là một issue với 3.000 event. Bạn xử lý issue, không xử lý từng event.
Lỗi được gom nhóm thế nào#
Node tính một fingerprint cho mỗi event:
Có stack trace: loại exception cộng tối đa 30 frame trong app mới nhất — mỗi frame lấy tên module hoặc file và tên hàm. Không dùng số dòng và cột, nên issue không bị tách khi code thay đổi nhỏ.
Không có stack trace: loại exception và message của nó, hoặc chỉ message.
Trước khi so sánh, các phần hay thay đổi được chuẩn hoá: UUID, email, địa chỉ IP, số và chuỗi hex dài, đường dẫn tạm và query string trong URL.
User 123 not foundvàUser 456 not foundthành một issue.
Phiên bản thuật toán gom nhóm (hiện là belvador:2026-10) được lưu trên mỗi issue. Phiên bản sau chỉ áp dụng cho event mới; issue đã có không bao giờ bị gom lại.
Tự đặt cách gom nhóm#
Đặt fingerprint khi cách gom mặc định gộp quá nhiều hoặc tách quá nhỏ:
import { captureException, withScope } from "@belvador/browser";withScope((scope) => { // Mọi lỗi của một cổng thanh toán thành một issue. scope.setFingerprint(["payment-provider-down", provider]); captureException(error);});Thêm "{{ default }}" vào danh sách để tinh chỉnh cách gom mặc định thay vì thay thế nó.
Trạng thái#
| Trạng thái | Ý nghĩa |
|---|---|
| Chưa xử lý | Cần xem. Trạng thái con: Mới, Đang diễn ra, Đang tăng, Tái phát |
| Đã xử lý | Đã sửa. Event mới hơn sẽ đưa issue trở lại với trạng thái Tái phát |
| Lưu trữ | Chủ động ẩn đi, tới khi đạt điều kiện bạn chọn — hoặc vĩnh viễn |
Issue Đang tăng khi có ít nhất 10 event trong 60 phút qua và ít nhất gấp năm lần trung bình mỗi giờ của 7 ngày trước đó. Event được đếm khi tới, nên một job báo mọi lần thử lại sẽ chạm ngưỡng này sớm hơn job chỉ báo lần hỏng cuối (thử lại).
Issue cũng có Ưu tiên: Cao, Vừa hoặc Thấp.
Thao tác#
Mở menu thao tác trên một issue, hoặc chọn nhiều issue trong danh sách (tối đa 100 cùng lúc):
| Thao tác | Tác dụng |
|---|---|
| Xử lý xong ngay | Đánh dấu đã sửa. Event sau đó sẽ mở lại issue với trạng thái Tái phát. |
| Xong ở release tiếp theo | Chỉ mở lại khi lỗi xuất hiện ở release mới hơn release lúc bạn đánh dấu — dùng khi bản sửa sẽ triển khai sau. Cần đặt release trong SDK. |
| Mở lại | Trở về Chưa xử lý. |
| Lưu trữ | Tới khi tăng mạnh, Tới khi có thêm 100 event, Tới khi thêm 10 người bị ảnh hưởng, Trong 24 giờ, Trong 7 ngày hoặc Vĩnh viễn. Khi đạt điều kiện, issue quay lại. |
| Gán cho tôi / gán cho thành viên / Bỏ gán | Ai đang xem issue này. Không gán được cho viewer. |
| Ưu tiên | Cao, Vừa hoặc Thấp. |
Member, admin và owner đổi được issue; viewer chỉ xem.
Tìm issue#
Ô tìm kiếm (bấm / để chuyển tới) tìm chữ trong tiêu đề, culprit, message, giá trị exception và stack trace, không phân biệt hoa thường. Mã ngắn của issue — ví dụ WEB-1Z — mở thẳng issue đó.
Không có ngôn ngữ truy vấn: những từ như is:unresolved hay tag:browser được tìm như chữ thường. Hãy dùng bộ lọc:
| Bộ lọc | Giá trị |
|---|---|
| Project | Một, nhiều hoặc mọi project |
| Trạng thái | Chưa xử lý (mặc định), Đã xử lý, Lưu trữ |
| Mức độ | Nghiêm trọng, Lỗi, Cảnh báo, Thông tin, Gỡ lỗi |
| Ưu tiên | Cao, Vừa, Thấp |
| Môi trường | Mọi môi trường node đã thấy |
| Người xử lý | Bất kỳ ai, Tôi, Chưa gán, một thành viên |
| Khoảng thời gian | 1 giờ, 24 giờ (mặc định), 7, 14 hoặc 30 ngày |
| Sắp xếp | Gần đây nhất (mặc định), Xuất hiện đầu, Số event, Số người, Ưu tiên |
Bộ lọc nằm trong địa chỉ trang, nên bạn đánh dấu hoặc chia sẻ được một góc nhìn. Với khoảng thời gian dài, việc tìm trong nội dung event có thể dừng sớm để giữ tốc độ; tiêu đề luôn được tìm đầy đủ, và trang sẽ báo khi điều đó xảy ra.
Chi tiết issue#
Stack trace — chọn Trong app, Mọi khung hoặc Thô. Frame từ code đã thu nhỏ có nhãn Bản thu nhỏ cho tới khi source map khôi phục được.
Breadcrumb — các bước trước khi lỗi xảy ra, nếu SDK có ghi.
Tag và Ngữ cảnh — những gì ứng dụng và SDK gắn vào, sau khi đã lọc.
Tệp đính kèm — luôn tải về được. Tệp PNG, JPEG, GIF và WebP, nhận diện theo nội dung byte, còn xem trước được; SVG và mọi loại khác chỉ tải về, không bao giờ mở trong trang.
Mọi thứ trong event đều do một ứng dụng gửi lên và được hiển thị dạng chữ thuần — liên kết từ dữ liệu event mở qua một trang cảnh báo.
Bài viết về chủ đề này
Tất cả bài viết- Job thử lại, lỗi bị báo trùng: mỗi lần thử gửi gì cho công cụ theo dõi lỗiMột background job được thử lại gửi bao nhiêu event lỗi, chúng gom vào issue thế nào, vì sao Dedupe không lọc được lần thử, và cách chỉ báo lần hỏng cuối.
- Kết luận nguyên nhân gốc của AI cần bằng chứng chạy đượcVì sao test đi kèm bản sửa của AI chưa phải bằng chứng: 10 bản sửa sai đều có test pass. Cần đòi bằng chứng tái hiện nào trước khi tin một nguyên nhân gốc.
- Debug lỗi production bằng AI coding agent: cần đưa gì cho nóAI coding agent cần gì để sửa đúng lỗi production: stack trace, vài dòng code và dữ liệu đầu vào. Thí nghiệm 108 lần với năm cách đưa cùng một lỗi.
Thấy chỗ sai hoặc thiếu? Gửi cho chúng tôi: hello@belvador.dev