

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Senden von Protokollen mithilfe des NDJSON-Endpunkts (ND-JSON-Protokolle)
<a name="CWL_HTTP_Endpoints_NDJSON"></a>

Der Endpunkt ND-JSON Logs (`/ingest/bulk`) akzeptiert Protokolle im [NDJSON-Format](https://github.com/ndjson/ndjson-spec) (Newline Delimited JSON). Jede Zeile enthält genau einen JSON-Wert, getrennt durch Zeilenumbruchzeichen.

Wenn Sie die Bearer-Token-Authentifizierung verwenden, schließen Sie die Einrichtungsschritte unter ab, [Einrichtung der Bearer-Token-Authentifizierung](CWL_HTTP_Endpoints_BearerTokenAuth.md) bevor Sie fortfahren.

## Anforderungsformat
<a name="CWL_NDJSON_Format"></a>

Senden Sie einen JSON-Wert pro Zeile, getrennt durch `\n` (LF) oder `\r\n` (CRLF). Leere Zeilen werden stillschweigend ignoriert.

```
{"timestamp":1771007942000,"message":"event one","level":"INFO"}
{"timestamp":1771007943000,"message":"event two","level":"ERROR"}
{"timestamp":1771007944000,"message":"event three","level":"DEBUG"}
```

`application/json`Sowohl als auch `application/x-ndjson` werden als Content-Type akzeptiert.

## Akzeptierte JSON-Werttypen
<a name="CWL_NDJSON_Accepted_Types"></a>

Gemäß der NDJSON-Spezifikation (RFC 8259) wird jeder gültige JSON-Wert in jeder Zeile akzeptiert.

**JSON-Objekte (am häufigsten):**

```
{"timestamp":1771007942000,"message":"User logged in","service":"auth"}
{"timestamp":1771007943000,"error":"Connection timeout","service":"api"}
```

**JSON-Arrays (auf einzelne Ereignisse reduziert):**

```
[{"timestamp":1000,"message":"a"},{"timestamp":2000,"message":"b"}]
```

Diese einzelne Zeile erzeugt 2 Ereignisse. Jedes Array-Element wird zu einem separaten Protokollereignis.

**Primitive Werte:**

```
"a plain string log message"
42
true
null
```

Jedes Primitiv wird zu einem eigenen Ereignis mit dem aktuellen Zeitstempel des Servers.

**Gemischte Typen:**

```
{"timestamp":1771007942000,"message":"structured event"}
"unstructured string message"
42
{"timestamp":1771007943000,"error":"something failed"}
```

Alle 4 Zeilen werden als gültige Ereignisse akzeptiert.


| Inhalt der Zeile | Behavior | 
| --- | --- | 
| JSON-Objekt | Akzeptiert, Zeitstempel extrahiert, falls vorhanden | 
| JSON-Array | Reduziert — jedes Element wird zu einem separaten Ereignis | 
| Leeres Array [] | Akzeptiert, erzeugt 0 Ereignisse | 
| JSON-Zeichenfolge | Als Ereignisnachricht akzeptiert | 
| JSON-Nummer | Als Ereignisnachricht akzeptiert | 
| Boolescher JSON-Wert | Als Ereignisnachricht akzeptiert | 
| JSON ist null | Als Ereignisnachricht akzeptiert | 
| Ungültige JSON | Übersprungen (gezählt, Verarbeitung wird fortgesetzt) | 
| Leere Zeile | Ignoriert (wird nicht als übersprungen gezählt) | 

## Zeitstempel-Feld
<a name="CWL_NDJSON_Timestamp"></a>

Das `"timestamp"` Feld ist in Epochen-Millisekunden (nicht Sekunden) angegeben.


| Format | Beispiel | Interpretiert als | 
| --- | --- | --- | 
| Numerisch (Millis) | "timestamp":1771007942000 | 1771007942000 ms | 
| Fehlen | (kein Zeitstempelfeld) | Aktuelle Uhrzeit des Servers | 
| Nicht numerisch | "timestamp":"invalid" | Aktuelle Uhrzeit des Servers | 
| Zeile, die kein Objekt ist | "hello", 42, true | Aktuelle Uhrzeit des Servers | 

## Ungültige Zeilen
<a name="CWL_NDJSON_Invalid_Lines"></a>

Zeilen, die kein gültiges JSON-Format sind, werden automatisch übersprungen und gezählt. Die Verarbeitung wird mit der nächsten Zeile fortgesetzt.

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

Ergebnis: 2 Ereignisse wurden aufgenommen, 1 wurde übersprungen. Gibt `HTTP 200` zurück.

Wenn alle Zeilen ungültig sind, wird mit zurückgegeben`HTTP 400`. `"All events were invalid"`

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

## Antworten
<a name="CWL_NDJSON_Responses"></a>

**Erfolgreich (alle Ereignisse wurden akzeptiert):**

```
HTTP 200 OK
{}
```

**Teilweise erfolgreich (einige Ereignisse wurden abgelehnt):**

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

Das `rejectedLogRecords` Feld gibt die Gesamtzahl der abgelehnten Ereignisse an. Das `errorMessage` Feld enthält eine JSON-kodierte Aufschlüsselung nach Ablehnungsgründen:
+ `tooOldLogEventCount`— Ereignisse, deren Zeitstempel älter als der Aufbewahrungszeitraum sind
+ `tooNewLogEventCount`— Ereignisse mit Zeitstempeln, die zu weit in der future liegen
+ `expiredLogEventCount`— Ereignisse, die während der Verarbeitung abgelaufen sind

## Best Practices
<a name="CWL_NDJSON_Best_Practices"></a>

### Ereignisse werden gebündelt
<a name="CWL_NDJSON_Batching"></a>

Für mehr Leistung und Effizienz:
+ Wenn möglich, mehrere Ereignisse in einer einzigen Anfrage bündeln
+ Empfohlene Batchgröße: 10—100 Ereignisse pro Anfrage
+ Maximale Anforderungsgröße: 1 MB

### Fehlerbehandlung
<a name="CWL_NDJSON_Error_Handling"></a>

Implementieren Sie die richtige Fehlerbehandlung in Ihrer Anwendung. Allgemeine HTTP-Statuscodes:
+ `200 OK`— Protokolle wurden erfolgreich aufgenommen
+ `400 Bad Request`— Ungültiges Anforderungsformat oder ungültige Parameter
+ `401 Unauthorized`— Ungültiges oder abgelaufenes Trägertoken
+ `403 Forbidden`— Unzureichende Berechtigungen
+ `404 Not Found`— Protokollgruppe oder Stream existiert nicht
+ `429 Too Many Requests`— Ratenlimit überschritten
+ `500 Internal Server Error`— Servicefehler (erneuter Versuch mit exponentiellem Backoff)

## Einschränkungen
<a name="CWL_NDJSON_Limitations"></a>
+ Maximale Ereignisgröße: 256 KB pro Ereignis
+ Maximale Anforderungsgröße: 1 MB
+ Maximale Anzahl von Ereignissen pro Anfrage: 10.000
+ Die Namen der Protokollgruppen müssen den Benennungskonventionen für CloudWatch Protokolle entsprechen
+ Wenn die Bearer-Token-Authentifizierung verwendet wird, muss die Bearer-Token-Authentifizierung für die Protokollgruppe aktiviert sein.