Đặc tả Kỹ thuật API

API Logger
LOG
Phiên bản1.0
Base URLhttps://api.example.com/v1
Hệ thốngHệ thống Xác thực
ModuleLOG - Logger
Ngày tạo2026-08-05
Tác giảNam Nguyen
SRS liên quanSRS Logger

Mục lục

1. Tổng quan

1.1 Yêu cầu được giải quyết

Yêu cầu SRSEndpoint API
FR-001 Thu thập Sự kiện LogRabbitMQ consumer (nội bộ)
FR-002 Truy vấn LogGET /logs, GET /logs/:id
FR-003 Phân tích LogGET /logs/analytics
FR-004 Giám sát Thời gian thựcWebSocket /ws/logs

1.2 Xác thực

Tất cả endpoint yêu cầu xác thực JWT cấp admin.

2. Định dạng Phản hồi

2.1 Phản hồi Thành công

{
  "success": true,
  "data": { ... },
  "meta": {
    "requestId": "req-abc-123",
    "timestamp": "2026-07-24T10:30:00Z"
  }
}

2.2 Phản hồi Lỗi

{
  "success": false,
  "error": {
    "code": "QUERY_FAILED",
    "message": "Không thể truy vấn log từ OpenSearch"
  }
}

3. Endpoints

3.1 Truy vấn Log

GET /logs FR-002

Truy vấn log với bộ lọc.

Tham số Query:

Tham sốLoạiMô tả
levelstringLọc theo mức độ: debug, info, warn, error
sourcestringLọc theo dịch vụ nguồn (auth, sms, v.v.)
actionstringLọc theo hành động (login, register, v.v.)
userIdstringLọc theo mã người dùng
traceIdstringLọc theo mã truy vết
fromdatetimeThời gian bắt đầu (ISO 8601)
todatetimeThời gian kết thúc (ISO 8601)
searchstringTìm kiếm toàn văn trong message
pageintSố trang (mặc định: 1)
limitintSố kết quả mỗi trang (mặc định: 20, tối đa: 100)

Phản hồi 200:

{
  "success": true,
  "data": [
    {
      "eventId": "evt-uuid-123",
      "source": "auth",
      "level": "info",
      "action": "login",
      "message": "Người dùng đã đăng nhập thành công",
      "userId": "user-uuid-456",
      "traceId": "trace-uuid-789",
      "timestamp": "2026-07-24T10:30:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 1500,
    "totalPages": 75
  }
}

GET /logs/:eventId

Lấy sự kiện log theo mã.

Phản hồi 200:

{
  "success": true,
  "data": {
    "eventId": "evt-uuid-123",
    "source": "auth",
    "level": "info",
    "action": "login",
    "message": "Người dùng đã đăng nhập thành công",
    "input": "{\"email\":\"[email protected]\"}",
    "output": "{\"userId\":\"123\",\"token\":\"...\"}",
    "userId": "user-uuid-456",
    "traceId": "trace-uuid-789",
    "timestamp": "2026-07-24T10:30:00Z"
  }
}

3.2 Phân tích

GET /logs/analytics FR-003

Lấy tổng hợp phân tích log.

Tham số Query:

Tham sốLoạiMô tả
fromdatetimeThời gian bắt đầu
todatetimeThời gian kết thúc
intervalstringKhoảng tổng hợp: minute, hour, day

Phản hồi 200:

{
  "success": true,
  "data": {
    "totalEvents": 150000,
    "byLevel": {
      "info": 120000,
      "warn": 25000,
      "error": 5000
    },
    "bySource": {
      "auth": 100000,
      "sms": 50000
    },
    "timeline": [
      { "timestamp": "2026-07-24T10:00:00Z", "count": 500 },
      { "timestamp": "2026-07-24T11:00:00Z", "count": 750 }
    ]
  }
}

3.3 Phát trực tuyến Thời gian thực

WebSocket /ws/logs FR-004

Phát trực tuyến log thời gian thực qua WebSocket.

Kết nối:

ws://api.example.com/ws/logs?token=jwt_token&level=error&source=auth

Định dạng Tin nhắn:

{
  "type": "log",
  "data": {
    "eventId": "evt-uuid-123",
    "source": "auth",
    "level": "error",
    "message": "Đăng nhập thất bại",
    "timestamp": "2026-07-24T10:30:00Z"
  }
}

4. Mã lỗi

HTTP StatusMã lỗiMô tả
400VALIDATION_ERRORTham số query không hợp lệ
401UNAUTHORIZEDYêu cầu xác thực admin
404LOG_NOT_FOUNDKhông tìm thấy sự kiện log
500QUERY_FAILEDKhông thể truy vấn OpenSearch
503OPENSEARCH_UNAVAILABLEOpenSearch bị tắt