翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
NDJSON エンドポイントを使用したログの送信 (ND-JSON Logs)
ND-JSON Logs エンドポイント (/ingest/bulk) は、NDJSON (Newline Delimited JSON)
ベアラートークン認証を使用している場合は、続行するベアラートークン認証の設定前に のセットアップステップを完了してください。
リクエストの形式
(LF) または \n (CRLF) で区切って、行ごとに 1 つの \r\n JSON 値を送信します。空の行はサイレントに無視されます。
{"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"}]
この 1 行は 2 つのイベントを生成します。各配列要素は個別のログイベントになります。
プリミティブ値:
"a plain string log message" 42 true null
各プリミティブは、サーバーの現在のタイムスタンプを持つ独自のイベントになります。
混合型:
{"timestamp":1771007942000,"message":"structured event"} "unstructured string message" 42 {"timestamp":1771007943000,"error":"something failed"}
4 行はすべて有効なイベントとして受け入れられます。
| 行の内容 | 行動 |
|---|---|
| JSON オブジェクト | 受け入れられ、存在する場合はタイムスタンプが抽出されます |
| JSON 配列 | フラット化 – 各要素は個別のイベントになります |
空の配列 [] |
受け入れられ、0 個のイベントが生成されます |
| JSON 文字列。 | イベントメッセージとして受け入れられました |
| JSON 数値 | イベントメッセージとして受け入れられました |
| JSON ブール値 | イベントメッセージとして受け入れられました |
| JSON null | イベントメッセージとして受け入れられました |
| JSON が無効です | スキップ (カウント、処理続行) |
| 空の行 | 無視 (スキップとしてカウントされません) |
タイムスタンプフィールド
"timestamp" フィールドはエポックミリ秒 (秒ではなく) です。
| 形式 | 例 | 次のように解釈されます |
|---|---|---|
| 数値 (ミリ) | "timestamp":1771007942000 |
1771007942000 ミリ秒 |
| Missing (見つからない) | (タイムスタンプフィールドなし) | サーバーの現在の時刻 |
| 数値以外 | "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"}'
レスポンス
Success (すべてのイベントが受け入れられる):
HTTP 200 OK {}
部分的な成功 (一部のイベントが拒否):
{ "partialSuccess": { "rejectedLogRecords": 5, "errorMessage": "{\"tooOldLogEventCount\": 3, \"tooNewLogEventCount\": 1, \"expiredLogEventCount\": 1}" } }
rejectedLogRecords フィールドは、拒否されたイベントの総数です。errorMessage フィールドには、拒否理由別の JSON エンコードされた内訳が含まれます。
tooOldLogEventCount– タイムスタンプが保持期間より古いイベントtooNewLogEventCount– タイムスタンプが遠すぎるイベントexpiredLogEventCount– 処理中に期限切れになったイベント
ベストプラクティス
イベントのバッチ処理
パフォーマンスと効率を向上させるには:
可能であれば、1 つのリクエストで複数のイベントをバッチ処理する
推奨バッチサイズ: リクエストあたり 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 の命名規則に従う必要があります
ベアラートークン認証を使用する場合は、ロググループでベアラートークン認証を有効にする必要があります。