Konfiguration des X-Ray SDK für. NET - AWS X-Ray

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.

Konfiguration des X-Ray SDK für. NET

Sie können das X-Ray SDK für konfigurieren. NETmit Plug-ins, um Informationen über den Dienst aufzunehmen, auf dem Ihre Anwendung läuft, das standardmäßige Sampling-Verhalten zu ändern oder Sampling-Regeln hinzuzufügen, die für Anfragen an bestimmte Pfade gelten.

Für. NETWebanwendungen, fügen Sie Schlüssel zum appSettings Abschnitt Ihrer Web.config Datei hinzu.

Beispiel Web.config
<configuration> <appSettings> <add key="AWSXRayPlugins" value="EC2Plugin"/> <add key="SamplingRuleManifest" value="sampling-rules.json"/> </appSettings> </configuration>

Für. NETCore, erstellen Sie eine Datei appsettings.json mit dem Namen eines Schlüssels der obersten Ebene namensXRay.

Beispiel . NETappsettings.json
{ "XRay": { "AWSXRayPlugins": "EC2Plugin", "SamplingRuleManifest": "sampling-rules.json" } }

Erstellen Sie dann in Ihrem Anwendungscode ein Konfigurationsobjekt und verwenden Sie es, um den X-Ray-Recorder zu initialisieren. Führen Sie dies aus, bevor Sie den Recorder initialisieren.

Beispiel . NETCore Program.cs — Konfiguration des Rekorders
using Amazon.XRay.Recorder.Core; ... AWSXRayRecorder.InitializeInstance(configuration);

Wenn Sie eine instrumentieren. NETCore-Webanwendung: Sie können das Konfigurationsobjekt auch an die UseXRay Methode übergeben, wenn Sie den Message-Handler konfigurieren. Verwenden Sie für Lambda-Funktionen die oben gezeigte InitializeInstance Methode.

Für weitere Informationen über die. NETKernkonfiguration API finden Sie unter Konfiguration einesASP. NETCore-App auf docs.microsoft.com.

Plug-ins

Verwenden Sie Plugins zum Hinzufügen von Daten über den Service, der Ihre Anwendung hostet.

Plug-ins
  • Amazon EC2 — EC2Plugin fügt die Instance-ID, die Availability Zone und die CloudWatch Logs-Gruppe hinzu.

  • Elastic Beanstalk — ElasticBeanstalkPlugin fügt den Umgebungsnamen, die Versionsbezeichnung und die Bereitstellungs-ID hinzu.

  • Amazon ECS — ECSPlugin fügt die Container-ID hinzu.

Um ein Plugin zu verwenden, konfigurieren Sie das X-Ray SDK für. NETClient durch Hinzufügen der AWSXRayPlugins Einstellung. Wenn mehrere Plugins auf Ihre Anwendung zutreffen, geben Sie alle Plugins in der gleichen Einstellung an (getrennt durch Kommata).

Beispiel Web.config – Plugins
<configuration> <appSettings> <add key="AWSXRayPlugins" value="EC2Plugin,ElasticBeanstalkPlugin"/> </appSettings> </configuration>
Beispiel . NETCore appsettings.json — Plugins
{ "XRay": { "AWSXRayPlugins": "EC2Plugin,ElasticBeanstalkPlugin" } }

Samplingregeln

Der SDK verwendet die Sampling-Regeln, die Sie in der X-Ray-Konsole definieren, um zu bestimmen, welche Anfragen aufgezeichnet werden sollen. Die Standardregel verfolgt die erste Anfrage jede Sekunde und fünf Prozent aller weiteren Anfragen aller Dienste, die Traces an X-Ray senden. Erstellen Sie zusätzliche Regeln in der X-Ray-Konsole, um die Menge der aufgezeichneten Daten für jede Ihrer Anwendungen anzupassen.

Das SDK wendet benutzerdefinierte Regeln in der Reihenfolge an, in der sie definiert sind. Wenn eine Anfrage mehreren benutzerdefinierten Regeln entspricht, SDK gilt nur die erste Regel.

Anmerkung

Wenn X-Ray nicht erreichen SDK kann, um Sampling-Regeln abzurufen, wird auf eine lokale Standardregel zurückgesetzt, die die erste Anfrage pro Sekunde und fünf Prozent aller zusätzlichen Anfragen pro Host vorsieht. Dies kann passieren, wenn der Host nicht berechtigt istAPIs, Sampling aufzurufen, oder wenn er keine Verbindung zum X-Ray-Daemon herstellen kann, der SDK als TCP Proxy für API Aufrufe von fungiert.

Sie können den auch so konfigurierenSDK, dass Sampling-Regeln aus einem JSON Dokument geladen werden. Sie SDK können lokale Regeln als Backup für Fälle verwenden, in denen Röntgenproben nicht verfügbar sind, oder ausschließlich lokale Regeln verwenden.

Beispiel sampling-rules.json
{ "version": 2, "rules": [ { "description": "Player moves.", "host": "*", "http_method": "*", "url_path": "/api/move/*", "fixed_target": 0, "rate": 0.05 } ], "default": { "fixed_target": 1, "rate": 0.1 } }

Dieses Beispiel definiert eine benutzerdefinierte Regel und eine Standardregel. Die benutzerdefinierte Regel wendet eine Stichprobenrate von fünf Prozent an, ohne dass eine Mindestanzahl von Anfragen für Pfade verfolgt werden muss, unter /api/move/ denen Pfade verfolgt werden müssen. Die Standardregel verfolgt die erste Anfrage jede Sekunde und 10 Prozent der weiteren Anfragen.

Der Nachteil der lokalen Definition von Regeln besteht darin, dass das feste Ziel von jeder Instanz des Rekorders unabhängig angewendet wird, anstatt vom X-Ray-Dienst verwaltet zu werden. Wenn Sie mehr Hosts bereitstellen, wird die feste Rate vervielfacht, wodurch es schwieriger wird, die Menge der aufgezeichneten Daten zu kontrollieren.

Bei AWS Lambda aktivierter Option können Sie die Samplerate nicht ändern. Wenn Ihre Funktion von einem instrumentierten Dienst aufgerufen wird, werden Aufrufe, die Anfragen generierten, die von diesem Dienst abgetastet wurden, von Lambda aufgezeichnet. Wenn aktives Tracing aktiviert ist und kein Tracing-Header vorhanden ist, trifft Lambda die Stichprobenentscheidung.

Um Backup-Regeln zu konfigurieren, teilen Sie dem X-Ray SDK mit. NETum Sampling-Regeln aus einer Datei mit der SamplingRuleManifest Einstellung zu laden.

Beispiel . NETWeb.config - Regeln für die Probenahme
<configuration> <appSettings> <add key="SamplingRuleManifest" value="sampling-rules.json"/> </appSettings> </configuration>
Beispiel . NETCore appsettings.json — Sampling-Regeln
{ "XRay": { "SamplingRuleManifest": "sampling-rules.json" } }

Um nur lokale Regeln zu verwenden, erstellen Sie den Recorder mit einer LocalizedSamplingStrategy. Wenn Sie Sicherungsregeln konfiguriert haben, entfernen Sie die Konfiguration.

Beispiel . NETglobal.asax — Lokale Stichprobenregeln
var recorder = new AWSXRayRecorderBuilder().WithSamplingStrategy(new LocalizedSamplingStrategy("samplingrules.json")).Build(); AWSXRayRecorder.InitializeInstance(recorder: recorder);
Beispiel . NETCore Program.cs — Lokale Probenahmeregeln
var recorder = new AWSXRayRecorderBuilder().WithSamplingStrategy(new LocalizedSamplingStrategy("sampling-rules.json")).Build(); AWSXRayRecorder.InitializeInstance(configuration,recorder);

Protokollierung (. NET)

Das X-Ray SDK für. NETverwendet den gleichen Protokollierungsmechanismus wie der AWS SDK for .NET. Wenn Sie Ihre Anwendung bereits so konfiguriert haben, dass die AWS SDK for .NET Ausgabe protokolliert wird, gilt dieselbe Konfiguration für die Ausgabe von X-Ray SDK for. NET.

Zum Konfigurieren von Protokollierung fügen Sie einen Konfigurationsabschnitt mit dem Namen aws Ihrer App.config-Datei oder Web.config-Datei hinzu.

Beispiel Web.config – Protokollierung
... <configuration> <configSections> <section name="aws" type="Amazon.AWSSection, AWSSDK.Core"/> </configSections> <aws> <logging logTo="Log4Net"/> </aws> </configuration>

Weitere Informationen finden Sie unter Konfigurieren Ihrer AWS SDK for .NET -Anwendung im AWS SDK for .NET -Entwicklerhandbuch.

Protokollierung (. NETKern)

Das X-Ray SDK für. NETverwendet dieselben Protokollierungsoptionen wie der AWS SDK for .NET. Um die Protokollierung für zu konfigurieren. NETKernanwendungen: Übergeben Sie die Protokollierungsoption an die AWSXRayRecorder.RegisterLogger Methode.

Um beispielsweise log4net zu verwenden, erstellen Sie eine Konfigurationsdatei, die den Logger, das Ausgabeformat und den Speicherort der Datei definiert.

Beispiel . NETKern log4net.config
<?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net"> <file value="c:\logs\sdk-log.txt" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> </layout> </appender> <logger name="Amazon"> <level value="DEBUG" /> <appender-ref ref="FileAppender" /> </logger> </log4net>

Erstellen Sie dann den Logger und übernehmen Sie die Konfiguration in Ihren Programmcode.

Beispiel . NETCore Program.cs — Protokollierung
using log4net; using Amazon.XRay.Recorder.Core; class Program { private static ILog log; static Program() { var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly()); XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config")); log = LogManager.GetLogger(typeof(Program)); AWSXRayRecorder.RegisterLogger(LoggingOptions.Log4Net); } static void Main(string[] args) { ... } }

Weitere Informationen zur Konfiguration von log4net finden Sie unter Konfiguration auf logging.apache.org.

Umgebungsvariablen

Sie können Umgebungsvariablen verwenden, um das X-Ray SDK für zu konfigurieren. NET. Die SDK unterstützt die folgenden Variablen.

  • AWS_XRAY_TRACING_NAME— Legen Sie einen Dienstnamen fest, den er für Segmente SDK verwendet. Überschreibt den für die Segmentbenennungsstrategie des Servlet-Filters festgelegten Dienstnamen.

  • AWS_XRAY_DAEMON_ADDRESS— Legt den Host und den Port des X-Ray-Daemon-Listeners fest. Standardmäßig wird er sowohl 127.0.0.1:2000 für Trace-Daten (UDP) als auch für Sampling (TCP) SDK verwendet. Verwenden Sie diese Variable, wenn Sie den Daemon so konfiguriert haben, dass er auf einem anderen Port lauscht oder wenn er auf einem anderen Host läuft.

    Format
    • Derselbe Portaddress:port

    • Verschiedene Anschlüssetcp:address:port udp:address:port

  • AWS_XRAY_CONTEXT_MISSING— Auf einstellen, RUNTIME_ERROR um Ausnahmen auszulösen, wenn Ihr instrumentierter Code versucht, Daten aufzuzeichnen, obwohl kein Segment geöffnet ist.

    Zulässige Werte
    • RUNTIME_ERROR— Löst eine Laufzeitausnahme aus.

    • LOG_ERROR— Fehler protokollieren und fortfahren (Standard).

    • IGNORE_ERROR— Fehler ignorieren und fortfahren.

    Fehler im Zusammenhang mit fehlenden Segmenten oder Untersegmenten können auftreten, wenn Sie versuchen, einen instrumentierten Client in Startcode zu verwenden, der ausgeführt wird, wenn keine Anfrage geöffnet ist, oder in Code, der einen neuen Thread erzeugt.