

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

# NDJSON エンドポイントを使用したログの送信 (ND-JSON Logs)
<a name="CWL_HTTP_Endpoints_NDJSON"></a>

ND-JSON Logs エンドポイント (`/ingest/bulk`) は、[NDJSON (Newline Delimited JSON) ](https://github.com/ndjson/ndjson-spec)形式のログを受け入れます。各行には、改行文字で区切られた 1 つの JSON 値のみが含まれます。

ベアラートークン認証を使用している場合は、続行する[ベアラートークン認証の設定](CWL_HTTP_Endpoints_BearerTokenAuth.md)前に のセットアップステップを完了してください。

## リクエストの形式
<a name="CWL_NDJSON_Format"></a>

(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 値タイプ
<a name="CWL_NDJSON_Accepted_Types"></a>

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 が無効です | スキップ (カウント、処理続行) | 
| 空の行 | 無視 (スキップとしてカウントされません) | 

## タイムスタンプフィールド
<a name="CWL_NDJSON_Timestamp"></a>

`"timestamp"` フィールドはエポックミリ秒 (秒ではなく) です。


| 形式 | 例 | 次のように解釈されます | 
| --- | --- | --- | 
| 数値 (ミリ) | "timestamp":1771007942000 | 1771007942000 ミリ秒 | 
| Missing (見つからない) | (タイムスタンプフィールドなし) | サーバーの現在の時刻 | 
| 数値以外 | "timestamp":"invalid" | サーバーの現在の時刻 | 
| オブジェクト以外の行 | "hello", 42, true | サーバーの現在の時刻 | 

## 無効な行
<a name="CWL_NDJSON_Invalid_Lines"></a>

有効な JSON ではない行は、サイレントにスキップされ、カウントされます。処理は次の行に進みます。

```
{"message":"valid event"}
this is not valid json
{"message":"another valid event"}
```

結果: 2 つのイベントが取り込まれ、1 つはスキップされました。戻り値`HTTP 200`。

すべての行が無効の場合、 は `HTTP 400`とともに を返します`"All events were invalid"`。

## リクエスト例
<a name="CWL_NDJSON_Example"></a>

```
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"}'
```

## レスポンス
<a name="CWL_NDJSON_Responses"></a>

**Success (すべてのイベントが受け入れられる):**

```
HTTP 200 OK
{}
```

**部分的な成功 (一部のイベントが拒否):**

```
{
  "partialSuccess": {
    "rejectedLogRecords": 5,
    "errorMessage": "{\"tooOldLogEventCount\": 3, \"tooNewLogEventCount\": 1, \"expiredLogEventCount\": 1}"
  }
}
```

`rejectedLogRecords` フィールドは、拒否されたイベントの総数です。`errorMessage` フィールドには、拒否理由別の JSON エンコードされた内訳が含まれます。
+ `tooOldLogEventCount` – タイムスタンプが保持期間より古いイベント
+ `tooNewLogEventCount` – タイムスタンプが遠すぎるイベント
+ `expiredLogEventCount` – 処理中に期限切れになったイベント

## ベストプラクティス
<a name="CWL_NDJSON_Best_Practices"></a>

### イベントのバッチ処理
<a name="CWL_NDJSON_Batching"></a>

パフォーマンスと効率を向上させるには:
+ 可能であれば、1 つのリクエストで複数のイベントをバッチ処理する
+ 推奨バッチサイズ: リクエストあたり 10～100 イベント
+ 最大リクエストサイズ: 1 MB

### エラー処理
<a name="CWL_NDJSON_Error_Handling"></a>

アプリケーションに適切なエラー処理を実装します。一般的な HTTP ステータスコード:
+ `200 OK` – 正常に取り込まれたログ
+ `400 Bad Request` – 無効なリクエスト形式またはパラメータ
+ `401 Unauthorized` – 無効または期限切れのベアラートークン
+ `403 Forbidden` – アクセス許可が不十分
+ `404 Not Found` – ロググループまたはストリームが存在しません
+ `429 Too Many Requests` – レート制限を超えました
+ `500 Internal Server Error` – サービスエラー (エクスポネンシャルバックオフで再試行)

## 制限事項
<a name="CWL_NDJSON_Limitations"></a>
+ 最大イベントサイズ: イベントあたり 256 KB
+ 最大リクエストサイズ: 1 MB
+ リクエストあたりの最大イベント数: 10,000
+ ロググループ名は CloudWatch Logs の命名規則に従う必要があります
+ ベアラートークン認証を使用する場合は、ロググループでベアラートークン認証を有効にする必要があります。