Mengirim log menggunakan titik akhir NDJSON (ND-JSON Logs) - CloudWatch Log Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengirim log menggunakan titik akhir NDJSON (ND-JSON Logs)

Titik akhir ND-JSON Logs (/ingest/bulk) menerima log dalam format NDJSON (Newline Delimited JSON). Setiap baris berisi persis satu nilai JSON, dipisahkan oleh karakter baris baru.

Jika Anda menggunakan otentikasi token pembawa, selesaikan langkah-langkah penyiapan Menyiapkan otentikasi token pembawa sebelum melanjutkan.

Format permintaan

Kirim satu nilai JSON per baris, dipisahkan oleh \n (LF) atau \r\n (CRLF). Baris kosong diabaikan secara diam-diam.

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

Keduanya application/json dan application/x-ndjson diterima sebagai Content-Type.

Jenis nilai JSON yang diterima

Per spesifikasi NDJSON (RFC 8259), nilai JSON yang valid diterima pada setiap baris.

Objek JSON (paling umum):

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

Array JSON (diratakan menjadi peristiwa individual):

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

Baris tunggal ini menghasilkan 2 peristiwa. Setiap elemen array menjadi peristiwa log terpisah.

Nilai primitif:

"a plain string log message" 42 true null

Setiap primitif menjadi acaranya sendiri dengan stempel waktu server saat ini.

Jenis campuran:

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

Semua 4 baris diterima sebagai acara yang valid.

Konten baris Perilaku
Objek JSON Diterima, stempel waktu diekstraksi jika ada
Array JSON Diratakan - setiap elemen menjadi acara yang terpisah
Array kosong [] Diterima, menghasilkan 0 acara
String JSON Diterima sebagai pesan acara
Nomor JSON Diterima sebagai pesan acara
Boolean JSON Diterima sebagai pesan acara
JSON nol Diterima sebagai pesan acara
JSON tidak valid Dilewati (dihitung, pemrosesan berlanjut)
Baris kosong Diabaikan (tidak dihitung sebagai dilewati)

Bidang stempel waktu

"timestamp"Bidang ini dalam milidetik epoch (bukan detik).

format Contoh Ditafsirkan sebagai
Numerik (millis) "timestamp":1771007942000 1771007942000 ms
Hilang (tidak ada bidang stempel waktu) Waktu server saat ini
Non-numerik "timestamp":"invalid" Waktu server saat ini
Garis non-objek "hello", 42, true Waktu server saat ini

Baris tidak valid

Baris yang tidak valid JSON dilewati dan dihitung secara diam-diam. Pemrosesan berlanjut dengan baris berikutnya.

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

Hasil: 2 acara tertelan, 1 dilewati. PengembalianHTTP 200.

Jika semua baris tidak valid, kembali HTTP 400 dengan. "All events were invalid"

Contoh permintaan

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

Respons

Sukses (semua acara diterima):

HTTP 200 OK {}

Keberhasilan sebagian (beberapa acara ditolak):

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

rejectedLogRecordsBidang adalah jumlah total peristiwa yang ditolak. errorMessageBidang berisi rincian yang dikodekan JSON dengan alasan penolakan:

  • tooOldLogEventCount— Acara dengan stempel waktu yang lebih tua dari periode retensi

  • tooNewLogEventCount— Acara dengan stempel waktu terlalu jauh di masa depan

  • expiredLogEventCount— Acara yang kedaluwarsa selama pemrosesan

Praktik terbaik

Acara batching

Untuk kinerja dan efisiensi yang lebih baik:

  • Batch beberapa peristiwa dalam satu permintaan bila memungkinkan

  • Ukuran batch yang disarankan: 10—100 acara per permintaan

  • Ukuran permintaan maksimal: 1 MB

Penanganan kesalahan

Menerapkan penanganan kesalahan yang tepat dalam aplikasi Anda. Kode status HTTP umum:

  • 200 OK— Log berhasil dicerna

  • 400 Bad Request— Format atau parameter permintaan tidak valid

  • 401 Unauthorized— Token pembawa tidak valid atau kedaluwarsa

  • 403 Forbidden— Izin tidak mencukupi

  • 404 Not Found— Grup log atau aliran tidak ada

  • 429 Too Many Requests— Batas tarif terlampaui

  • 500 Internal Server Error— Kesalahan layanan (coba lagi dengan backoff eksponensial)

Batasan

  • Ukuran acara maksimal: 256 KB per acara

  • Ukuran permintaan maksimal: 1 MB

  • Maksimum acara per permintaan: 10.000

  • Nama grup log harus mengikuti konvensi penamaan CloudWatch Log

  • Otentikasi token pembawa harus diaktifkan pada grup log jika otentikasi token pembawa digunakan.