Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Strumentazione del codice C# in AWS Lambda
Lambda si integra con AWS X-Ray per aiutarti a tracciare, eseguire il debug e ottimizzare le applicazioni Lambda. Puoi utilizzare X-Ray per tracciare una richiesta mentre attraversa le risorse nell'applicazione, che possono includere funzioni Lambda e altri servizi AWS .
Per inviare dati di tracciamento a X-Ray, puoi utilizzare una delle SDK tre librerie:
-
AWS Distro for OpenTelemetry (ADOT)
: una distribuzione sicura, pronta per la produzione e AWS supportata di (). OpenTelemetry OTel SDK -
SDK AWS X-Ray per .NET— E SDK per generare e inviare dati di traccia a X-Ray.
-
Utensili elettrici per AWS Lambda (. NET
) — Un toolkit per sviluppatori per implementare le migliori pratiche Serverless e aumentare la velocità degli sviluppatori.
Ciascuno di essi SDKs offre modi per inviare i dati di telemetria al servizio X-Ray. Puoi quindi utilizzare X-Ray per visualizzare, filtrare e analizzare le metriche delle prestazioni dell'applicazione per identificare i problemi e le opportunità di ottimizzazione.
Importante
X-Ray e Powertools per AWS Lambda SDKs fanno parte di una soluzione di strumentazione strettamente integrata offerta da. AWS I ADOT Lambda Layer fanno parte di uno standard di settore per la strumentazione di tracciamento che raccoglie più dati in generale, ma potrebbe non essere adatta a tutti i casi d'uso. È possibile implementare il end-to-end tracciamento in X-Ray utilizzando entrambe le soluzioni. Per saperne di più sulla scelta tra di esse, consulta Scelta tra AWS Distro for Open Telemetry e X-Ray. SDKs
Sections
- Utilizzo di Powertools per (. AWS Lambda NET) e AWS SAM per tracciare
- Utilizzo degli X-Ray SDK per strumentare il tuo. NETfunzioni
- Attivazione del tracciamento con la console Lambda
- Attivazione del tracciamento con la Lambda API
- Attivazione del tracciamento con AWS CloudFormation
- Interpretazione di una traccia X-Ray
Utilizzo di Powertools per (. AWS Lambda NET) e AWS SAM per tracciare
Segui i passaggi seguenti per scaricare, creare e distribuire un'applicazione Hello World C# di esempio con Powertools integrato per (. AWS Lambda NET
Prerequisiti
Per completare le fasi riportate in questa sezione, è necessario:
-
. NET6 o. NET8
-
AWS SAM CLIversione 1.75 o successiva. Se disponi di una versione precedente di AWS SAM CLI, consulta Aggiornamento di. AWS SAM CLI
Implementa un'applicazione di esempio AWS SAM
-
Inizializza l'applicazione utilizzando il modello Hello World. TypeScript
sam init --app-template hello-world-powertools-dotnet --name sam-app --package-type Zip --runtime dotnet6 --no-tracing
-
Costruisci l'app.
cd sam-app && sam build
-
Distribuire l'app.
sam deploy --guided
-
Seguire le istruzioni visualizzate sullo schermo. Per accettare le opzioni predefinite fornite nell'esperienza interattiva, premi
Enter
.Nota
Perché HelloWorldFunction potrebbe non avere un'autorizzazione definita. Va bene? , assicurati di entrare
y
. -
Scarica URL l'applicazione distribuita:
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
-
Invoca l'APIendpoint:
curl
<URL_FROM_PREVIOUS_STEP>
In caso di esito positivo, vedrai questa risposta:
{"message":"hello world"}
-
Per ottenere le tracce per la funzione, esegui sam traces.
sam traces
L'output della traccia ha il seguente aspetto:
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
-
Si tratta di un API endpoint pubblico accessibile tramite Internet. È consigliabile eliminare l'endpoint dopo il test.
sam delete
X-Ray non traccia tutte le richieste nell'applicazione. X-Ray applica un algoritmo di campionamento per garantire che il tracciamento avvenga in modo efficiente, continuando allo stesso tempo a fornire un campione rappresentativo di tutte le richieste. La frequenza di campionamento è di una richiesta al secondo e del 5% delle altre richieste. Non puoi configurare la frequenza di campionamento dei raggi X per le tue funzioni.
Utilizzo degli X-Ray SDK per strumentare il tuo. NETfunzioni
È possibile utilizzare il codice funzione per registrare i metadati e tracciare le chiamate a valle. Per registrare i dettagli delle chiamate effettuate dalla funzione ad altre risorse e servizi, utilizza SDK AWS X-Ray per .NET. Per ottenerliSDK, aggiungete i AWSXRayRecorder
pacchetti al vostro file di progetto.
<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>
Esistono diversi pacchetti Nuget che forniscono strumentazione automatica per Entity Framework e richieste AWS SDKs. HTTP Per vedere il set completo di opzioni di configurazione, fare riferimento a for.AWS X-Ray SDK NETnella Guida per gli AWS X-Ray sviluppatori.
Dopo aver aggiunto i pacchetti Nuget desiderati, configura la strumentazione automatica. Una best practice consiste nell'eseguire questa configurazione al di fuori della funzione di gestione della funzione. Ciò consente di sfruttare il riutilizzo dell'ambiente di esecuzione per migliorare le prestazioni della funzione. Nel seguente esempio di codice, il RegisterXRayForAllServices
metodo viene chiamato nel costruttore della funzione per aggiungere la strumentazione per tutte le chiamate. AWS SDK
[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) }; } }
Attivazione del tracciamento con la console Lambda
Per attivare il tracciamento attivo sulla funzione Lambda con la console, attenersi alla seguente procedura:
Per attivare il tracciamento attivo
Aprire la pagina Funzioni
della console Lambda. -
Scegliere una funzione.
Scegliere Configuration (Configurazione) e quindi Monitoring and operations tools (Strumenti di monitoraggio e operazioni).
Scegli Modifica.
-
In X-Ray, attivare Active tracing (Tracciamento attivo).
-
Seleziona Salva.
Attivazione del tracciamento con la Lambda API
Configura il tracciamento sulla tua funzione Lambda con AWS SDK o, utilizza AWS CLI le API seguenti operazioni:
Il AWS CLI comando di esempio seguente abilita il tracciamento attivo su una funzione denominata my-function.
aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active
La modalità di tracciamento fa parte della configurazione specifica della versione quando si pubblica una versione della funzione. Non è possibile modificare la modalità di tracciamento in una versione pubblicata.
Attivazione del tracciamento con AWS CloudFormation
Per attivare il tracciamento su una AWS::Lambda::Function
risorsa in un AWS CloudFormation modello, utilizzate la proprietà. TracingConfig
Esempio function-inline.yml – Configurazione del tracciamento
Resources: function: Type: AWS::Lambda::Function Properties:
TracingConfig: Mode: Active
...
Per una AWS::Serverless::Function
risorsa AWS Serverless Application Model (AWS SAM), utilizzate la Tracing
proprietà.
Esempio template.yml – Configurazione del tracciamento
Resources: function: Type: AWS::Serverless::Function Properties:
Tracing: Active
...
Interpretazione di una traccia X-Ray
La funzione ha bisogno dell'autorizzazione per caricare i dati di traccia su X-Ray. Quando si attiva il tracciamento nella console Lambda, Lambda aggiunge le autorizzazioni necessarie al ruolo di esecuzione della funzione. Altrimenti, aggiungete la AWSXRayDaemonWriteAccess
Dopo aver configurato il tracciamento attivo, è possibile osservare richieste specifiche tramite l'applicazione. Il grafico dei servizi X-Ray mostra informazioni sull'applicazione e tutti i suoi componenti. L'esempio seguente mostra un'applicazione con due funzioni. La funzione principale elabora gli eventi e talvolta restituisce errori. La seconda funzione in alto elabora gli errori che compaiono nel gruppo di log della prima e utilizza X-Ray, Amazon Simple Storage Service (Amazon S3) e Amazon Logs. AWS SDK CloudWatch
X-Ray non traccia tutte le richieste nell'applicazione. X-Ray applica un algoritmo di campionamento per garantire che il tracciamento avvenga in modo efficiente, continuando allo stesso tempo a fornire un campione rappresentativo di tutte le richieste. La frequenza di campionamento è di una richiesta al secondo e del 5% delle altre richieste. Non puoi configurare la frequenza di campionamento dei raggi X per le tue funzioni.
In X-Ray, una traccia registra informazioni su una richiesta elaborata da uno o più servizi. Lambda registra 2 segmenti per traccia, il che crea due nodi sul grafico del servizio. L'immagine seguente evidenzia questi due nodi:
Il primo nodo a sinistra rappresenta il servizio Lambda che riceve la richiesta di chiamata. Il secondo nodo rappresenta la specifica funzione Lambda. L'esempio seguente mostra una traccia con questi 2 segmenti. Entrambi sono denominati my-function, ma uno ha un'origine di AWS::Lambda
e l'altro ha un'origine di. AWS::Lambda::Function
Se il AWS::Lambda
segmento mostra un errore, il servizio Lambda presentava un problema. Se il AWS::Lambda::Function
segmento mostra un errore, la funzione presentava un problema.
Questo esempio espande il AWS::Lambda::Function
segmento per mostrarne i tre sottosegmenti.
Nota
AWS sta attualmente implementando modifiche al servizio Lambda. A causa di queste modifiche, potresti notare piccole differenze tra la struttura e il contenuto dei messaggi di registro di sistema e dei segmenti di traccia emessi da diverse funzioni Lambda nel tuo. Account AWS
La traccia di esempio mostrata qui illustra il segmento di funzione vecchio stile. Le differenze tra i segmenti vecchio e nuovo stile sono descritte nei paragrafi seguenti.
Queste modifiche verranno implementate nelle prossime settimane e tutte le funzioni, Regioni AWS ad eccezione della Cina e delle GovCloud regioni, passeranno all'utilizzo dei messaggi di registro e dei segmenti di traccia di nuovo formato.
Il segmento di funzioni vecchio stile contiene i seguenti sottosegmenti:
-
Inizializzazione – Rappresenta il tempo trascorso a caricare la funzione e ad eseguire il codice di inizializzazione. Questo sottosegmento viene visualizzato solo per il primo evento che viene elaborato da ogni istanza della funzione.
-
Chiamata: rappresenta il tempo impiegato per eseguire il codice del gestore.
-
Overhead: rappresenta il tempo impiegato dal runtime Lambda per prepararsi a gestire l'evento successivo.
Il segmento di funzione di nuovo stile non contiene un sottosegmento. Invocation
I sottosegmenti dei clienti vengono invece collegati direttamente al segmento di funzioni. Per ulteriori informazioni sulla struttura dei segmenti di funzione di vecchio e nuovo stile, vedere. Informazioni sui monitoraggi di X-Ray
È inoltre possibile strumentare HTTP i client, registrare SQL le interrogazioni e creare sottosegmenti personalizzati con annotazioni e metadati. Per ulteriori informazioni, consulta SDK AWS X-Ray per .NET nella Guida per gli sviluppatori di AWS X-Ray .
Prezzi
Puoi utilizzare il tracciamento X-Ray gratuitamente ogni mese fino a un determinato limite come parte del AWS piano gratuito. Oltre la soglia, X-Ray addebita lo storage di traccia e il recupero. Per ulteriori informazioni, consulta Prezzi di AWS X-Ray