View a markdown version of this page

Instrumentasi Node.js kode di AWS Lambda - AWS Lambda

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

Instrumentasi Node.js kode di AWS Lambda

Lambda terintegrasi dengan AWS X-Ray untuk membantu Anda melacak, men-debug, dan mengoptimalkan aplikasi Lambda. Anda dapat menggunakan X-Ray untuk melacak permintaan saat melintasi sumber daya dalam aplikasi Anda, yang mungkin termasuk fungsi Lambda dan layanan lainnya AWS .

Untuk mengirim data pelacakan ke X-Ray, Anda dapat menggunakan salah satu dari dua pustaka SDK:

Setiap SDK menawarkan cara untuk mengirim data telemetri Anda ke layanan. X-Ray Anda kemudian dapat menggunakannya X-Ray untuk melihat, memfilter, dan mendapatkan wawasan tentang metrik kinerja aplikasi Anda untuk mengidentifikasi masalah dan peluang untuk pengoptimalan.

penting

X-Ray dan Powertools untuk AWS Lambda SDK adalah bagian dari solusi instrumentasi terintegrasi yang ditawarkan oleh. AWS Lapisan ADOT Lambda adalah bagian dari standar industri untuk melacak instrumentasi yang mengumpulkan lebih banyak data secara umum, tetapi mungkin tidak cocok untuk semua kasus penggunaan. Anda dapat menerapkan pelacakan ujung ke ujung dalam X-Ray menggunakan salah satu solusi. Untuk mempelajari selengkapnya tentang memilih di antara keduanya, lihat Memilih antara AWS Distro untuk Telemetri Terbuka dan X-Ray SDK.

Menggunakan ADOT untuk instrumen fungsi Anda Node.js

ADOT menyediakan lapisan Lambda yang dikelola sepenuhnya yang mengemas semua yang Anda butuhkan untuk mengumpulkan data telemetri menggunakan SDK oTel. Dengan mengkonsumsi lapisan ini, Anda dapat menginstrumenkan fungsi Lambda Anda tanpa harus memodifikasi kode fungsi apa pun. Anda juga dapat mengkonfigurasi layer Anda untuk melakukan inisialisasi kustom oTel. Untuk informasi selengkapnya, lihat Konfigur asi kustom untuk ADOT Collector di Lambda dalam dokumentasi ADOT.

Untuk Node.js runtime, Anda dapat menambahkan lapisan Lambda AWS terkelola untuk ADOT Javascript untuk instrumen fungsi Anda secara otomatis. Untuk petunjuk terperinci tentang cara menambahkan lapisan ini, lihat AWS Distro untuk Dukungan OpenTelemetry Lambda untuk JavaScript dalam dokumentasi ADOT.

Menggunakan X-Ray SDK untuk instrumen Node.js fungsi Anda

Untuk merekam detail tentang panggilan yang dilakukan fungsi Lambda Anda ke sumber daya lain dalam aplikasi Anda, Anda juga dapat menggunakan. AWS X-Ray SDK for Node.js Untuk mendapatkan SDK, tambahkan paket aws-xray-sdk-core ke dependensi aplikasi Anda.

contoh kosong- nodejs/package .json
{ "name": "blank-nodejs", "version": "1.0.0", "private": true, "devDependencies": { "jest": "29.7.0" }, "dependencies": { "@aws-sdk/client-lambda": "3.345.0", "aws-xray-sdk-core": "3.5.3" }, "scripts": { "test": "jest" } }

Untuk instrumen klien AWS SDK di AWS SDK untuk JavaScript v3, bungkus instance klien dengan captureAWSv3Client metode.

contoh kosong- nodejs/function /index.js — Menelusuri sebuah AWS Klien SDK
const AWSXRay = require('aws-xray-sdk-core'); const { LambdaClient, GetAccountSettingsCommand } = require('@aws-sdk/client-lambda'); // Create client outside of handler to reuse const lambda = AWSXRay.captureAWSv3Client(new LambdaClient()); // Handler exports.handler = async function(event, context) { event.Records.forEach(record => { ...

Lambda runtime menetapkan beberapa variabel lingkungan untuk mengkonfigurasi X-Ray SDK. Misalnya, Lambda meny AWS_XRAY_CONTEXT_MISSING et LOG_ERROR el untuk menghindari kesalahan runtime dari X-Ray SDK. Untuk menetapkan strategi yang hilang dalam konteks khusus, timpa variabel lingkungan dalam konfigurasi fungsi Anda agar tidak memiliki nilai, lalu Anda dapat menetapkan konteks yang tidak memiliki strategi yang terprogram.

contoh Kode inisialisasi contoh
const AWSXRay = require('aws-xray-sdk-core'); // Configure the context missing strategy to do nothing AWSXRay.setContextMissingStrategy(() => {});

Untuk informasi selengkapnya, lihat Bekerja dengan variabel lingkungan Lambda.

Setelah Anda menambahkan dependensi yang benar dan membuat perubahan kode yang diperlukan, aktifkan pelacakan dalam konfigurasi fungsi Anda melalui konsol Lambda atau API.

Mengaktifkan pelacakan dengan konsol Lambda

Untuk mengaktifkan pelacakan aktif pada fungsi Lambda Anda dengan konsol, ikuti langkah-langkah berikut:

Untuk mengaktifkan penelusuran aktif
  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih fungsi.

  3. Pilih Konfigurasi dan kemudian pilih Alat Pemantauan dan operasi.

  4. Di bawah Alat pemantauan tambahan, pilih Edit.

  5. Di bawah CloudWatch Sinyal Aplikasi dan AWS X-Ray, pilih Aktifkan untuk pelac akan layanan Lambda.

  6. Pilih Simpan.

Mengaktifkan pelacakan dengan API Lambda

Konfigurasikan pelacakan pada fungsi Lambda Anda dengan AWS CLI atau AWS SDK, gunakan operasi API berikut:

Per AWS CLI intah contoh berikut memungkinkan pelacakan aktif pada fungsi bernama my-function.

aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active

Mode pelacakan adalah bagian dari konfigurasi khusus versi saat Anda menerbitkan versi fungsi Anda. Anda tidak dapat mengubah mode pelacakan pada versi yang telah diterbitkan.

Mengaktifkan pelacakan dengan CloudFormation

Untuk mengaktifkan pelacakan pada AWS::Lambda::Function sumber daya dalam CloudFormation template, gunakan TracingConfig properti.

contoh fungsi-inline.yml — Konfigurasi penelusuran
Resources: function: Type: AWS::Lambda::Function Properties: TracingConfig: Mode: Active ...

Untuk AWS::Serverless::Function sumber daya AWS Serverless Application Model (AWS SAM), gunakan Tracing properti.

contoh template.yml — Konfigurasi penelusuran
Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...

Menafsirkan X-Ray jejak

Fungsi Anda memerlukan izin untuk mengunggah data jejak ke X-Ray. Saat Anda mengaktifkan pelacakan di konsol Lambda, Lambda menambahkan izin yang diperlukan ke peran eksekusi fungsi Anda. Atau, tambahkan kebijakan AWSXRayDaemonWriteAccess ke peran eksekusi.

Setelah mengonfigurasi pelacakan aktif, Anda dapat mengamati permintaan tertentu melalui aplikasi Anda. Grafik X-Ray layanan menunjukkan informasi tentang aplikasi Anda dan semua komponennya. Contoh berikut menunjukkan aplikasi dengan dua fungsi. Fungsi utama memproses kejadian dan terkadang mengembalikan kesalahan. Fungsi kedua di bagian atas memproses kesalahan yang muncul di grup log pertama dan menggunakan AWS SDK untuk memanggil X-Ray, Amazon Simple Storage Service (Amazon S3), dan Amazon CloudWatch Logs.

Diagram yang menunjukkan dua aplikasi terpisah dan peta layanan masing-masing di X-Ray

X-Ray tidak melacak semua permintaan ke aplikasi Anda. X-Ray menerapkan algoritma sampling untuk memastikan bahwa pelacakan efisien, sambil tetap memberikan sampel yang representatif dari semua permintaan. Tingkat pengambilan sampel adalah 1 permintaan per detik dan 5 persen dari permintaan tambahan. Anda tidak dapat mengonfigurasi la X-Ray ju pengambilan sampel untuk fungsi Anda.

Dalam X-Ray, jejak mencatat informasi tentang permintaan yang diproses oleh satu atau lebih layanan. Lambda merekam 2 segmen per jejak, yang membuat dua node pada grafik layanan. Gambar berikut menyoroti dua node ini:

Peta X-Ray layanan dengan fungsi tunggal.

Node pertama di sebelah kiri mewakili layanan Lambda, yang menerima permintaan pemanggilan. Node kedua mewakili fungsi Lambda spesifik Anda. Contoh berikut menunjukkan jejak dengan dua segmen ini. Keduanya dinamai fungsi saya, tetapi yang satu memiliki asal AWS::Lambda dan yang lainnya memiliki asal dari. AWS::Lambda::Function Jika AWS::Lambda segmen menunjukkan kesalahan, layanan Lambda mengalami masalah. Jika AWS::Lambda::Function segmen menunjukkan kesalahan, fungsi Anda mengalami masalah.

Jej X-Ray ak yang menunjukkan latensi di setiap subsegmen dari pemanggilan Lambda tertentu.

Contoh ini memperluas AWS::Lambda::Function segmen untuk menunjukkan tiga subsegmennya.

catatan

AWS saat ini menerapkan perubahan pada layanan Lambda. Karena perubahan ini, Anda mungkin melihat perbedaan kecil antara struktur dan konten pesan log sistem dan segmen jejak yang dipancarkan oleh fungsi Lambda yang berbeda di Anda Akun AWS.

Contoh jejak yang ditampilkan di sini menggambarkan segmen fungsi gaya lama. Perbedaan antara segmen gaya lama dan baru dijelaskan dalam paragraf berikut.

Perubahan ini akan diterapkan selama beberapa minggu mendatang, dan semua fungsi di semua Wilayah AWS kecuali China dan GovCloud wilayah akan beralih untuk menggunakan pesan log format baru dan segmen pelacakan.

Segmen fungsi gaya lama berisi subsegmen berikut:

  • Inisialisasi – Mewakili waktu yang dihabiskan untuk memuat fungsi dan menjalankan kode inisialisasi. Subsegmen ini hanya muncul untuk peristiwa pertama yang diproses oleh setiap instance fungsi Anda.

  • Pemanggilan — Merupakan waktu yang dihabiskan untuk menjalankan kode handler Anda.

  • Overhead — Merupakan waktu yang dihabiskan runtime Lambda untuk mempersiapkan untuk menangani acara berikutnya.

Segmen fungsi gaya baru tidak berisi Invocation subsegmen. Sebaliknya, subsegmen pelanggan dilampirkan langsung ke segmen fungsi. Untuk informasi lebih lanjut tentang struktur segmen fungsi gaya lama dan baru, lihatMemahami X-Ray jejak.

Anda juga dapat melakukan instrumentasi klien HTTP, merekam kueri SQL, dan membuat subsegmen khusus dengan anotasi dan metadata. Untuk informasi selengkapnya, lihat AWS X-Ray SDK for Node.js di Panduan AWS X-Ray Pengembang.

Harga

Anda dapat menggunakan X-Ray pelacakan secara gratis setiap bulan hingga batas tertentu sebagai bagian dari AWS Tingkat Gratis. Di luar ambang batas itu, X-Ray biaya untuk penyimpanan dan pengambilan jejak. Untuk informasi selengkapnya, lihat harga AWS X-Ray.

Menyimpan dependensi runtime dalam lapisan (X-Ray SDK)

Jika Anda menggunakan X-Ray SDK untuk menginstrumentasikan klien AWS SDK kode fungsi Anda, paket penerapan Anda bisa menjadi cukup besar. Untuk menghindari mengunggah dependensi runtime setiap kali Anda memperbarui kode fungsi, kemas X-Ray SDK dalam lapisan Lambda.

Contoh berikut menunjukkan AWS::Serverless::LayerVersion sumber daya yang menyimpan AWS X-Ray SDK for Node.js.

contoh template.yml — Lapisan dependensi
Resources: function: Type: AWS::Serverless::Function Properties: CodeUri: function/. Tracing: Active Layers: - !Ref libs ... libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-nodejs-lib Description: Dependencies for the blank sample app. ContentUri: lib/. CompatibleRuntimes: - nodejs24.x

Dengan konfigurasi ini, Anda memperbarui lapisan pustaka hanya jika Anda mengubah dependensi runtime Anda. Karena paket penerapan fungsi hanya berisi kode Anda, ini dapat membantu mengurangi waktu unggah.

Membuat lapisan untuk dependensi memerlukan perubahan build untuk menghasilkan arsip lapisan sebelum penerapan. Untuk contoh pekerjaan, lihat contoh aplikasi blank-nodejs.