本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 NDJSON 端點傳送日誌 (ND-JSON 日誌)
ND-JSON Logs 端點 (/ingest/bulk) 接受 NDJSON (換行分隔 JSON) 格式的
如果您使用承載字符身分驗證,請先完成 中的設定步驟,設定承載字符身分驗證再繼續。
要求格式
每行傳送一個 JSON 值,以 \n(LF) 或 \r\n(CRLF) 分隔。空白行會被無提示地忽略。
{"timestamp":1771007942000,"message":"event one","level":"INFO"} {"timestamp":1771007943000,"message":"event two","level":"ERROR"} {"timestamp":1771007944000,"message":"event three","level":"DEBUG"}
application/json 和 都application/x-ndjson被接受為 Content-Type。
接受的 JSON 值類型
根據 NDJSON 規格 (RFC 8259),每行接受任何有效的 JSON 值。
JSON 物件 (最常見):
{"timestamp":1771007942000,"message":"User logged in","service":"auth"} {"timestamp":1771007943000,"error":"Connection timeout","service":"api"}
JSON 陣列 (扁平化為個別事件):
[{"timestamp":1000,"message":"a"},{"timestamp":2000,"message":"b"}]
此單行會產生 2 個事件。每個陣列元素都會成為個別的日誌事件。
基本值:
"a plain string log message" 42 true null
每個基本會成為具有伺服器目前時間戳記的專屬事件。
混合類型:
{"timestamp":1771007942000,"message":"structured event"} "unstructured string message" 42 {"timestamp":1771007943000,"error":"something failed"}
所有 4 行都被接受為有效事件。
| 行內容 | Behavior (行為) |
|---|---|
| JSON 物件 | 已接受,如果有的話擷取時間戳記 |
| JSON 陣列 | 平面化 – 每個元素都會成為個別的事件 |
空陣列 [] |
已接受,會產生 0 個事件 |
| JSON 字串 | 接受為事件訊息 |
| JSON 號碼 | 接受為事件訊息 |
| JSON 布林值 | 接受為事件訊息 |
| JSON null | 接受為事件訊息 |
| 無效的 JSON | 已略過 (已計算,處理會繼續) |
| 空行 | 已忽略 (未計為略過) |
時間戳記欄位
"timestamp" 欄位以 epoch 毫秒 (非秒) 為單位。
| 格式 | 範例 | 解譯為 |
|---|---|---|
| 數值 (毫秒) | "timestamp":1771007942000 |
1771007942000 毫秒 |
| 缺少 | (無時間戳記欄位) | 伺服器目前時間 |
| 非數值 | "timestamp":"invalid" |
伺服器目前時間 |
| 非物件行 | "hello", 42, true |
伺服器目前時間 |
無效的行
非有效 JSON 的行會無提示地略過並計數。處理會繼續進行下一行。
{"message":"valid event"} this is not valid json {"message":"another valid event"}
結果:擷取 2 個事件,略過 1 個事件。傳回 HTTP 200。
如果所有行都無效, 會傳回 HTTP 400與 "All events were invalid"。
範例請求
curl -X POST "https://logs.<region>.amazonaws.com/ingest/bulk?logGroup=MyLogGroup&logStream=MyStream" \ -H "Authorization: Bearer ACWL<token>" \ -H "Content-Type: application/x-ndjson" \ -d '{"timestamp":1771007942000,"message":"User logged in","level":"INFO"} {"timestamp":1771007943000,"message":"Query took 42ms","level":"DEBUG"} {"timestamp":1771007944000,"error":"Connection refused","level":"ERROR"}'
回應
成功 (接受所有事件):
HTTP 200 OK {}
部分成功 (部分事件遭到拒絕):
{ "partialSuccess": { "rejectedLogRecords": 5, "errorMessage": "{\"tooOldLogEventCount\": 3, \"tooNewLogEventCount\": 1, \"expiredLogEventCount\": 1}" } }
rejectedLogRecords 欄位是已拒絕事件的總數。errorMessage 欄位包含依拒絕原因分類的 JSON 編碼明細:
tooOldLogEventCount– 時間戳記早於保留期間的事件tooNewLogEventCount– 未來時間戳記太久的事件expiredLogEventCount– 處理期間過期的事件
最佳實務
批次處理事件
為了獲得更好的效能和效率:
盡可能在單一請求中批次處理多個事件
建議的批次大小:每個請求 10–100 個事件
請求大小上限:1 MB
錯誤處理
在應用程式中實作適當的錯誤處理。常見的 HTTP 狀態碼:
200 OK– 日誌已成功擷取400 Bad Request– 無效的請求格式或參數401 Unauthorized– 承載字符無效或過期403 Forbidden– 許可不足404 Not Found– 日誌群組或串流不存在429 Too Many Requests– 超過速率限制500 Internal Server Error– 服務錯誤 (以指數退避重試)
限制
事件大小上限:每個事件 256 KB
請求大小上限:1 MB
每個請求的事件上限:10,000
日誌群組名稱必須遵循 CloudWatch Logs 命名慣例
如果使用承載字符身分驗證,則必須在日誌群組上啟用承載字符身分驗證。