Thiết kế Kỹ thuật

Module Logger
LOG
Phiên bản1.0
Hệ thốngHệ thống Xác thực
ModuleLOG - Logger
Ngày tạo2026-08-05
Tác giảNam Nguyen
Trạng tháiNháp
SRS liên quanSRS Logger

Mục lục

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ụcMã Yêu cầuPhần Thiết kế
Chức năngFR-001 - FR-004Phần 3, 5
Phi chức năngNFR-001 - NFR-004Phần 2, 5

2. Kiến trúc

2.1 Kiểu Kiến trúc

Khía cạnhQuyết địnhGiải quyết
MẫuConsumer Driving bởi Sự kiệnNFR-001
Hàng đợi Tin nhắnRabbitMQ (hàng đợi: log.events)FR-001
Kho lưu trữ ChínhOpenSearch (chỉ mục: log-events)FR-002, NFR-002
APINestJS REST + WebSocketFR-002, FR-004

2.2 Quyết định Thiết kế Chính

#Quyết địnhLý doGiải quyết
1OpenSearch 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
2RabbitMQ để thu thập Bộ đệm sự kiện, tách người gửi khỏi người tiêu thụ NFR-001
3Khô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

Sơ đồ Thành phần LOG
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ầnTrách nhiệmGiải quyết
LogConsumerTiêu thụ từ RabbitMQ, chỉ mục lên OpenSearchFR-001
LogServiceTruy vấn, tổng hợp, tìm kiếm logFR-002, FR-003
LogControllerREST API cho truy vấn logFR-002
LogGatewayWebSocket để phát trực tuyến thời gian thựcFR-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

Sơ đồ Sequence 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

Sơ đồ Sequence AUTH-LOG
Hình 2: Tích hợp Module AUTH với Logger

5.3 Luồng Truy vấn Log

Sơ đồ Sequence Truy vấn
Hình 3: Luồng API Truy vấn Log

5.4 Quy trình Thu thập Log

Sơ đồ Hoạt động Log
Hình 4: Quy trình Thu thập Log

5.5 Sự kiện Đầu vào

Sự kiệnTừGiao thứcHàng đợiMô tả
auth.event.loggedAUTHRabbitMQlog.eventsSự kiện xác thực (đăng nhập, đăng xuất, đăng ký)
sms.event.loggedSMSRabbitMQlog.eventsSự kiện gửi SMS
email.event.loggedEMAILRabbitMQlog.eventsSự kiện gửi email
recruitment.event.loggedRECRRabbitMQlog.eventsSự kiện tuyển dụng (hồ sơ, phỏng vấn, đề nghị)
wallet.event.loggedWALLETRabbitMQlog.eventsSự 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ứcMục đích
OpenSearchREST APIChỉ mục và truy vấn log
RabbitMQAMQPTiêu thụ sự kiện log

6. Tóm tắt Truy suất

Mã YC SRSYêu cầuPhần TDSQuyết định Thiết kế
FR-001Thu thập Sự kiện Log3.2, 5.2LogConsumer + RabbitMQ + OpenSearch
FR-002Truy vấn Log3.2, 4.2LogService + OpenSearch Query API
FR-003Phân tích Log3.2, 4.2OpenSearch Aggregations
FR-004Giám sát Thời gian thực3.2LogGateway (WebSocket)
NFR-00110k sự kiện/giây2.1RabbitMQ batching + OpenSearch bulk API
NFR-002Truy vấn < 500ms2.2OpenSearch indexing + caching
NFR-004Lưu trữ 90 ngày2.2ISM policy trong OpenSearch