Tài liệu Thiết kế Cơ sở dữ liệu
Module Logger
LOG
1. Tổng quan
1.1 Mục đích
Tài liệu này định nghĩa thiết kế lưu trữ dữ liệu cho module Logger. Khác với các module khác dùng PostgreSQL, module Logger dùng OpenSearch làm kho lưu trữ chính cho tìm kiếm toàn văn, phân tích và bảng điều khiển.
1.2 Chiến lược Cơ sở dữ liệu
| Khía cạnh | Quyết định |
| Cơ sở dữ liệu | OpenSearch (kho lưu trữ chính) |
| Chỉ mục | log-events |
| Khóa chính | eventId (UUID) |
| Trường thời gian | timestamp (ISO 8601) |
| Thời gian lưu trữ | 90 ngày (có thể cấu hình qua ISM policy) |
1.3 Yêu cầu được giải quyết
| Yêu cầu SRS | Giải pháp Cơ sở dữ liệu |
| FR-001 Thu thập Sự kiện Log | Chỉ mục OpenSearch để lưu log |
| FR-002 Truy vấn Log | Tìm kiếm toàn văn qua OpenSearch |
| FR-003 Phân tích Log | Tổng hợp OpenSearch |
| FR-004 Giám sát Thời gian thực | OpenSearch change feed + WebSocket |
| NFR-002 Thời gian Phản hồi Truy vấn | Chỉ mục keyword cấp trường để lọc nhanh |
| NFR-004 Lưu trữ Log | ISM policy: vòng đời 90 ngày (hot/warm/cold/xóa) |
1.4 Sơ đồ Schema Chỉ mục
Hình 1: Module Logger - Schema Chỉ mục OpenSearch
2. Schema Chỉ mục
2.1 Chỉ mục: log-events
{
"index": "log-events",
"mappings": {
"properties": {
"eventId": { "type": "keyword" },
"source": { "type": "text", "fields": { "keyword": { "type": "keyword" } } },
"level": { "type": "keyword" },
"action": { "type": "keyword" },
"message": { "type": "text" },
"input": { "type": "text" },
"output": { "type": "text" },
"error": { "type": "text" },
"exception": { "type": "text" },
"metadata": { "type": "object", "enabled": true },
"traceId": { "type": "keyword" },
"userId": { "type": "keyword" },
"timestamp": { "type": "date" }
}
}
}
3. Ánh xạ Trường
| Trường | Loại | Tìm kiếm được | Mô tả |
eventId | keyword | Chính xác | Mã định danh sự kiện duy nhất (UUID) |
source | text + keyword | Toàn văn + Chính xác | Tên dịch vụ gửi (auth, sms, v.v.) |
level | keyword | Chính xác | Mức độ log: debug, info, warn, error |
action | keyword | Chính xác | Hành động sự kiện (login, register, send_otp, v.v.) |
message | text | Toàn văn | Thông báo log dễ đọc |
input | text | Toàn văn | Dữ liệu đầu vào dưới dạng chuỗi JSON |
output | text | Toàn văn | Kết quả thành công dưới dạng chuỗi JSON |
error | text | Toàn văn | Thông báo lỗi khi thất bại |
exception | text | Toàn văn | Ngoại lệ với stack trace |
metadata | object | Lồng nhau | Dữ liệu ngữ cảnh bổ sung |
traceId | keyword | Chính xác | Mã truy vết phân tán |
userId | keyword | Chính xác | Mã người dùng liên kết |
timestamp | date | Khoảng | Thời gian sự kiện (ISO 8601) |
4. Vòng đời Chỉ mục
| Giai đoạn | Hành động | Điều kiện |
| Hot | Chỉ mục tài liệu | Mặc định |
| Warm | Gộp bắt buộc, thu nhỏ | Sau 7 ngày |
| Cold | Chỉ đọc, nén | Sau 30 ngày |
| Delete | Xóa chỉ mục | Sau 90 ngày |
5. Từ điển Dữ liệu
| Chỉ mục | Mô tả | Giải quyết | Ước tính Tài liệu (Năm 1) |
| log-events | Log ứng dụng từ tất cả dịch vụ | FR-001, FR-002, FR-003, FR-004 | 10.000.000 |
6. Sao lưu & Phục hồi
| Loại | Tần suất | Phương pháp |
| Snapshot | Hàng ngày | OpenSearch Snapshot API lên S3 |
| Phục hồi Chỉ mục | Theo yêu cầu | Khôi phục từ snapshot |
7. Tối ưu Hiệu suất
| Cài đặt | Giá trị | Mô tả |
| Refresh Interval | 30s | Chỉ mục batch để tối ưu throughput |
| Số lượng Shard | 3 | Dựa trên khối lượng dữ liệu |
| Số lượng Replica | 1 | Khả dụng cao |
| Heap Size | 4GB | 50% RAM khả dụng (tối đa 32GB) |