Konfigurasikan logging untuk WebSocket APIs di API Gateway - APIGerbang Amazon

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

Konfigurasikan logging untuk WebSocket APIs di API Gateway

Anda dapat mengaktifkan logging untuk menulis log ke CloudWatch Log. Ada dua jenis API login CloudWatch: eksekusi logging dan akses logging. Dalam pencatatan eksekusi, API Gateway mengelola CloudWatch Log. Prosesnya mencakup pembuatan grup log dan aliran log, dan pelaporan ke aliran log permintaan dan tanggapan pemanggil apa pun.

Dalam pencatatan akses, Anda, sebagai API pengembang, ingin mencatat siapa yang telah mengakses Anda API dan bagaimana penelepon mengakses file. API Anda dapat membuat grup log Anda sendiri atau memilih grup log yang ada yang dapat dikelola oleh API Gateway. Untuk menentukan rincian akses, Anda memilih $context variabel (dinyatakan dalam format pilihan Anda) dan memilih grup log sebagai tujuan.

Untuk petunjuk tentang cara mengatur CloudWatch logging, lihatSiapkan CloudWatch API logging menggunakan konsol API Gateway.

Saat Anda menentukan Format Log, Anda dapat memilih variabel konteks mana yang akan dicatat. Variabel berikut didukung.

Parameter Deskripsi
$context.apiId

APIGateway pengenal menetapkan ke Anda. API

$context.authorize.error Pesan kesalahan otorisasi.
$context.authorize.latency Latensi otorisasi di ms.
$context.authorize.status Kode status dikembalikan dari upaya otorisasi.
$context.authorizer.error Pesan kesalahan dikembalikan dari otorisasi.
$context.authorizer.integrationLatency Latensi otorisasi Lambda di ms.
$context.authorizer.integrationStatus Kode status dikembalikan dari otorisasi Lambda.
$context.authorizer.latency Latensi otorisasi di ms.
$context.authorizer.requestId ID permintaan AWS titik akhir.
$context.authorizer.status Kode status dikembalikan dari otorisasi.
$context.authorizer.principalId

Identifikasi pengguna utama yang terkait dengan token yang dikirim oleh klien dan dikembalikan dari fungsi Lambda otorisasi API Gateway Lambda. (Authorizer Lambda sebelumnya dikenal sebagai otorisasi khusus.)

$context.authorizer.property

Nilai stringifikasi dari pasangan nilai kunci yang ditentukan dari context peta dikembalikan dari fungsi otorisasi Gateway API Lambda. Misalnya, jika otorisasi mengembalikan context peta berikut:

"context" : { "key": "value", "numKey": 1, "boolKey": true }

memanggil $context.authorizer.key mengembalikan "value" string, memanggil $context.authorizer.numKey mengembalikan "1" string, dan memanggil $context.authorizer.boolKey mengembalikan "true" string.

$context.authenticate.error Pesan kesalahan dikembalikan dari upaya otentikasi.
$context.authenticate.latency Latensi otentikasi di ms.
$context.authenticate.status Kode status dikembalikan dari upaya otentikasi.
$context.connectedAt

Waktu koneksi yang diformat Epoch.

$context.connectionId

ID unik untuk koneksi yang dapat digunakan untuk membuat callback ke klien.

$context.domainName

Sebuah nama domain untuk WebSocket API Ini dapat digunakan untuk membuat panggilan balik ke klien (bukan nilai hardcode).

$context.error.message

String yang berisi pesan kesalahan API Gateway.

$context.error.messageString Nilai yang dikutip dari$context.error.message, yaitu"$context.error.message".
$context.error.responseType

Jenis respons kesalahan.

$context.error.validationErrorString

Sebuah string yang berisi pesan kesalahan validasi rinci.

$context.eventType

Jenis acara:CONNECT,MESSAGE, atauDISCONNECT.

$context.extendedRequestId Setara dengan$context.requestId.
$context.identity.accountId

ID AWS akun yang terkait dengan permintaan.

$context.identity.apiKey

Kunci API pemilik yang terkait dengan permintaan berkemampuan kunciAPI.

$context.identity.apiKeyId ID API kunci yang terkait dengan permintaan berkemampuan kunci API
$context.identity.caller

Pengenal utama penelepon yang menandatangani permintaan. Didukung untuk rute yang menggunakan IAM otorisasi.

$context.identity.cognitoAuthenticationProvider

Daftar dipisahkan koma dari semua penyedia otentikasi Amazon Cognito yang digunakan oleh penelepon yang membuat permintaan. Hanya tersedia jika permintaan ditandatangani dengan kredenal Amazon Cognito.

Misalnya, untuk identitas dari kumpulan pengguna Amazon Cognito, cognito-idp. region.amazonaws.com/user_pool_id,cognito-idp.region.amazonaws.com/user_pool_id:CognitoSignIn:token subject claim

Untuk informasi tentang penyedia autentikasi Amazon Cognito yang tersedia, lihat Menggunakan Identitas Federasi di Panduan Pengembang Amazon Cognito.

$context.identity.cognitoAuthenticationType

Jenis otentikasi Amazon Cognito dari penelepon yang membuat permintaan. Hanya tersedia jika permintaan ditandatangani dengan kredenal Amazon Cognito. Nilai yang mungkin termasuk authenticated untuk identitas yang diautentikasi dan unauthenticated untuk identitas yang tidak diautentikasi.

$context.identity.cognitoIdentityId

ID identitas Amazon Cognito dari penelepon yang membuat permintaan. Hanya tersedia jika permintaan ditandatangani dengan kredenal Amazon Cognito.

$context.identity.cognitoIdentityPoolId

ID kumpulan identitas Amazon Cognito dari penelepon yang membuat permintaan. Hanya tersedia jika permintaan ditandatangani dengan kredenal Amazon Cognito.

$context.identity.principalOrgId

ID AWS organisasi. Didukung untuk rute yang menggunakan IAM otorisasi.

$context.identity.sourceIp

Alamat IP sumber TCP koneksi membuat permintaan ke API Gateway.

$context.identity.user

Pengidentifikasi utama pengguna yang akan diotorisasi terhadap akses sumber daya. Didukung untuk rute yang menggunakan IAM otorisasi.

$context.identity.userAgent

Agen pengguna API penelepon.

$context.identity.userArn

Nama Sumber Daya Amazon (ARN) dari pengguna efektif yang diidentifikasi setelah otentikasi.

$context.integration.error Pesan kesalahan dikembalikan dari integrasi.
$context.integration.integrationStatus Untuk integrasi proxy Lambda, kode status dikembalikan dari AWS Lambda, bukan dari kode fungsi Lambda backend.
$context.integration.latency Latensi integrasi dalam ms. Setara dengan$context.integrationLatency.
$context.integration.requestId ID permintaan AWS titik akhir. Setara dengan$context.awsEndpointRequestId.
$context.integration.status Kode status dikembalikan dari integrasi. Untuk integrasi proxy Lambda, ini adalah kode status yang dikembalikan oleh kode fungsi Lambda Anda. Setara dengan$context.integrationStatus.
$context.integrationLatency Latensi integrasi dalam ms, hanya tersedia untuk pencatatan akses.
$context.messageId

ID sisi server unik untuk pesan. Hanya tersedia ketika $context.eventType adaMESSAGE.

$context.requestId

Sama seperti$context.extendedRequestId.

$context.requestTime Waktu permintaan CLFyang diformat ()dd/MMM/yyyy:HH:mm:ss +-hhmm.
$context.requestTimeEpoch Waktu permintaan yang diformat Epoch, dalam milidetik.
$context.routeKey

Kunci rute yang dipilih.

$context.stage

Tahap penerapan API panggilan (misalnya, beta atau prod).

$context.status

Status respon.

$context.waf.error Pesan kesalahan dikembalikan dari AWS WAF.
$context.waf.latency AWS WAF Latensi dalam ms.
$context.waf.status Kode status dikembalikan dari AWS WAF.

Contoh beberapa format log akses yang umum digunakan ditampilkan di konsol API Gateway dan tercantum sebagai berikut.

  • CLF(Format Log Umum):

    $context.identity.sourceIp $context.identity.caller \ $context.identity.user [$context.requestTime] "$context.eventType $context.routeKey $context.connectionId" \ $context.status $context.requestId

    Karakter kelanjutan (\) dimaksudkan sebagai alat bantu visual. Format log harus satu baris. Anda dapat menambahkan karakter baris baru (\n) di akhir format log untuk menyertakan baris baru di akhir setiap entri log.

  • JSON:

    { "requestId":"$context.requestId", \ "ip": "$context.identity.sourceIp", \ "caller":"$context.identity.caller", \ "user":"$context.identity.user", \ "requestTime":"$context.requestTime", \ "eventType":"$context.eventType", \ "routeKey":"$context.routeKey", \ "status":"$context.status", \ "connectionId":"$context.connectionId" }

    Karakter kelanjutan (\) dimaksudkan sebagai alat bantu visual. Format log harus satu baris. Anda dapat menambahkan karakter baris baru (\n) di akhir format log untuk menyertakan baris baru di akhir setiap entri log.

  • XML:

    <request id="$context.requestId"> \ <ip>$context.identity.sourceIp</ip> \ <caller>$context.identity.caller</caller> \ <user>$context.identity.user</user> \ <requestTime>$context.requestTime</requestTime> \ <eventType>$context.eventType</eventType> \ <routeKey>$context.routeKey</routeKey> \ <status>$context.status</status> \ <connectionId>$context.connectionId</connectionId> \ </request>

    Karakter kelanjutan (\) dimaksudkan sebagai alat bantu visual. Format log harus satu baris. Anda dapat menambahkan karakter baris baru (\n) di akhir format log untuk menyertakan baris baru di akhir setiap entri log.

  • CSV(nilai yang dipisahkan koma):

    $context.identity.sourceIp,$context.identity.caller, \ $context.identity.user,$context.requestTime,$context.eventType, \ $context.routeKey,$context.connectionId,$context.status, \ $context.requestId

    Karakter kelanjutan (\) dimaksudkan sebagai alat bantu visual. Format log harus satu baris. Anda dapat menambahkan karakter baris baru (\n) di akhir format log untuk menyertakan baris baru di akhir setiap entri log.