本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用结构化 JSON 端点发送日志(结构化 JSON 日志)
结构化 JSON 日志端点 (/ingest/json) 接受标准 JSON,可以是单个 JSON 对象,也可以是对象的 JSON 数组。此端点专为结构化日志数据而设计,其中每个事件都是一个 JSON 对象。
如果您使用的是不记名令牌身份验证,请先完成中的设置步骤,设置不记名令牌身份验证然后再继续。
请求格式
仅application/json被接受为内容类型。
单个 JSON 对象:
{"timestamp":1771007942000,"message":"single event","level":"INFO"}
JSON 对象数组:
[ {"timestamp":1771007942000,"message":"event one","level":"INFO"}, {"timestamp":1771007943000,"message":"event two","level":"ERROR"} ]
接受的 JSON 值类型
此端点非常严格 — 只接受 JSON 对象作为事件。
| Input | 行为 |
|---|---|
| 单个 JSON 对象 | 作为一个活动被接受 |
| JSON 对象数组 | 每个对象都变成一个单独的事件 |
空数组 [] |
已接受,生成 0 个事件 |
| 数组中的非对象(字符串、数字等) | Skipped |
顶级原语 ("hello",42) |
Skipped |
连接的对象 {...}{...} |
仅解析第一个对象 |
示例 — 混合类型的数组:
[ {"timestamp":1771007942000,"message":"valid object"}, "just a string", 42, {"timestamp":1771007943000,"message":"another valid object"} ]
结果:提取了 2 个事件(对象),跳过 2 个事件(字符串和数字)。
时间戳字段
该"timestamp"字段以纪元毫秒为单位,与 NDJSON 端点相同。
| 格式 | 示例 | 解释为 |
|---|---|---|
| 数字(毫秒) | "timestamp":1771007942000 |
1771007942000 ms |
| 缺失 | (没有时间戳字段) | 服务器当前时间 |
| 非数字 | "timestamp":"invalid" |
服务器当前时间 |
示例请求
curl -X POST "https://logs.<region>.amazonaws.com/ingest/json?logGroup=MyLogGroup&logStream=MyStream" \ -H "Authorization: Bearer ACWL<token>" \ -H "Content-Type: application/json" \ -d '[{"timestamp":1771007942000,"message":"User logged in","user_id":"u-123"},{"timestamp":1771007943000,"message":"Order placed","order_id":"o-456"}]'
响应
成功(接受所有活动):
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 日志命名约定
如果使用不记名令牌身份验证,则必须在日志组上启用持有者令牌身份验证。