Phân tích log máy chủ API

Phân tích access log nginx / Apache (combined, common, log_format tuỳ chỉnh), syslog và JSON lines thành bảng, thống kê IP, URL, mã lỗi, bot.

POSThttps://apibox.io.vn/v1/log-parse
Tiện ích lập trình▶ Dùng thử online

Gửi log qua log dạng văn bản, body text/plain hoặc file multipart (tối đa 200.000 dòng). format được tự nhận diện: combined và common (mặc định của nginx / Apache), syslog (RFC 3164 và RFC 5424) hoặc json (mỗi dòng một đối tượng JSON, nhận các tên trường phổ biến như remote_addr, status, request, httpRequest.status). Với định dạng riêng, truyền chuỗi log_format của nginx ($remote_addr … "$request" $status … $request_time) hoặc LogFormat của Apache (%h %l %u %t "%r" %>s %b %D).

Mỗi dòng kết quả có các trường đã tách cùng time (ISO 8601 UTC), method, path, protocol, và với bot là bot cùng nhóm bot AI. stats gồm khoảng thời gian, số request theo giờ, phút cao điểm, số IP, dung lượng, mã trạng thái và nhóm mã, số lỗi 4xx / 5xx kèm URL lỗi nhiều nhất, top IP, URL, referrer, user agent, trình duyệt và hệ điều hành (ua-parser-js), số request từ bot và crawler AI (danh sách ai.robots.txt); với syslog: mức độ, facility, host và ứng dụng.

Lọc bằng status (404, 4xx, 5xx), chọn số dòng trả về limit (mặc định 500, tối đa 10.000; thống kê luôn tính trên toàn bộ) và độ dài danh sách top. Dòng syslog RFC 3164 không có năm: đặt year. Dòng không khớp được đếm trong failed kèm số dòng.

Tham số

TênVị tríKiểuBắt buộcMặc định
logbodystringkhôngNội dung log (hoặc gửi body text/plain hay file multipart).
filebodyfilekhôngFile log tải lên.
formatbody|querystringkhôngautoauto, combined, common, syslog, json (hoặc nginx / apache kèm log_format).
log_formatbody|querystringkhôngChuỗi log_format của nginx hoặc LogFormat của Apache cho định dạng riêng.
statusbody|querystringkhôngChỉ giữ một mã (404) hoặc nhóm mã (4xx, 5xx).
limitbody|querynumberkhông500Số dòng đã phân tích trả về (0-10.000).
topbody|querynumberkhông10Độ dài các danh sách top (1-100).
yearbody|querynumberkhôngcurrent yearNăm cho dòng syslog RFC 3164 (định dạng này không có năm).

Ví dụ

curl -X POST "https://apibox.io.vn/v1/log-parse" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"log":"203.0.113.5 - - [11/Nov/2026:08:15:02 +0700] \"GET /san-pham/ao-thun?page=2 HTTP/1.1\" 200 5120 \"https://www.google.com/\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\"\n66.249.66.1 - - [11/Nov/2026:08:16:00 +0700] \"GET /robots.txt HTTP/1.1\" 200 120 \"-\" \"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\"\n…","limit":1}'

Kết quả trả về

{
  "format": "combined",
  "lines": 7,
  "parsed": 6,
  "failed": 1,
  "failed_lines": [
    7
  ],
  "truncated_input": false,
  "stats": {
    "time_range": {
      "from": "2026-11-11T01:15:02.000Z",
      "to": "2026-11-11T01:16:46.000Z"
    },
    "requests_per_hour": {
      "2026-11-11T01:00Z": 6
    },
    "peak_minute": {
      "minute": "2026-11-11T01:16Z",
      "count": 4
    },
    "average_per_minute": 2.2,
    "unique_ips": 4,
    "bytes_sent": 26039,
    "status_classes": {
      "2xx": 3,
      "3xx": 1,
      "4xx": 1,
      "5xx": 1
    },
    "status_codes": {
      "200": 3,
      "302": 1,
      "404": 1,
      "502": 1
    },
    "errors_4xx": 1,
    "errors_5xx": 1,
    "methods": {
      "GET": 5,
      "POST": 1
    },
    "top_ips": [
      {
        "ip": "203.0.113.5",
        "count": 2
      },
      {
        "ip": "198.51.100.7",
        "count": 2
      },
      "…"
    ],
    "top_paths": [
      {
        "path": "/san-pham/ao-thun",
        "count": 1
      },
      "…"
    ],
    "top_4xx": [
      {
        "request": "404 /wp-login.php",
        "count": 1
      }
    ],
    "top_5xx": [
      {
        "request": "502 /api/orders",
        "count": 1
      }
    ],
    "browsers": [
      {
        "browser": "Chrome",
        "count": 2
      }
    ],
    "bot_requests": 4,
    "top_bots": [
      {
        "bot": "Googlebot",
        "count": 1
      },
      {
        "bot": "GPTBot",
        "count": 1
      },
      {
        "bot": "python-requests",
        "count": 1
      },
      "…"
    ],
    "ai_bots": [
      {
        "bot": "GPTBot (training)",
        "count": 1
      }
    ],
    "…": "…"
  },
  "rows_returned": 1,
  "rows": [
    {
      "remote_addr": "203.0.113.5",
      "ident": null,
      "remote_user": null,
      "time_local": "11/Nov/2026:08:15:02 +0700",
      "request": "GET /san-pham/ao-thun?page=2 HTTP/1.1",
      "status": 200,
      "body_bytes_sent": 5120,
      "http_referer": "https://www.google.com/",
      "http_user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) … Chrome/130.0.0.0 Safari/537.36",
      "time": "2026-11-11T01:15:02.000Z",
      "method": "GET",
      "path": "/san-pham/ao-thun?page=2",
      "protocol": "HTTP/1.1"
    }
  ]
}

Ứng dụng

  • Tìm các URL trả về lỗi 404 hoặc 5xx sau khi triển khai
  • Xem bot và crawler AI nào (GPTBot, ClaudeBot…) truy cập site và tần suất
  • Chuyển access log nginx sang JSON để đưa vào bảng tính hoặc công cụ BI
  • Phát hiện IP lạm dụng và đỉnh request theo phút khi có sự cố

Hỏi đáp

nginx của tôi dùng log_format tuỳ chỉnh, có được không?

Được. Dán chuỗi log_format (phần sau tên định dạng) vào log_format; mỗi $biến trở thành một trường cùng tên. Các chỉ thị LogFormat của Apache (%h, %t, %r, %>s, %b, %D, %{User-Agent}i…) cũng được hỗ trợ.

Log tối đa bao lớn?

Theo giới hạn dung lượng file của gói và tối đa 200.000 dòng không rỗng mỗi yêu cầu. Hãy chia nhỏ hoặc lọc log lớn (ví dụ theo ngày) trước.

Bot được nhận diện thế nào?

User agent được so với danh sách crawler AI của ai.robots.txt và các mẫu bot / crawler / HTTP client phổ biến; user agent còn lại được nhóm theo trình duyệt và hệ điều hành bằng ua-parser-js.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →