NDJSON エンドポイントを使用したログの送信 (ND-JSON Logs) - Amazon CloudWatch Logs

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

NDJSON エンドポイントを使用したログの送信 (ND-JSON Logs)

ND-JSON Logs エンドポイント (/ingest/bulk) は、NDJSON (Newline Delimited JSON) 形式のログを受け入れます。各行には、改行文字で区切られた 1 つの 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 の命名規則に従う必要があります

  • ベアラートークン認証を使用する場合は、ロググループでベアラートークン認証を有効にする必要があります。