Menggunakan CloudWatch untuk memantau dan mencatat data GraphQL API - AWS AppSync

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

Menggunakan CloudWatch untuk memantau dan mencatat data GraphQL API

Anda dapat mencatat dan men-debug API GraphQL CloudWatch Anda menggunakan metrik dan log. CloudWatch Alat-alat ini memungkinkan pengembang untuk memantau kinerja, memecahkan masalah, dan mengoptimalkan operasi GraphQL mereka secara efektif.

CloudWatch metrik adalah alat yang menyediakan berbagai metrik untuk memantau API kinerja dan penggunaan. Metrik ini terbagi dalam dua kategori utama:

  1. APIMetrik Umum: Ini termasuk 4XXError dan 5XXError untuk melacak kesalahan klien dan server, Latency untuk mengukur waktu respons, Requests untuk memantau total API panggilan, dan TokensConsumed untuk melacak penggunaan sumber daya.

  2. Metrik Berlangganan Waktu Nyata: Metrik ini berfokus pada WebSocket koneksi dan aktivitas berlangganan. Mereka termasuk metrik untuk permintaan koneksi, koneksi yang berhasil, pendaftaran langganan, penerbitan pesan, dan koneksi aktif dan langganan.

Panduan ini juga memperkenalkan Enhanced Metrics, yang menawarkan lebih banyak data terperinci tentang kinerja resolver, interaksi sumber data, dan operasi GraphQL individual. Metrik ini memberikan wawasan yang lebih dalam tetapi datang dengan biaya tambahan.

CloudWatch Log adalah alat yang memungkinkan kemampuan logging untuk GraphQL APIs Anda. Log dapat diatur pada dua tingkatAPI:

  1. Log tingkat Permintaan: Ini menangkap informasi permintaan secara keseluruhan, termasuk HTTP header, kueri GraphQL, ringkasan operasi, dan pendaftaran langganan.

  2. Log Tingkat Bidang: Ini memberikan informasi rinci tentang resolusi bidang individual, termasuk pemetaan permintaan dan respons, dan informasi penelusuran untuk setiap bidang.

Anda dapat mengonfigurasi logging, menafsirkan entri log, dan menggunakan data log untuk pemecahan masalah dan pengoptimalan. AWS AppSync menyediakan berbagai jenis log yang mengungkapkan eksekusi, parsing, validasi, dan data resolusi bidang kueri Anda.

Penyiapan dan konfigurasi

Untuk mengaktifkan logging otomatis pada API GraphQL, gunakan konsol. AWS AppSync

  1. Masuk ke AWS Management Console dan buka AppSynckonsol.

  2. Pada APIshalaman, pilih nama GraphQLAPI.

  3. Di API beranda Anda, di panel navigasi, pilih Pengaturan.

  4. Di bawah Logging, lakukan hal berikut:

    1. Aktifkan Aktifkan Log.

    2. Untuk pencatatan tingkat permintaan terperinci, pilih kotak centang di bawah Sertakan konten verbose. (opsional)

    3. Di bawah Level log penyelesai bidang, pilih level logging tingkat bidang pilihan Anda (Tidak Ada, Kesalahan, atau Semua). (opsional)

    4. Di bawah Buat atau gunakan peran yang ada, pilih Peran baru untuk membuat new AWS Identity and Access Management (IAM) yang memungkinkan AWS AppSync untuk menulis log CloudWatch. Atau, pilih Peran yang ada untuk memilih Amazon Resource Name (ARN) dari IAM peran yang ada di AWS akun Anda.

  5. Pilih Simpan.

Konfigurasi IAM peran manual

Jika Anda memilih untuk menggunakan IAM peran yang ada, peran tersebut harus memberikan AWS AppSync izin yang diperlukan untuk menulis log. CloudWatch Untuk mengonfigurasi ini secara manual, Anda harus menyediakan peran layanan ARN sehingga AWS AppSync dapat mengambil peran saat menulis log.

Di IAMkonsol, buat kebijakan baru dengan nama AWSAppSyncPushToCloudWatchLogsPolicy yang memiliki definisi berikut:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }

Selanjutnya, buat peran baru dengan nama AWSAppSyncPushToCloudWatchLogsRole, dan lampirkan kebijakan yang baru dibuat ke peran tersebut. Edit hubungan kepercayaan untuk peran ini menjadi berikut:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Salin peran ARN dan gunakan saat menyiapkan logging untuk AWS AppSync GraphQLAPI.

CloudWatch metrik

Anda dapat menggunakan CloudWatch metrik untuk memantau dan memberikan peringatan tentang peristiwa tertentu yang dapat menghasilkan kode HTTP status atau dari latensi. Metrik berikut dipancarkan:

4XXError

Kesalahan yang dihasilkan dari permintaan yang tidak valid karena konfigurasi klien yang salah. Biasanya, kesalahan ini terjadi di mana saja di luar pemrosesan GraphQL. Misalnya, kesalahan ini dapat terjadi ketika permintaan menyertakan JSON payload yang salah atau kueri yang salah, saat layanan dibatasi, atau ketika pengaturan otorisasi salah konfigurasi.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kejadian kesalahan ini.

5XXError

Kesalahan yang ditemui selama menjalankan kueri GraphQL. Misalnya, ini dapat terjadi saat menjalankan kueri untuk skema kosong atau salah. Ini juga dapat terjadi ketika ID atau AWS Wilayah kumpulan pengguna Amazon Cognito tidak valid. Atau, ini juga bisa terjadi AWS AppSync jika mengalami masalah selama pemrosesan permintaan.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kejadian kesalahan ini.

Latency

Waktu antara ketika AWS AppSync menerima permintaan dari klien dan ketika mengembalikan respons ke klien. Ini tidak termasuk latensi jaringan yang ditemui untuk respons untuk mencapai perangkat akhir.

Satuan: Millidetik. Gunakan statistik Rata-rata untuk mengevaluasi latensi yang diharapkan.

Requests

Jumlah permintaan (kueri+mutasi) yang semua APIs di akun Anda telah diproses, berdasarkan Wilayah.

Satuan: Hitung. Jumlah semua permintaan yang diproses di Wilayah tertentu.

TokensConsumed

Token dialokasikan Requests berdasarkan jumlah sumber daya (waktu pemrosesan dan memori yang digunakan) yang Request dikonsumsi. Biasanya, masing-masing Request mengkonsumsi satu token. Namun, a Request yang mengkonsumsi sejumlah besar sumber daya dialokasikan token tambahan sesuai kebutuhan.

Satuan: Hitung. Jumlah token yang dialokasikan untuk permintaan yang diproses di Wilayah tertentu.

NetworkBandwidthOutAllowanceExceeded
catatan

Di AWS AppSync konsol, pada halaman pengaturan cache, opsi Metrik Kesehatan Cache memungkinkan Anda mengaktifkan metrik kesehatan terkait cache ini.

Paket jaringan turun karena throughput melebihi batas bandwidth agregat. Ini berguna untuk mendiagnosis kemacetan dalam konfigurasi cache. Data direkam untuk tertentu API dengan menentukan API_Id dalam appsyncCacheNetworkBandwidthOutAllowanceExceeded metrik.

Satuan: Hitung. Jumlah paket turun setelah melebihi batas bandwidth untuk yang API ditentukan oleh ID.

EngineCPUUtilization
catatan

Di AWS AppSync konsol, pada halaman pengaturan cache, opsi Metrik Kesehatan Cache memungkinkan Anda mengaktifkan metrik kesehatan terkait cache ini.

CPUPemanfaatan (persentase) dialokasikan untuk proses OSS Redis. Ini berguna untuk mendiagnosis kemacetan dalam konfigurasi cache. Data direkam untuk tertentu API dengan menentukan API_Id dalam appsyncCacheEngineCPUUtilization metrik.

Satuan: Persen. CPUPersentase yang saat ini digunakan oleh OSS proses Redis untuk ID yang API ditentukan.

Langganan waktu nyata

Semua metrik dipancarkan dalam satu dimensi: G. raphQLAPIId Ini berarti bahwa semua metrik digabungkan dengan GraphQL. API IDs Metrik berikut terkait dengan langganan GraphQL di atas murni: WebSockets

ConnectRequests

Jumlah permintaan WebSocket koneksi yang dibuat untuk AWS AppSync, termasuk upaya yang berhasil dan tidak berhasil.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total permintaan koneksi.

ConnectSuccess

Jumlah WebSocket koneksi yang berhasil ke AWS AppSync. Dimungkinkan untuk memiliki koneksi tanpa langganan.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan kejadian total dari koneksi yang berhasil.

ConnectClientError

Jumlah WebSocket koneksi yang ditolak oleh AWS AppSync karena kesalahan sisi klien. Ini dapat menyiratkan bahwa layanan dibatasi atau bahwa pengaturan otorisasi salah dikonfigurasi.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan kejadian total kesalahan koneksi sisi klien.

ConnectServerError

Jumlah kesalahan yang berasal dari AWS AppSync saat memproses koneksi. Ini biasanya terjadi ketika masalah sisi server yang tidak terduga terjadi.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan kejadian total kesalahan koneksi sisi server.

DisconnectSuccess

Jumlah WebSocket pemutusan yang berhasil dari AWS AppSync.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan kejadian total dari pemutusan yang berhasil.

DisconnectClientError

Jumlah kesalahan klien yang berasal dari AWS AppSync saat memutuskan koneksi WebSocket.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan kejadian total dari kesalahan pemutusan.

DisconnectServerError

Jumlah kesalahan server yang berasal dari AWS AppSync saat memutuskan koneksi WebSocket.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan kejadian total dari kesalahan pemutusan.

SubscribeSuccess

Jumlah langganan yang berhasil didaftarkan AWS AppSync melalui WebSocket. Dimungkinkan untuk memiliki koneksi tanpa langganan, tetapi tidak mungkin memiliki langganan tanpa koneksi.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kemunculan langganan yang berhasil.

SubscribeClientError

Jumlah langganan yang ditolak oleh AWS AppSync karena kesalahan sisi klien. Hal ini dapat terjadi ketika JSON payload salah, layanan dibatasi, atau pengaturan otorisasi salah dikonfigurasi.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kejadian kesalahan langganan sisi klien.

SubscribeServerError

Jumlah kesalahan yang berasal dari AWS AppSync saat memproses langganan. Ini biasanya terjadi ketika masalah sisi server yang tidak terduga terjadi.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kejadian kesalahan langganan sisi server.

UnsubscribeSuccess

Jumlah permintaan berhenti berlangganan yang berhasil diproses.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kemunculan permintaan berhenti berlangganan yang berhasil.

UnsubscribeClientError

Jumlah permintaan berhenti berlangganan yang ditolak oleh AWS AppSync karena kesalahan sisi klien.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kejadian kesalahan permintaan berhenti berlangganan sisi klien.

UnsubscribeServerError

Jumlah kesalahan yang berasal dari AWS AppSync saat memproses permintaan berhenti berlangganan. Ini biasanya terjadi ketika masalah sisi server yang tidak terduga terjadi.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kejadian kesalahan permintaan berhenti berlangganan sisi server.

PublishDataMessageSuccess

Jumlah pesan acara berlangganan yang berhasil dipublikasikan.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total pesan acara berlangganan yang berhasil dipublikasikan.

PublishDataMessageClientError

Jumlah pesan acara berlangganan yang gagal dipublikasikan karena kesalahan sisi klien.

Unit: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kejadian kesalahan peristiwa berlangganan penerbitan sisi klien.

PublishDataMessageServerError

Jumlah kesalahan yang berasal dari AWS AppSync saat menerbitkan pesan acara berlangganan. Ini biasanya terjadi ketika masalah sisi server yang tidak terduga terjadi.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total kejadian kesalahan peristiwa berlangganan penerbitan sisi server.

PublishDataMessageSize

Ukuran pesan acara berlangganan yang diterbitkan.

Satuan: Byte.

ActiveConnections

Jumlah WebSocket koneksi bersamaan dari klien ke AWS AppSync dalam 1 menit.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total koneksi yang terbuka.

ActiveSubscriptions

Jumlah langganan bersamaan dari klien dalam 1 menit.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan total langganan aktif.

ConnectionDuration

Jumlah waktu koneksi tetap terbuka.

Satuan: Milidetik. Gunakan statistik Rata-rata untuk mengevaluasi durasi koneksi.

OutboundMessages

Jumlah pesan terukur berhasil dipublikasikan. Satu pesan terukur sama dengan 5 kB data yang dikirimkan.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total pesan terukur yang berhasil dipublikasikan.

InboundMessageSuccess

Jumlah pesan masuk berhasil diproses. Setiap jenis langganan yang dipanggil oleh mutasi menghasilkan satu pesan masuk.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total pesan masuk yang berhasil diproses.

InboundMessageError

Jumlah pesan masuk yang gagal diproses karena API permintaan tidak valid, seperti melebihi batas ukuran payload langganan 240 kB.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total pesan masuk dengan kegagalan pemrosesan API terkait.

InboundMessageFailure

Jumlah pesan masuk yang gagal diproses karena kesalahan dari AWS AppSync.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total pesan masuk dengan kegagalan pemrosesan AWS AppSync terkait.

InboundMessageDelayed

Jumlah pesan masuk yang tertunda. Pesan masuk dapat ditunda ketika kuota rasio pesan masuk atau kuota rasio pesan keluar dilanggar.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total pesan masuk yang tertunda.

InboundMessageDropped

Jumlah pesan masuk yang dijatuhkan. Pesan masuk dapat dihapus ketika kuota rasio pesan masuk atau kuota rasio pesan keluar dilanggar.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total pesan masuk yang dijatuhkan.

InvalidationSuccess

Jumlah langganan yang berhasil dibatalkan (berhenti berlangganan) dengan mutasi dengan. $extensions.invalidateSubscriptions()

Satuan: Hitung. Gunakan statistik Jumlah untuk mengambil jumlah total langganan yang berhasil berhenti berlangganan.

InvalidationRequestSuccess

Jumlah permintaan pembatalan berhasil diproses.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total permintaan pembatalan yang berhasil diproses.

InvalidationRequestError

Jumlah permintaan pembatalan yang gagal diproses karena permintaan tidak validAPI.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total permintaan pembatalan dengan kegagalan pemrosesan API terkait.

InvalidationRequestFailure

Jumlah permintaan pembatalan yang gagal diproses karena kesalahan dari. AWS AppSync

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total permintaan pembatalan dengan kegagalan pemrosesan AWS AppSync terkait.

InvalidationRequestDropped

Jumlah permintaan pembatalan turun ketika kuota permintaan pembatalan terlampaui.

Satuan: Hitung. Gunakan statistik Jumlah untuk mendapatkan jumlah total permintaan pembatalan yang dijatuhkan.

Membandingkan pesan masuk dan keluar

Saat mutasi dijalankan, bidang langganan dengan direktif @aws_subscribe untuk mutasi tersebut dipanggil. Setiap pemanggilan langganan menghasilkan satu pesan masuk. Misalnya, jika dua bidang langganan menentukan mutasi yang sama di @aws_subscribe, maka dua pesan masuk dihasilkan saat mutasi itu dipanggil.

Satu pesan keluar sama dengan 5 kB data yang dikirimkan ke WebSocket klien. Misalnya, mengirim 15 kB data ke 10 klien menghasilkan 30 pesan keluar (15 kB* 10 klien/ 5 kB per pesan = 30 pesan).

Anda dapat meminta peningkatan kuota untuk pesan masuk atau keluar. Untuk informasi selengkapnya, lihat AWS AppSync titik akhir dan kuota dalam panduan Referensi AWS Umum dan petunjuk untuk Meminta peningkatan kuota dalam Panduan Pengguna Service Quotas.

Metrik yang disempurnakan

Metrik yang disempurnakan memancarkan data terperinci tentang API penggunaan dan kinerja seperti jumlah AWS AppSync permintaan dan kesalahan, latensi, dan hits/misses cache. Semua data metrik yang disempurnakan dikirim ke CloudWatch akun Anda, dan Anda dapat mengonfigurasi jenis data yang akan dikirim.

catatan

Biaya tambahan dikenakan saat menggunakan metrik yang disempurnakan. Untuk informasi selengkapnya, lihat tingkat penetapan harga pemantauan terperinci di CloudWatchharga Amazon.

Metrik ini dapat ditemukan di berbagai halaman pengaturan di AWS AppSync konsol. Pada halaman API pengaturan, bagian Metrik yang Ditingkatkan memungkinkan Anda untuk mengaktifkan atau menonaktifkan item berikut:

Perilaku metrik penyelesai: Opsi ini mengontrol cara metrik tambahan untuk resolver dikumpulkan. Anda dapat memilih untuk mengaktifkan metrik resolver permintaan lengkap (metrik diaktifkan untuk semua resolver dalam permintaan) atau metrik per-resolver (metrik hanya diaktifkan untuk resolver yang konfigurasi disetel ke diaktifkan). Pilihan berikut tersedia:

GraphQL errors per resolver (GraphQLError)

Jumlah kesalahan GraphQL yang terjadi per resolver.

Dimensi metrik:API_Id, Resolver

Satuan: Hitung.

Requests per resolver (Request)

Jumlah pemanggilan yang terjadi selama permintaan. Ini dicatat berdasarkan per-resolver.

Dimensi metrik:API_Id, Resolver

Satuan: Hitung.

Latency per resolver (Latency)

Waktu untuk menyelesaikan doa resolver. Latensi diukur dalam milidetik dan dicatat berdasarkan per-resolver.

Dimensi metrik:API_Id, Resolver

Satuan: Millidetik.

Cache hits per resolver (CacheHit)

Jumlah cache yang tertembus selama permintaan. Ini hanya akan dipancarkan jika cache digunakan. Hit cache direkam berdasarkan per-resolver.

Dimensi metrik:API_Id, Resolver

Satuan: Hitung.

Cache misses per resolver (CacheMiss)

Jumlah cache hilang selama permintaan. Ini hanya akan dipancarkan jika cache digunakan. Kesalahan cache dicatat berdasarkan per-resolver.

Dimensi metrik:API_Id, Resolver

Satuan: Hitung.

Perilaku metrik sumber data: Opsi ini mengontrol cara metrik tambahan untuk sumber data dikumpulkan. Anda dapat memilih untuk mengaktifkan metrik sumber data permintaan lengkap (metrik diaktifkan untuk semua sumber data dalam permintaan) atau metrik sumber per data (metrik hanya diaktifkan untuk sumber data yang konfigurasi disetel ke diaktifkan). Pilihan berikut tersedia:

Requests per data source (Request)

Jumlah pemanggilan yang terjadi selama permintaan. Permintaan dicatat berdasarkan sumber per data. Jika permintaan penuh diaktifkan, setiap sumber data akan memiliki entri sendiri CloudWatch.

Dimensi metrik:API_Id, Datasource

Satuan: Hitung.

Latency per data source (Latency)

Waktu untuk menyelesaikan pemanggilan sumber data. Latensi dicatat berdasarkan sumber per data.

Dimensi metrik:API_Id, Datasource

Satuan: Millidetik.

Errors per data source (GraphQLError)

Jumlah kesalahan yang terjadi selama pemanggilan sumber data.

Dimensi metrik:API_Id, Datasource

Satuan: Hitung.

Metrik operasi: Mengaktifkan metrik tingkat operasi GraphQL.

Requests per operation (Request)

Berapa kali operasi GraphQL tertentu dipanggil.

Dimensi metrik:API_Id, Operation

Satuan: Hitung.

GraphQL errors per operation (GraphQLError)

Jumlah kesalahan GraphQL yang terjadi selama operasi GraphQL tertentu.

Dimensi metrik:API_Id, Operation

Satuan: Hitung.

CloudWatch log

Anda dapat mengonfigurasi dua jenis logging pada API GraphQL baru atau yang sudah ada: tingkat permintaan dan tingkat bidang.

Log tingkat permintaan

Ketika pencatatan tingkat permintaan (Sertakan konten verbose) dikonfigurasi, informasi berikut dicatat:

  • Jumlah token yang dikonsumsi

  • HTTPHeader permintaan dan respons

  • Query GraphQL yang berjalan dalam permintaan

  • Ringkasan operasi keseluruhan

  • Langganan GraphQL baru dan yang sudah ada yang terdaftar

Log tingkat lapangan

Ketika logging tingkat lapangan dikonfigurasi, informasi berikut dicatat:

  • Pemetaan permintaan yang dihasilkan dengan sumber dan argumen untuk setiap bidang

  • Pemetaan respons yang diubah untuk setiap bidang, yang mencakup data sebagai hasil penyelesaian bidang tersebut

  • Menelusuri informasi untuk setiap bidang

Jika Anda mengaktifkan logging, AWS AppSync mengelola CloudWatch Log. Prosesnya termasuk membuat grup log dan aliran log, dan melaporkan ke aliran log dengan log ini.

Saat Anda mengaktifkan logging pada API GraphQL dan membuat permintaan AWS AppSync , buat grup log dan aliran log di bawah grup log. Grup log diberi nama mengikuti /aws/appsync/apis/{graphql_api_id} format. Dalam setiap grup log, log dibagi lagi menjadi aliran log. Ini diurutkan berdasarkan Waktu Acara Terakhir karena data yang dicatat dilaporkan.

Setiap peristiwa log ditandai dengan x-amzn- RequestId dari permintaan itu. Ini membantu Anda memfilter peristiwa log CloudWatch untuk mendapatkan semua informasi yang dicatat tentang permintaan itu. Anda bisa mendapatkan dari header respons RequestId dari setiap permintaan GraphQL AWS AppSync .

Pencatatan tingkat bidang dikonfigurasi dengan level log berikut:

  • Tidak ada - Tidak ada log tingkat lapangan yang ditangkap.

  • Kesalahan - Mencatat informasi berikut hanya untuk bidang yang salah:
    • Bagian kesalahan dalam respon server

    • Kesalahan tingkat lapangan

    • Fungsi permintaan/respons yang dihasilkan yang diselesaikan untuk bidang kesalahan

  • Semua - Log informasi berikut untuk semua bidang dalam kueri:
    • Informasi penelusuran tingkat lapangan

    • Fungsi permintaan/respons yang dihasilkan yang diselesaikan untuk setiap bidang

Manfaat pemantauan

Anda dapat menggunakan logging dan metrik untuk mengidentifikasi, memecahkan masalah, dan mengoptimalkan kueri GraphQL Anda. Misalnya, ini akan membantu Anda men-debug masalah latensi menggunakan informasi penelusuran yang dicatat untuk setiap bidang dalam kueri. Untuk mendemonstrasikan ini, misalkan Anda menggunakan satu atau lebih resolver yang bersarang dalam kueri GraphQL. Operasi bidang sampel di CloudWatch Log mungkin terlihat mirip dengan yang berikut ini:

{ "path": [ "singlePost", "authors", 0, "name" ], "parentType": "Post", "returnType": "String!", "fieldName": "name", "startOffset": 416563350, "duration": 11247 }

Ini mungkin sesuai dengan skema GraphQL, mirip dengan yang berikut ini:

type Post { id: ID! name: String! authors: [Author] } type Author { id: ID! name: String! } type Query { singlePost(id:ID!): Post }

Dalam hasil log sebelumnya, path menampilkan satu item dalam data Anda yang dikembalikan dari menjalankan kueri bernama. singlePost() Dalam contoh ini, ini mewakili bidang nama pada indeks pertama (0). startOffsetMemberikan offset dari awal operasi query GraphQL. Durasi adalah total waktu untuk menyelesaikan bidang. Nilai-nilai ini dapat berguna untuk memecahkan masalah mengapa data dari sumber data tertentu mungkin berjalan lebih lambat dari yang diharapkan, atau jika bidang tertentu memperlambat seluruh kueri. Misalnya, Anda dapat memilih untuk meningkatkan throughput yang disediakan untuk tabel Amazon DynamoDB, atau menghapus bidang tertentu dari kueri yang menyebabkan keseluruhan operasi berkinerja buruk.

Per 8 Mei 2019, AWS AppSync menghasilkan peristiwa log sebagai terstruktur sepenuhnyaJSON. Ini dapat membantu Anda menggunakan layanan analisis CloudWatch log seperti Wawasan Log dan OpenSearch Layanan Amazon untuk memahami kinerja permintaan GraphQL dan karakteristik penggunaan bidang skema Anda. Misalnya, Anda dapat dengan mudah mengidentifikasi resolver dengan latensi besar yang mungkin menjadi akar penyebab masalah kinerja. Anda juga dapat mengidentifikasi bidang yang paling sering dan paling jarang digunakan dalam skema Anda dan menilai dampak dari menghentikan bidang GraphQL.

Deteksi konflik dan pencatatan sinkronisasi

Jika CloudWatch log ke Log AWS AppSync API telah dikonfigurasi dengan tingkat log penyelesai bidang yang disetel ke Semua, maka akan AWS AppSync memancarkan deteksi konflik dan informasi resolusi ke grup log. Ini memberikan wawasan terperinci tentang bagaimana AWS AppSync API menanggapi konflik. Untuk membantu Anda menafsirkan respons, informasi berikut disediakan di log:

conflictType

Merinci apakah konflik terjadi karena ketidakcocokan versi atau kondisi yang disediakan pelanggan.

conflictHandlerConfigured

Menyatakan penangan konflik yang dikonfigurasi pada resolver pada saat permintaan.

message

Memberikan informasi tentang bagaimana konflik terdeteksi dan diselesaikan.

syncAttempt

Jumlah percobaan server mencoba untuk menyinkronkan data sebelum akhirnya menolak permintaan.

data

Jika pengendali konflik dikonfigurasiAutomerge, bidang ini diisi untuk menunjukkan keputusan apa yang Automerge diambil untuk setiap bidang. Tindakan yang diberikan dapat berupa:

  • REJECTED- Ketika Automerge menolak nilai bidang masuk yang mendukung nilai di server.

  • ADDED- Ketika Automerge menambahkan pada bidang masuk karena tidak ada nilai yang sudah ada sebelumnya di server.

  • APPENDED- Ketika Automerge menambahkan nilai masuk ke nilai-nilai untuk Daftar yang ada di server.

  • MERGED- Saat Automerge menggabungkan nilai yang masuk ke nilai untuk Set yang ada di server.

Menggunakan jumlah token untuk mengoptimalkan permintaan Anda

Permintaan yang mengkonsumsi kurang dari atau sama dengan 1.500 Kb-detik memori dan CPU waktu v dialokasikan satu token. Permintaan dengan konsumsi sumber daya lebih dari 1.500 Kb-detik menerima token tambahan. Misalnya, jika permintaan menghabiskan 3.350 KB-detik, AWS AppSync mengalokasikan tiga token (dibulatkan ke nilai integer berikutnya) ke permintaan. Secara default, AWS AppSync mengalokasikan maksimum 5.000 atau 10.000 token permintaan per detik ke akun Anda, tergantung pada AWS Wilayah di mana token tersebut digunakan. APIs Jika APIs masing-masing menggunakan rata-rata dua token per detik, Anda akan dibatasi hingga 2.500 atau 5.000 permintaan per detik, masing-masing. Jika Anda membutuhkan lebih banyak token per detik dari jumlah yang dialokasikan, Anda dapat mengajukan permintaan untuk meningkatkan kuota default untuk tarif token permintaan. Untuk informasi selengkapnya, lihat AWS AppSync titik akhir dan kuota dalam Referensi Umum AWS panduan dan Meminta peningkatan kuota dalam Panduan Pengguna Service Quotas.

Jumlah token per permintaan yang tinggi dapat menunjukkan bahwa ada peluang untuk mengoptimalkan permintaan Anda dan meningkatkan kinerja Anda. API Faktor-faktor yang dapat meningkatkan jumlah token per permintaan Anda meliputi:

  • Ukuran dan kompleksitas skema GraphQL Anda.

  • Kompleksitas template pemetaan permintaan dan respons.

  • Jumlah pemanggilan resolver per permintaan.

  • Jumlah data yang dikembalikan dari resolver.

  • Latensi sumber data hilir.

  • Desain skema dan kueri yang memerlukan panggilan sumber data berturut-turut (sebagai lawan dari panggilan paralel atau batch).

  • Konfigurasi logging, terutama konten log tingkat lapangan dan verbose.

catatan

Selain AWS AppSync metrik dan log, klien dapat mengakses jumlah token yang dikonsumsi dalam permintaan melalui header x-amzn-appsync-TokensConsumed respons.

Batas ukuran log

Secara default, jika logging telah diaktifkan, AWS AppSync akan mengirimkan hingga 1 MB log per permintaan. Log yang melebihi ukuran ini akan terpotong. Untuk mengurangi ukuran log, pilih tingkat ERROR logging untuk log tingkat bidang dan nonaktifkan VERBOSE logging, atau nonaktifkan log tingkat bidang sepenuhnya jika tidak diperlukan. Sebagai alternatif untuk tingkat ALL log, Anda dapat menggunakan Metrik yang Ditingkatkan untuk mendapatkan metrik pada resolver tertentu, sumber data, atau operasi GraphQL, atau memanfaatkan utilitas pencatatan yang disediakan oleh untuk mencatat hanya informasi yang diperlukan. AppSync

Referensi tipe log

RequestSummary

  • requestId: Pengidentifikasi unik untuk permintaan.

  • graphQLAPIId: ID dari API GraphQL membuat permintaan.

  • statusCode: respon kode HTTP status.

  • latensi: E nd-to-end latensi permintaan, dalam nanodetik, sebagai bilangan bulat.

{ "logType": "RequestSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4", "statusCode": 200, "latency": 242000000 }

ExecutionSummary

  • requestId: Pengidentifikasi unik untuk permintaan.

  • graphQLAPIId: ID dari API GraphQL membuat permintaan.

  • startTime: Stempel waktu awal pemrosesan GraphQL untuk permintaan, dalam format 3339. RFC

  • endTime: Stempel waktu akhir pemrosesan GraphQL untuk permintaan, dalam format 3339. RFC

  • durasi: Total waktu pemrosesan GraphQL yang telah berlalu, dalam nanodetik, sebagai bilangan bulat.

  • versi: Versi skema dari. ExecutionSummary

  • penguraian:
    • startOffset: Offset awal untuk penguraian, dalam nanodetik, relatif terhadap pemanggilan, sebagai bilangan bulat.

    • durasi: Waktu yang dihabiskan untuk mengurai, dalam nanodetik, sebagai bilangan bulat.

  • validasi:
    • startOffset: Offset awal untuk validasi, dalam nanodetik, relatif terhadap pemanggilan, sebagai bilangan bulat.

    • durasi: Waktu yang dihabiskan untuk melakukan validasi, dalam nanodetik, sebagai bilangan bulat.

{ "duration": 217406145, "logType": "ExecutionSummary", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "startTime": "2019-01-01T06:06:18.956Z", "endTime": "2019-01-01T06:06:19.174Z", "parsing": { "startOffset": 49033, "duration": 34784 }, "version": 1, "validation": { "startOffset": 129048, "duration": 69126 }, "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }

Pelacakan

  • requestId: Pengidentifikasi unik untuk permintaan.

  • graphQLAPIId: ID dari API GraphQL membuat permintaan.

  • startOffset: Offset awal untuk resolusi bidang, dalam nanodetik, relatif terhadap pemanggilan, sebagai bilangan bulat.

  • durasi: Waktu yang dihabiskan untuk menyelesaikan bidang, dalam nanodetik, sebagai bilangan bulat.

  • fieldName: Nama bidang yang sedang diselesaikan.

  • parentType: Jenis induk dari bidang yang sedang diselesaikan.

  • returnType: Jenis pengembalian bidang yang sedang diselesaikan.

  • path: Daftar segmen jalur, dimulai dari akar respons dan diakhiri dengan bidang yang diselesaikan.

  • resolverArn: Resolver yang digunakan untuk resolusi lapangan. ARN Mungkin tidak ada di bidang bersarang.

{ "duration": 216820346, "logType": "Tracing", "path": [ "putItem" ], "fieldName": "putItem", "startOffset": 178156, "resolverArn": "arn:aws:appsync:us-east-1:111111111111:apis/pmo28inf75eepg63qxq4ekoeg4/types/Mutation/fields/putItem", "requestId": "dbe87af3-c114-4b32-ae79-8af11f3f96f1", "parentType": "Mutation", "returnType": "Item", "graphQLAPIId": "pmo28inf75eepg63qxq4ekoeg4" }

Menganalisis log Anda dengan Wawasan CloudWatch Log

Berikut ini adalah contoh kueri yang dapat Anda jalankan untuk mendapatkan wawasan yang dapat ditindaklanjuti tentang kinerja dan kesehatan operasi GraphQL Anda. Contoh ini tersedia sebagai contoh kueri di konsol Wawasan CloudWatch Log. Di CloudWatchkonsol, pilih Wawasan Log, pilih grup AWS AppSync log untuk API GraphQL Anda, lalu AWS AppSync pilih kueri di bawah Kueri sampel.

Kueri berikut mengembalikan 10 permintaan GraphQL teratas dengan token maksimum yang dikonsumsi:

filter @message like "Tokens Consumed" | parse @message "* Tokens Consumed: *" as requestId, tokens | sort tokens desc | display requestId, tokens | limit 10

Kueri berikut mengembalikan 10 resolver teratas dengan latensi maksimum:

fields resolverArn, duration | filter logType = "Tracing" | limit 10 | sort duration desc

Kueri berikut mengembalikan resolver yang paling sering dipanggil:

fields ispresent(resolverArn) as isRes | stats count() as invocationCount by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort invocationCount desc

Kueri berikut mengembalikan resolver dengan kesalahan terbanyak dalam template pemetaan:

fields ispresent(resolverArn) as isRes | stats count() as errorCount by resolverArn, logType | filter isRes and (logType = "RequestMapping" or logType = "ResponseMapping") and fieldInError | limit 10 | sort errorCount desc

Kueri berikut mengembalikan statistik latensi resolver:

fields ispresent(resolverArn) as isRes | stats min(duration), max(duration), avg(duration) as avg_dur by resolverArn | filter isRes and logType = "Tracing" | limit 10 | sort avg_dur desc

Kueri berikut mengembalikan statistik latensi bidang:

stats min(duration), max(duration), avg(duration) as avg_dur by concat(parentType, '/', fieldName) as fieldKey | filter logType = "Tracing" | limit 10 | sort avg_dur desc

Hasil kueri Wawasan CloudWatch Log dapat diekspor ke dasbor. CloudWatch

Analisis log Anda dengan OpenSearch Layanan

Anda dapat mencari, menganalisis, dan memvisualisasikan AWS AppSync log Anda dengan Amazon OpenSearch Service untuk mengidentifikasi kemacetan kinerja dan akar penyebab masalah operasional. Anda dapat mengidentifikasi resolver dengan latensi dan kesalahan maksimum. Selain itu, Anda dapat menggunakan OpenSearch Dasbor untuk membuat dasbor dengan visualisasi yang kuat. OpenSearch Dasbor adalah alat visualisasi dan eksplorasi data sumber terbuka yang tersedia di Layanan. OpenSearch Menggunakan OpenSearch Dasbor, Anda dapat terus memantau kinerja dan kesehatan operasi GraphQL Anda. Misalnya, Anda dapat membuat dasbor untuk memvisualisasikan latensi P90 dari permintaan GraphQL Anda dan menelusuri latensi P90 dari setiap resolver.

Saat menggunakan OpenSearch Layanan, gunakan “cwl*” sebagai pola filter untuk mencari indeks. OpenSearch OpenSearch Layanan mengindeks log yang dialirkan dari CloudWatch Log dengan awalan “cwl -”. Untuk membedakan AWS AppSync API log dari CloudWatch log lain yang dikirim ke OpenSearch Layanan, sebaiknya tambahkan ekspresi filter tambahan graphQLAPIID.keyword=YourGraphQLAPIID ke penelusuran Anda.

Migrasi format log

Peristiwa log yang AWS AppSync dihasilkan pada atau setelah 8 Mei 2019 diformat sebagai terstruktur JSON sepenuhnya. Untuk menganalisis permintaan GraphQL sebelum 8 Mei 2019, Anda dapat memigrasikan log lama ke JSON terstruktur sepenuhnya menggunakan skrip yang tersedia di Sampel. GitHub Jika Anda perlu menggunakan format log sebelum 8 Mei 2019, buat tiket dukungan dengan pengaturan berikut: setel Jenis ke Manajemen Akun, lalu setel Kategori ke Pertanyaan Akun Umum.

Anda juga dapat menggunakan filter metrik CloudWatch untuk mengubah data log menjadi CloudWatch metrik numerik, sehingga Anda dapat membuat grafik atau mengatur alarm pada mereka.