Thiết kế Kỹ thuật
Module Logger
LOG
1. Tổng quan
1.1 Mục đích
Tài liệu này mô tả các quyết định thiết kế kỹ thuật cho module Logger.
1.2 Yêu cầu được giải quyết
| Danh mục | Mã Yêu cầu | Phần Thiết kế |
| Chức năng | FR-001 - FR-004 | Phần 3, 5 |
| Phi chức năng | NFR-001 - NFR-004 | Phần 2, 5 |
2. Kiến trúc
2.1 Kiểu Kiến trúc
| Khía cạnh | Quyết định | Giải quyết |
| Mẫu | Consumer Driving bởi Sự kiện | NFR-001 |
| Hàng đợi Tin nhắn | RabbitMQ (hàng đợi: log.events) | FR-001 |
| Kho lưu trữ Chính | OpenSearch (chỉ mục: log-events) | FR-002, NFR-002 |
| API | NestJS REST + WebSocket | FR-002, FR-004 |
2.2 Quyết định Thiết kế Chính
| # | Quyết định | Lý do | Giải quyết |
| 1 | OpenSearch làm kho lưu trữ chính |
Tìm kiếm toàn văn, tổng hợp, bảng điều khiển |
FR-002, FR-003 |
| 2 | RabbitMQ để thu thập |
Bộ đệm sự kiện, tách người gửi khỏi người tiêu thụ |
NFR-001 |
| 3 | Không dùng PostgreSQL |
OpenSearch xử lý tìm kiếm, phân tích và lưu trữ |
NFR-004 |
3. Thiết kế Thành phần
3.1 Sơ đồ Thành phần
Hình 1: Các Thành phần Module LOG
3.2 Cấu trúc Module
src/
log/
log.module.ts
log.controller.ts # Query API
log.service.ts # OpenSearch operations
log.consumer.ts # RabbitMQ consumer
log.gateway.ts # WebSocket gateway
dto/
3.3 Ánh xạ Thành phần đến Yêu cầu
| Thành phần | Trách nhiệm | Giải quyết |
| LogConsumer | Tiêu thụ từ RabbitMQ, chỉ mục lên OpenSearch | FR-001 |
| LogService | Truy vấn, tổng hợp, tìm kiếm log | FR-002, FR-003 |
| LogController | REST API cho truy vấn log | FR-002 |
| LogGateway | WebSocket để phát trực tuyến thời gian thực | FR-004 |
4. Kiến trúc Dữ liệu
4.1 Cơ sở dữ liệu
Kho lưu trữ Chính: OpenSearch (chỉ mục: log-events)
Xem thêm: Thiết kế Cơ sở dữ liệu
4.2 Schema Chỉ mục
{
"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" }
}
}
}
5. Luồng Tích hợp
5.1 Luồng Thu thập Log
Hình 1: Pipeline Sự kiện Log - Luồng Thu thập
5.2 Tích hợp AUTH với LOG
Hình 2: Tích hợp Module AUTH với Logger
5.3 Luồng Truy vấn Log
Hình 3: Luồng API Truy vấn Log
5.4 Quy trình Thu thập Log
Hình 4: Quy trình Thu thập Log
5.5 Sự kiện Đầu vào
| Sự kiện | Từ | Giao thức | Hàng đợi | Mô tả |
| auth.event.logged | AUTH | RabbitMQ | log.events | Sự kiện xác thực (đăng nhập, đăng xuất, đăng ký) |
| sms.event.logged | SMS | RabbitMQ | log.events | Sự kiện gửi SMS |
| email.event.logged | EMAIL | RabbitMQ | log.events | Sự kiện gửi email |
| recruitment.event.logged | RECR | RabbitMQ | log.events | Sự kiện tuyển dụng (hồ sơ, phỏng vấn, đề nghị) |
| wallet.event.logged | WALLET | RabbitMQ | log.events | Sự kiện ví (nạp, rút, chuyển, thanh toán) |
5.6 Dịch vụ Bên ngoài
| Dịch vụ | Giao thức | Mục đích |
| OpenSearch | REST API | Chỉ mục và truy vấn log |
| RabbitMQ | AMQP | Tiêu thụ sự kiện log |
6. Tóm tắt Truy suất
| Mã YC SRS | Yêu cầu | Phần TDS | Quyết định Thiết kế |
| FR-001 | Thu thập Sự kiện Log | 3.2, 5.2 | LogConsumer + RabbitMQ + OpenSearch |
| FR-002 | Truy vấn Log | 3.2, 4.2 | LogService + OpenSearch Query API |
| FR-003 | Phân tích Log | 3.2, 4.2 | OpenSearch Aggregations |
| FR-004 | Giám sát Thời gian thực | 3.2 | LogGateway (WebSocket) |
| NFR-001 | 10k sự kiện/giây | 2.1 | RabbitMQ batching + OpenSearch bulk API |
| NFR-002 | Truy vấn < 500ms | 2.2 | OpenSearch indexing + caching |
| NFR-004 | Lưu trữ 90 ngày | 2.2 | ISM policy trong OpenSearch |