Menginstrumentasi kode C # 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.

Menginstrumentasi kode C # 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 penelusuran ke X-Ray, Anda dapat menggunakan salah satu dari tiga SDK pustaka:

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

penting

X-Ray dan Powertools untuk AWS Lambda SDKs 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 end-to-end penelusuran di X-Ray menggunakan salah satu solusi. Untuk mempelajari lebih lanjut tentang memilih di antara mereka, lihat Memilih antara AWS Distro untuk Telemetri Terbuka dan X-Ray. SDKs

Menggunakan Powertools untuk AWS Lambda (. NET) dan AWS SAM untuk melacak

Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menerapkan contoh aplikasi Hello World C# dengan Powertools terintegrasi untuk (. AWS Lambda NET) modul menggunakan AWS SAM. Aplikasi ini mengimplementasikan API backend dasar dan menggunakan Powertools untuk memancarkan log, metrik, dan jejak. Ini terdiri dari titik akhir Amazon API Gateway dan fungsi Lambda. Saat Anda mengirim GET permintaan ke titik akhir API Gateway, fungsi Lambda memanggil, mengirim log dan metrik menggunakan Format Metrik Tertanam CloudWatch ke, dan mengirimkan jejak ke. AWS X-Ray Fungsi mengembalikan pesan hello world.

Prasyarat

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:

Menyebarkan aplikasi sampel AWS SAM
  1. Inisialisasi aplikasi menggunakan TypeScript template Hello World.

    sam init --app-template hello-world-powertools-dotnet --name sam-app --package-type Zip --runtime dotnet6 --no-tracing
  2. Bangun aplikasi.

    cd sam-app && sam build
  3. Terapkan aplikasi.

    sam deploy --guided
  4. Ikuti petunjuk di layar. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekanEnter.

    catatan

    Karena HelloWorldFunction mungkin tidak memiliki otorisasi yang ditentukan, Apakah ini baik-baik saja? , pastikan untuk masuky.

  5. Dapatkan aplikasi yang digunakan: URL

    aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
  6. Memanggil titik API akhir:

    curl <URL_FROM_PREVIOUS_STEP>

    Jika berhasil, Anda akan melihat tanggapan ini:

    {"message":"hello world"}
  7. Untuk mendapatkan jejak untuk fungsi tersebut, jalankan jejak sam.

    sam traces

    Output jejak terlihat seperti ini:

    New XRay Service Graph Start time: 2023-02-20 23:05:16+08:00 End time: 2023-02-20 23:05:16+08:00 Reference Id: 0 - AWS::Lambda - sam-app-HelloWorldFunction-pNjujb7mEoew - Edges: [1] Summary_statistics: - total requests: 1 - ok count(2XX): 1 - error count(4XX): 0 - fault count(5XX): 0 - total response time: 2.814 Reference Id: 1 - AWS::Lambda::Function - sam-app-HelloWorldFunction-pNjujb7mEoew - Edges: [] Summary_statistics: - total requests: 1 - ok count(2XX): 1 - error count(4XX): 0 - fault count(5XX): 0 - total response time: 2.429 Reference Id: 2 - (Root) AWS::ApiGateway::Stage - sam-app/Prod - Edges: [0] Summary_statistics: - total requests: 1 - ok count(2XX): 1 - error count(4XX): 0 - fault count(5XX): 0 - total response time: 2.839 Reference Id: 3 - client - sam-app/Prod - Edges: [2] Summary_statistics: - total requests: 0 - ok count(2XX): 0 - error count(4XX): 0 - fault count(5XX): 0 - total response time: 0 XRay Event [revision 3] at (2023-02-20T23:05:16.521000) with id (1-63f38c2c-270200bf1d292a442c8e8a00) and duration (2.877s) - 2.839s - sam-app/Prod [HTTP: 200] - 2.836s - Lambda [HTTP: 200] - 2.814s - sam-app-HelloWorldFunction-pNjujb7mEoew [HTTP: 200] - 2.429s - sam-app-HelloWorldFunction-pNjujb7mEoew - 0.230s - Initialization - 2.389s - Invocation - 0.600s - ## FunctionHandler - 0.517s - Get Calling IP - 0.039s - Overhead
  8. Ini adalah API titik akhir publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.

    sam delete

X-Ray tidak melacak semua permintaan ke aplikasi Anda. X-Ray menerapkan algoritma pengambilan sampel untuk memastikan bahwa penelusuran 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 laju pengambilan sampel X-Ray untuk fungsi Anda.

Menggunakan X-Ray SDK untuk instrumen Anda. NETfungsi

Anda dapat menggunakan instrumen kode fungsi Anda untuk merekam metadata dan melacak panggilan downstream. Untuk merekam detail tentang panggilan yang dilakukan fungsi Anda ke sumber daya dan layanan lain, gunakan file AWS X-Ray SDK for .NET. Untuk mendapatkanSDK, tambahkan AWSXRayRecorder paket ke file proyek Anda.

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="2.1.0" /> <PackageReference Include="Amazon.Lambda.SQSEvents" Version="2.1.0" /> <PackageReference Include="Amazon.Lambda.Serialization.Json" Version="2.1.0" /> <PackageReference Include="AWSSDK.Core" Version="3.7.103.24" /> <PackageReference Include="AWSSDK.Lambda" Version="3.7.104.3" /> <PackageReference Include="AWSXRayRecorder.Core" Version="2.13.0" /> <PackageReference Include="AWSXRayRecorder.Handlers.AwsSdk" Version="2.11.0" /> </ItemGroup> </Project>

Ada berbagai paket Nuget yang menyediakan instrumentasi otomatis untuk AWS SDKs, Entity Framework dan permintaan. HTTP Untuk melihat set lengkap opsi konfigurasi, lihat AWS X-Ray SDKuntuk. NETdi Panduan AWS X-Ray Pengembang.

Setelah Anda menambahkan paket Nuget yang diinginkan, konfigurasikan instrumentasi otomatis. Praktik terbaik adalah melakukan konfigurasi ini di luar fungsi handler fungsi Anda. Hal ini memungkinkan Anda untuk mengambil keuntungan dari penggunaan kembali lingkungan eksekusi untuk meningkatkan kinerja fungsi Anda. Dalam contoh kode berikut, RegisterXRayForAllServices metode ini dipanggil dalam konstruktor fungsi untuk menambahkan instrumentasi untuk semua AWS SDK panggilan.

[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace GetProductHandler; public class Function { private readonly IDatabaseRepository _repo; public Function() { // Add auto instrumentation for all AWS SDK calls // It is important to call this method before initializing any SDK clients AWSSDKHandler.RegisterXRayForAllServices(); this._repo = new DatabaseRepository(); } public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request) { var id = request.PathParameters["id"]; var databaseRecord = await this._repo.GetById(id); return new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.OK, Body = JsonSerializer.Serialize(databaseRecord) }; } }

Mengaktifkan penelusuran dengan konsol Lambda

Untuk mengaktifkan penelusuran 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. Pilih Edit.

  5. Di bawah X-Ray, aktifkan penelusuran Aktif.

  6. Pilih Simpan.

Mengaktifkan penelusuran dengan Lambda API

Konfigurasikan penelusuran pada fungsi Lambda Anda dengan AWS CLI AWS SDK atau, gunakan operasi berikutAPI:

Contoh AWS CLI perintah berikut memungkinkan penelusuran aktif pada fungsi bernama my-function.

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

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

Mengaktifkan penelusuran dengan AWS CloudFormation

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

contoh function-inline.yml – Konfigurasi pelacakan
Resources: function: Type: AWS::Lambda::Function Properties: TracingConfig: Mode: Active ...

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

contoh template.yml – Konfigurasi pelacakan
Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...

Menafsirkan jejak X-Ray

Fungsi Anda memerlukan izin untuk mengunggah data jejak ke X-Ray. Saat Anda mengaktifkan penelusuran di konsol Lambda, Lambda menambahkan izin yang diperlukan ke peran eksekusi fungsi Anda. Jika tidak, tambahkan AWSXRayDaemonWriteAccesskebijakan ke peran eksekusi.

Setelah mengonfigurasi penelusuran aktif, Anda dapat mengamati permintaan tertentu melalui aplikasi Anda. Grafik layanan X-Ray 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 Logs. CloudWatch

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

X-Ray tidak melacak semua permintaan ke aplikasi Anda. X-Ray menerapkan algoritma pengambilan sampel untuk memastikan bahwa penelusuran 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 laju pengambilan sampel X-Ray untuk fungsi Anda.

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

Peta layanan X-Ray dengan satu fungsi.

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 bernama fungsi saya, tetapi yang satu memiliki asal AWS::Lambda dan yang lainnya memiliki asal usul. AWS::Lambda::Function Jika AWS::Lambda segmen menunjukkan kesalahan, layanan Lambda mengalami masalah. Jika AWS::Lambda::Function segmen menunjukkan kesalahan, fungsi Anda mengalami masalah.

Jejak X-Ray 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 ditunjukkan 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 bertransisi 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.

  • Doa - Merupakan waktu yang dihabiskan untuk menjalankan kode handler Anda.

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

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

Anda juga dapat instrumen HTTP klien, merekam SQL kueri, dan membuat subsegmen kustom dengan anotasi dan metadata. Untuk informasi selengkapnya, lihat AWS X-Ray SDK for .NETdi Panduan AWS X-Ray Pengembang.

Harga

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