Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Instrumentierung von C#-Code in AWS Lambda
Lambda lässt sich integrieren AWS X-Ray , um Ihnen zu helfen, Lambda-Anwendungen zu verfolgen, zu debuggen und zu optimieren. Sie können mit X-Ray eine Anforderung verfolgen, während sie Ressourcen in Ihrer Anwendung durchläuft, die Lambda-Funktionen und andere AWS -Services enthalten können.
Um Tracing-Daten an X-Ray zu senden, können Sie eine von drei SDK Bibliotheken verwenden:
-
AWS Distribution for OpenTelemetry (ADOT)
— Eine sichere, produktionsbereite und AWS unterstützte Distribution von (). OpenTelemetry OTel SDK -
AWS X-Ray SDK for .NET— Und SDK zum Generieren und Senden von Trace-Daten an X-Ray.
-
Elektrowerkzeuge für AWS Lambda (. NET
) — Ein Entwickler-Toolkit zur Implementierung von Best Practices für Serverless und zur Steigerung der Entwicklergeschwindigkeit.
Jedes SDKs bietet Möglichkeiten, Ihre Telemetriedaten an den X-Ray-Dienst zu senden. Sie können dann mit X-Ray die Leistungsmetriken Ihrer Anwendung anzeigen, filtern und erhalten, um Probleme und Möglichkeiten zur Optimierung zu identifizieren.
Wichtig
X-Ray und Powertools für AWS Lambda SDKs sind Teil einer eng integrierten Instrumentierungslösung von AWS. Die ADOT Lambda-Layer sind Teil eines branchenweiten Standards für Tracing-Instrumente, die im Allgemeinen mehr Daten sammeln, aber möglicherweise nicht für alle Anwendungsfälle geeignet sind. Sie können die end-to-end Ablaufverfolgung in X-Ray mit beiden Lösungen implementieren. Weitere Informationen zur Auswahl zwischen beiden finden Sie unter Wählen zwischen der AWS Distribution für Open Telemetry und X-Ray. SDKs
Sections
- Verwendung von Powertools für (. AWS Lambda NET) und AWS SAM zur Rückverfolgung
- Verwenden Sie das RöntgengerätSDK, um Ihre zu instrumentieren. NETFunktionen
- Aktivieren der Nachverfolgung mit der Lambda-Konsole
- Tracing mit dem Lambda aktivieren API
- Die Ablaufverfolgung wird aktiviert mit AWS CloudFormation
- Interpretieren einer X-Ray-Nachverfolgung
Verwendung von Powertools für (. AWS Lambda NET) und AWS SAM zur Rückverfolgung
Gehen Sie wie folgt vor, um eine Hello World C#-Beispielanwendung mit integrierten Powertools für (herunterzuladen, zu erstellen und bereitzustellen. AWS Lambda NET
Voraussetzungen
Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
-
. NET6 oder. NET8
-
AWS SAM CLIVersion 1.75 oder höher. Wenn Sie eine ältere Version von haben AWS SAM CLI, finden Sie weitere Informationen unter Aktualisieren von. AWS SAM CLI
Stellen Sie eine AWS SAM Beispielanwendung bereit
-
Initialisieren Sie die Anwendung mithilfe der Hello TypeScript World-Vorlage.
sam init --app-template hello-world-powertools-dotnet --name sam-app --package-type Zip --runtime dotnet6 --no-tracing
-
Entwickeln Sie die App.
cd sam-app && sam build
-
Stellen Sie die Anwendung bereit.
sam deploy --guided
-
Folgen Sie den Anweisungen auf dem Bildschirm. Um die im interaktiven Erlebnis bereitgestellten Standardoptionen zu akzeptieren, drücken Sie
Enter
.Anmerkung
Für ist HelloWorldFunction möglicherweise keine Autorisierung definiert. Ist das in Ordnung? , stellen Sie sicher, dass Sie eintreten
y
. -
Rufen Sie URL die bereitgestellte Anwendung ab:
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
-
Rufen Sie den API Endpunkt auf:
curl
<URL_FROM_PREVIOUS_STEP>
Wenn der Link erfolgreich ausgeführt wurde, sehen Sie die folgende Antwort:
{"message":"hello world"}
-
Führen Sie sam traces aus, um die Traces für die Funktion zu erhalten.
sam traces
Das Nachverfolgungsergebnis sieht folgendermaßen aus:
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
-
Dies ist ein öffentlicher API Endpunkt, auf den über das Internet zugegriffen werden kann. Es wird empfohlen, dass Sie den Endpunkt nach dem Testen löschen.
sam delete
X-Ray verfolgt nicht alle Anfragen an Ihre Anwendung nach. X-Ray wendet einen Sampling-Algorithmus an, um sicherzustellen, dass die Nachverfolgung effizient ist, und stellt dennoch ein repräsentatives Beispiel aller Anfragen bereit. Die Samplingrate beträgt 1 Anforderung pro Sekunde und 5 Prozent aller weiteren Anforderungen. Sie können die Röntgenabtastrate nicht für Ihre Funktionen konfigurieren.
Verwenden Sie das RöntgengerätSDK, um Ihre zu instrumentieren. NETFunktionen
Sie können Ihren Funktionscode instrumentieren, um Metadaten aufzuzeichnen und Downstream-Aufrufe zu verfolgen. Um Details zu Aufrufen aufzuzeichnen, die Ihre Funktion an andere Ressourcen und Dienste vornimmt, verwenden Sie das AWS X-Ray SDK for .NET. Um die zu erhaltenSDK, fügen Sie die AWSXRayRecorder
Pakete zu Ihrer Projektdatei hinzu.
<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>
Es gibt eine Reihe von Nuget-Paketen, die automatische Instrumentierung für AWS SDKs Entity Framework und HTTP Anfragen bereitstellen. Den vollständigen Satz der Konfigurationsoptionen finden Sie unter für AWS X-Ray SDK. NETim AWS X-Ray Entwicklerhandbuch.
Nachdem Sie die gewünschten Nuget-Pakete hinzugefügt haben, konfigurieren Sie die automatische Instrumentierung. Es empfiehlt sich, diese Konfiguration außerhalb der Handler-Funktion Ihrer Funktion durchzuführen. So können Sie die Wiederverwendung der Ausführungsumgebung nutzen, um die Leistung Ihrer Funktion zu verbessern. Im folgenden Codebeispiel wird die RegisterXRayForAllServices
Methode im Funktionskonstruktor aufgerufen, um Instrumentierung für alle AWS SDK Aufrufe hinzuzufügen.
[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) }; } }
Aktivieren der Nachverfolgung mit der Lambda-Konsole
Gehen Sie folgendermaßen vor, um die aktive Nachverfolgung Ihrer Lambda-Funktion mit der Konsole umzuschalten:
So aktivieren Sie die aktive Nachverfolgung
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie eine Funktion aus.
Wählen Sie Configuration (Konfiguration) und dann Monitoring and operations tools (Überwachungs- und Produktionstools).
Wählen Sie Edit (Bearbeiten) aus.
-
Schalten Sie unter X-Ray Active tracing (Aktive Nachverfolgung) ein.
-
Wählen Sie Save (Speichern) aus.
Tracing mit dem Lambda aktivieren API
Konfigurieren Sie die Ablaufverfolgung für Ihre Lambda-Funktion mit dem AWS CLI oder AWS SDK und verwenden Sie die folgenden Operationen: API
Der folgende AWS CLI Beispielbefehl aktiviert die aktive Ablaufverfolgung für eine Funktion namens my-function.
aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active
Der Ablaufverfolgungsmodus ist Teil der versionsspezifischen Konfiguration, wenn Sie eine Version Ihrer Funktion veröffentlichen. Sie können den Ablaufverfolgungsmodus für eine veröffentlichte Version nicht ändern.
Die Ablaufverfolgung wird aktiviert mit AWS CloudFormation
Um die Ablaufverfolgung für eine AWS::Lambda::Function
Ressource in einer AWS CloudFormation Vorlage zu aktivieren, verwenden Sie die TracingConfig
Eigenschaft.
Beispiel function-inline.yml – Ablaufverfolgungskonfiguration
Resources: function: Type: AWS::Lambda::Function Properties:
TracingConfig: Mode: Active
...
Verwenden Sie für eine AWS::Serverless::Function
Ressource AWS Serverless Application Model (AWS SAM) die Tracing
Eigenschaft.
Beispiel template.yml – Ablaufverfolgungskonfiguration
Resources: function: Type: AWS::Serverless::Function Properties:
Tracing: Active
...
Interpretieren einer X-Ray-Nachverfolgung
Ihre Funktion benötigt die Berechtigung zum Hochladen von Trace-Daten zu X-Ray. Wenn Sie die aktive Nachverfolgung in der Lambda-Konsole aktivieren, fügt Lambda der Ausführungsrolle Ihrer Funktion die erforderlichen Berechtigungen hinzu. Andernfalls fügen Sie die AWSXRayDaemonWriteAccess
Nachdem Sie die aktive Nachverfolgung konfiguriert haben, können Sie bestimmte Anfragen über Ihre Anwendung beobachten. Das X-Ray-Service-Diagramm zeigt Informationen über Ihre Anwendung und alle ihre Komponenten an. Das folgende Beispiel zeigt eine Anwendung mit zwei Funktionen. Die primäre Funktion verarbeitet Ereignisse und gibt manchmal Fehler zurück. Die zweite Funktion an oberster Stelle verarbeitet Fehler, die in der ersten Protokollgruppe auftreten, und verwendet die AWS SDK zum Aufrufen von X-Ray, Amazon Simple Storage Service (Amazon S3) und Amazon CloudWatch Logs.
X-Ray verfolgt nicht alle Anfragen an Ihre Anwendung nach. X-Ray wendet einen Sampling-Algorithmus an, um sicherzustellen, dass die Nachverfolgung effizient ist, und stellt dennoch ein repräsentatives Beispiel aller Anfragen bereit. Die Samplingrate beträgt 1 Anforderung pro Sekunde und 5 Prozent aller weiteren Anforderungen. Sie können die Röntgenabtastrate nicht für Ihre Funktionen konfigurieren.
In X-Ray, zeichnet eine Ablaufverfolgung Informationen zu einer Anforderung auf, die von einem oder mehreren Services verarbeitet wird. Lambda zeichnet 2 Segmente pro Trace auf, wodurch zwei Knoten im Service-Graph erstellt werden. In der folgenden Abbildung werden diese beiden Knoten hervorgehoben:
Der erste Knoten auf der linken Seite stellt den Lambda-Service dar, der die Aufrufanforderung empfängt. Der zweite Knoten stellt Ihre spezifische Lambda-Funktion dar. Das folgende Beispiel zeigt eine Nachverfolgung mit diesen zwei Segmenten. Beide haben den Namen my-function, aber eine hat einen Ursprung von AWS::Lambda
und die andere hat einen Ursprung vonAWS::Lambda::Function
. Wenn das AWS::Lambda
Segment einen Fehler anzeigt, hatte der Lambda-Service ein Problem. Wenn das AWS::Lambda::Function
Segment einen Fehler anzeigt, hatte Ihre Funktion ein Problem.
In diesem Beispiel wird das AWS::Lambda::Function
Segment erweitert, sodass seine drei Untersegmente angezeigt werden.
Anmerkung
AWS implementiert derzeit Änderungen am Lambda-Service. Aufgrund dieser Änderungen können Sie geringfügige Unterschiede zwischen der Struktur und dem Inhalt von Systemprotokollnachrichten und Trace-Segmenten feststellen, die von verschiedenen Lambda-Funktionen in Ihrem AWS-Konto ausgegeben werden.
Der hier gezeigte Beispiel-Trace veranschaulicht das Funktionssegment im alten Stil. Die Unterschiede zwischen den Segmenten im alten und im neuen Stil werden in den folgenden Abschnitten beschrieben.
Diese Änderungen werden in den kommenden Wochen umgesetzt, und alle Funktionen AWS-Regionen außer China und den GovCloud Regionen werden auf die Verwendung von Protokollnachrichten und Trace-Segmenten im neuen Format umgestellt.
Das Funktionssegment im alten Stil enthält die folgenden Untersegmente:
-
Initialisierung – Stellt die Zeit dar, die für das Laden Ihrer Funktion und das Ausführen des Initialisierungscodes aufgewendet wurde. Dieses Untersegment erscheint nur für das erste Ereignis, das jede Instance Ihrer Funktion verarbeitet.
-
Invocation (Aufruf) – Stellt die Zeit dar, die beim Ausführen Ihres Handler-Codes vergeht.
-
Overhead (Aufwand) – Stellt die Zeit dar, die von der Lambda-Laufzeitumgebung bei der Verarbeitung des nächsten Ereignisses verbraucht wird.
Das Funktionssegment im neuen Stil enthält kein Untersegment. Invocation
Stattdessen werden Kundenuntersegmente direkt an das Funktionssegment angehängt. Weitere Informationen zur Struktur der Funktionssegmente im alten und neuen Stil finden Sie unter. Grundlegendes zu X-Ray-Ablaufverfolgungen
Sie können auch HTTP Clients instrumentieren, SQL Abfragen aufzeichnen und benutzerdefinierte Untersegmente mit Anmerkungen und Metadaten erstellen. Weitere Informationen finden Sie unter AWS X-Ray SDK for .NET im AWS X-Ray -Entwicklerhandbuch.
Preisgestaltung
Im Rahmen des kostenlosen Kontingents können Sie X-Ray Tracing jeden Monat bis zu einem bestimmten Limit AWS kostenlos nutzen. Über den Schwellenwert hinaus berechnet X-Ray Gebühren für die Speicherung und den Abruf der Nachverfolgung. Weitere Informationen finden Sie unter AWS X-Ray Preise