AWS Fargate überwachen

Instana unterstützt „ AWS Elastic Container Service “ (ECS) mit zwei Instanzen-Typen: „Fargate“ und „Elastic Compute Cloud“ ( EC2 ).

Um die auf „ AWS Fargate “ ausgeführten containerisierten Anwendungen zu überwachen, installieren Sie Fargate-Collectors wie im Abschnitt „Einrichten von Fargate-Collectors für „ Instana “ beschrieben. Sie müssen den Hostagenten nicht installieren.

Informationen zur Verwendung von „ AWS ECS “ mit dem Starttyp „ EC2 “ finden Sie unter „Installieren des Host-Agenten“ unter AWS ECS auf EC2.

Hinweis: „ AWS Fargate “ auf Elastic Kubernetes Services (EKS) wird nicht unterstützt.

Instana -Fargate-Collectors einrichten

Um Anwendungen zu überwachen, die auf „ AWS Fargate “ laufen, nutzt „ Instana “ die folgenden Fargate-Collectors:

Richten Sie diese Sammler für „ Instana “ ein, um mit der Überwachung zu beginnen.

Node.js

Der Fargate-Collector Node.js wird über eine Docker -Agentenimageebene bereitgestellt, die die Kollektordateien und ein Initialisierungsscript enthält.

  • Wenn Ihre Anwendung mit CommonJS, entwickelt wurde, richten Sie den Fargate-Collector unter Node.js ein, indem Sie die Schritte im Abschnitt CommonJS befolgen.
  • Wenn Ihre Anwendung mit ECMAScript-Modulen entwickelt wurde, richten Sie den Fargate-Collector für „ Node.js “ ein, indem Sie die Schritte im Abschnitt „ECMAScript-Module“ befolgen.

Instana unterstützt derzeit nur die x86_64 Architektur.

CommonJS

  1. Fügen Sie die folgenden Zeilen zu Ihrer Dockerfile an einer beliebigen Stelle nach der letzten FROM-Klausel hinzu:
    COPY --from=icr.io/instana/aws-fargate-nodejs:latest /instana /instana
    RUN /instana/setup.sh
    ENV NODE_OPTIONS="--require /instana/node_modules/@instana/aws-fargate"
  2. Erstellen Sie den Container und übertragen Sie ihn mit einer Push-Operation in das von Ihnen ausgewählte Image-Repository.
  3. Führen Sie die Konfigurationsschritte durch, die im Abschnitt „Aufgabendefinition konfigurieren“ beschrieben sind.

ECMAScript-Module

  1. Fügen Sie die folgenden Zeilen an einer Dockerfile beliebigen Stelle nach der letzten FROM Anweisung ein (ab Node.js18.19 ):
    COPY --from=icr.io/instana/aws-fargate-nodejs:latest /instana /instana
    RUN /instana/setup.sh
    ENV NODE_OPTIONS="--import=/instana/node_modules/@instana/aws-fargate/esm-register.mjs"
  2. Erstellen Sie den Container und übertragen Sie ihn mit einer Push-Operation in das von Ihnen ausgewählte Image-Repository.
  3. Führen Sie die Konfigurationsschritte durch, die im Abschnitt „Aufgabendefinition konfigurieren“ beschrieben sind.
Hinweis:
  • Wenn Sie mehrstufige Builds verwenden (d. h., wenn Sie mehrere Klauseln FROM in Ihrem Dockerfilehaben), fügen Sie diese Zeilen nach der letzten Klausel FROM Ihres Dockerfilehinzu.
  • Die automatische Profilerstellung für „ Node.js “-Prozesse in „ AWS Fargate “ wird nicht unterstützt.
  • Wenn Ihre Version von „ Node.js “ älter ist als „ v18.19.0 “, müssen Sie anstelle von --experimental-loader /instana/node_modules/@instana/aws-fargate/esm-loader.mjs verwenden --import /instana/node_modules/@instana/aws-fargate/esm-register.mjs.
  • Die Verwendung von --experimental-loader mit esm-loader.mjs wird in den aktuellen Versionen nicht mehr unterstützt und wird beim nächsten Update entfernt. Weitere Informationen finden Sie im Abschnitt „Kompatibilitätsänderungen “.

Versionssteuerung

Um alle verfügbaren Versionen anzuzeigen, führen Sie den folgenden Befehl aus:

curl -s https://icr.io/v2/instana/aws-fargate-nodejs/tags/list | jq .

Weitere Informationen finden Sie unter Node.js -Versionssteuerung.

Buildabhängigkeiten und native Add-ons

Wenn Sie ein minimales Basisimage für Ihre Node.js -Container verwenden, die nicht über die erforderlichen Pakete zum Erstellen nativer Node.js -Add-ons verfügen, wird die folgende Warnung in Ihrem Docker -Build angezeigt:

gyp ERR! ...some error message from trying to rebuild native add-ons, for example:
gyp ERR! stack Error: Could not find any Python installation to use
...
Warning: Rebuilding native add-ons for @instana/fargate failed. Monitoring the Fargate tasks will work nonetheless, but you will miss some Node.js metrics (GC metrics, event loop metrics, ...). See https://www.instana.com/docs/ecosystem/aws-fargate/#build-dependencies-and-native-add-ons for details."

Die Protokollmeldung deutet darauf hin, dass Instana Ihre Fargate-Aufgabe unter Node.js überwacht, jedoch möglicherweise bestimmte Metriken nicht erfasst. Um einen Metrikverlust zu vermeiden, installieren Sie die fehlenden Betriebssystempakete, zumindest vorübergehend, während des Builds. Diese Pakete können im endgültigen Image ausgeschlossen werden. Der Typ der Pakete und ihre Installation hängt von Ihrer Verteilung ab.

Siehe den folgenden Dockerfile Codeausschnitt für „ Linux “ unter Alpine :

COPY --from=icr.io/instana/aws-fargate-nodejs: latest /instana /instana
RUN apk add --no-cache --virtual .gyp \
        build-base \
        python \
    && /instana/setup.sh \
    && apk del .gyp python
ENV NODE_OPTIONS="--require /instana/node_modules/@instana/aws-fargate"

Sehen Sie sich das folgende Beispiel für Debian-basierte Distributionen (einschließlich Ubuntu) an:

COPY --from=icr.io/instana/aws-fargate-nodejs:latest /instana /instana
RUN apt-get update \
    && apt-get install build-essential \
    && /instana/setup.sh \
    && apt-get remove -y build-essential
ENV NODE_OPTIONS="--require /instana/node_modules/@instana/aws-fargate"

Bei Distributionen, die den yum Paketmanager verwenden (wie CentOS und RHEL ), führen Sie den folgenden Befehl aus, um die erforderlichen Pakete zu installieren:

RUN yum groupinstall "Development Tools"

.NET Core

Die Bereitstellung von „.NET Core “-Tracing in Ihren Fargate-Containern erfolgt genauso wie bei jeder anderen containerisierten Anwendung auf .NET Core. Sie haben zwei Möglichkeiten:

NuGet-Pakete während der Entwicklung installieren

Um NuGet -Pakete während der Entwicklung zu installieren, müssen Sie die NuGet -Pakete für den Rewriter und die verwalteten Traceerweiterungen Ihrem Projekt zur Entwicklungszeit hinzufügen oder die folgenden Schritte als Teil Ihres Builds ausführen, wenn Sie Ihr Container-Image vorbereiten:

  1. Rewriter installieren
  2. Tracing-Paket installieren
  3. .NET Core-Taskdefinition konfigurieren
Rewriter installieren

Abhängig von dem Betriebssystem, das Ihren Container unterstützt, müssen Sie eines der folgenden Rewriter-Pakete auswählen, das aus nativem Code erstellt wird und bestimmte Systembibliotheken zum Ziel hat:

Tracing-Paket installieren

Die Pakete installieren auch die neueste Version des Tracing-Pakets, die zum Zeitpunkt der Freigabe des Rewriter-Pakets verfügbar war. Fügen Sie jedoch das Tracing-Paket „ Instana “ für „.NET Core “ hinzu, um mehr Kontrolle über die Version des Tracing-Pakets zu erhalten, das Ihre Anwendung verwendet.

.NET Core-Taskdefinition konfigurieren

Legen Sie die folgenden Umgebungsvariablen fest, indem Sie die Konfigurationsschritte ausführen, die unter Taskdefinition konfigurierenbeschrieben sind:

  • CORECLR_ENABLE_PROFILING=1 Diese Einstellung aktiviert die Profilerstellung für .NET Core.
  • CORECLR_PROFILER={cf0d821e-299b-5307-a3d8-b283c03916dd} Mit dieser Einstellung clsid wird der zu verwendende Profiler festgelegt.
  • CORECLR_PROFILER_PATH=/app/instana_tracing/CoreProfiler.so Diese Einstellung verweist auf die Bibliothek, die den Profiler enthält; dabei wird davon ausgegangen, dass es sich um den app Pfad Ihrer Anwendung handelt.
  • DOTNET_STARTUP_HOOKS=/app/Instana.Tracing.Core.dll Diese Einstellung legt die Erfassung von Metriken und die Unterstützung eigenständiger Anwendungen unter .NET Core fest.

NuGet-Pakete im Docker-Build installieren

Gehen Sie wie folgt vor, um NuGet -Pakete in einem Docker -Container zu installieren:

  1. Wenn Sie ein Container-Image verwenden, das auf Alpine Linuxbasiert, ersetzen Sie die erste Zeile durch die entsprechende Erweiterung des NuGet -Pakets, die Alpine verwendet, wie im folgenden Beispiel gezeigt. Verwenden Sie andernfalls Linux.

    # after building the project, right before publishing, add the nuget-packages
    RUN dotnet add <project_name>.csproj package Instana.Tracing.Core.Rewriter.<Linux|Alpine> --version <min-version 1.0.56>
    RUN dotnet add <project_name>.csproj package Instana.Tracing.Core --version <min-version 1.1.46>
    RUN dotnet publish -c Release -o out
    
    # where the files will end up
    WORKDIR /app
    COPY --from=publish /src/out .
    
    # set the env-vars as discussed above
    ENV CORECLR_ENABLE_PROFILING=1
    ENV CORECLR_PROFILER={cf0d821e-299b-5307-a3d8-b283c03916dd}
    ENV CORECLR_PROFILER_PATH=/app/instana_tracing/CoreProfiler.so
    ENV DOTNET_STARTUP_HOOKS=/app/Instana.Tracing.Core.dll
    
    ... # Other stuff in your Docker image
     
  2. Führen Sie die in Taskdefinition konfigurierenbeschriebenen Konfigurationsschritte aus.

Go

Der Fargate-Collector von „ Go “ ist in „ github.com/instana/go-sensor1.14.0 “ und späteren Versionen enthalten. Dieser Collector erfordert keine weitere Konfiguration, abgesehen von der Einrichtung der Umgebungsvariablen, die im Abschnitt „Konfigurieren der Aufgabendefinition“ beschrieben sind. Der Tracer erkennt, dass die Anwendung auf AWS Fargate läuft, und aktiviert den Fargate Collector automatisch.

Java

Der „ Java® “-Fargate-Collector wird über ein „ Docker “-Agent-Image bereitgestellt, das die Collector-Dateien enthält.

Die Docker -Ebene ist in der containers.instana.io -Registry verfügbar. Um die Image-Ebene „ Java “ aus dem Repository „ Docker “ abzurufen, führen Sie die folgenden Schritte aus:

  1. Da die Docker -Registry eine Authentifizierung erfordert, melden Sie sich mit Ihrem Agentenschlüssel bei der Registry an, bevor Sie die Registry in Ihrem Docker -Build verwenden:

    docker login -u _ -p <your-agent-key> containers.instana.io
     

    Ersetzen Sie den Platzhalter <your-agent-key> durch Ihren tatsächlichen Instana -Agentenschlüssel auf dem System, auf dem Sie Ihr Docker -Image erstellen.

  2. Fügen Sie die folgenden Zeilen zu Ihrer Dockerfile an einer beliebigen Stelle nach der letzten FROM-Klausel hinzu:

    COPY --from=containers.instana.io/instana/release/aws/fargate/jvm:latest /instana /instana
    ENV JAVA_TOOL_OPTIONS="-javaagent:/instana/instana-fargate-collector.jar"
     
  3. Erstellen Sie den Container und übertragen Sie ihn mit einer Push-Operation in das von Ihnen ausgewählte Image-Repository.

  4. Befolgen Sie die Konfigurationsschritte, die im Abschnitt Taskdefinition konfigurierenbeschrieben sind.

Hinweise:

  • Wenn Sie mehrstufige Builds verwenden (d. h., wenn Sie mehrere Klauseln FROM in Ihrem Dockerfilehaben), fügen Sie die folgenden Zeilen in Ihrem Dockerfile nach der letzten Klausel FROM hinzu.

  • Die automatische Profilerstellung für „ Java “-Prozesse in „ AWS Fargate “ wird nicht unterstützt.

Geheime Daten

Der Fargate-Collector von „ Java “ unterstützt das Entfernen von Geheimnissen ähnlich wie der Host-Agent.

Sie können Muster für geheime Schlüssel angeben, d. h., die Daten werden aus den Trace-und Prozessdetails gefiltert. Die als vertraulich behandelten Daten werden nicht zur Verarbeitung an Instana SaaS übermittelt und stehen daher weder in der Benutzeroberfläche von Instana zur Analyse noch über API zum Abruf zur Verfügung.

Geheime Schlüssel werden durch die Umgebungsvariable INSTANA_SECRETS unter Verwendung des folgenden Formats definiert:

<matcher>:<secret>[,<secret>]
 

matcher kann einer der folgenden Werte mit der entsprechenden Semantik für die bereitgestellten geheimen Schlüssel sein:

equals-ignore-case, equals, contains-ignore-case, contains, regex
 

Wenn keine geheimen Schlüssel konfiguriert sind, wird ein geheimer Standardschlüssel verwendet. Die folgende Einstellung ist aktiviert, um den geheimen Schlüssel abzurufen:

INSTANA_SECRETS=contains-ignore-case:key,password,secret
 

Wenn ein Schlüssel mit einem Eintrag aus der Liste der Geheimnisse übereinstimmt, wird der Wert unkenntlich gemacht und nicht an das Backend von Instana gesendet.

Geheime Schlüssel auf Infrastruktur-und Plattformebene sind Prozessumgebungsvariablen.

Geheime Schlüssel zur Laufzeit:

  • JDBC-Verbindungszeichenfolgen
  • HTTP Abfrageparameter, wie z. B. https://my.domain/accounts/status?account=<secret_1>&user=<secret_2> (alle unterstützten Laufzeiten finden Sie in der folgenden Support-Matrix)
  • HTTP Parameter für Matrixpfade, wie zum Beispiel https://my.domain/accounts/account=<secret_1>;user=<secret_1>/status

Hinweis :

  • Instana unterstützt nicht die Behandlung beliebiger Segmente in einem „ URL “-Pfad als Geheimnisse. Wenn beispielsweise die Datei „ URL “ wie folgt aufgebaut https://my.domain/accounts/<secret>/status ist: Der Aufwand, beispielsweise reguläre Ausdrücke auf Pfade unter URL anzuwenden, um Segmente zu verwerfen, ist unverhältnismäßig hoch.

  • Instana erfasst keine SQL-Parameter aus gespeicherten Prozeduren. Ebenso werden für beliebige Pfadsegmente Literale aus SQL-Abfragen nicht entfernt; verwenden Sie parametrisierte Abfragen.

Java-Trace-SDK

Der „ Java “-Fargate-Collector unterstützt das „ Java “-Trace-SDK, ähnlich wie der Agent. Der Fargate-Collector „ Java “ wird jedoch über die Umgebungsvariable INSTANA_INSTRUMENTATION_SDK_PACKAGES und nicht über die Agent-Konfiguration aktiviert.

Ausführliche Informationen zur Verwendung des „ Java “ Trace SDK finden Sie auf der entsprechenden Dokumentationsseite.

INSTANA_INSTRUMENTATION_SDK_PACKAGES kann eine durch Kommas getrennte Liste von Paketnamen aus dem „ Java “ enthalten, für die das SDK aktiviert ist. Beispiel:

INSTANA_INSTRUMENTATION_SDK_PACKAGES=my.first.package,my.second.package
 

PHP

Der „ PHP “-Fargate-Collector ist in der Tracing-Erweiterung „ Instana “ ( PHP ) enthalten. Um die Erweiterung „ Instana “ einzubinden, fügen Sie die folgenden Zeilen an einer Dockerfile beliebigen Stelle nach der letzten FROM Klausel ein:

RUN --mount=type=secret,id=agent_download_key,env=INSTANA_DOWNLOAD_KEY \
# Download the helper shell script extension to install PHP's extension
    curl https://_:${INSTANA_DOWNLOAD_KEY}@artifact-public.instana.io/artifactory/shared/com/instana/php/instana-ext-download-script/php-instana-ext-download-script.sh \
        -o php-instana-ext-download-script.sh \
    && chmod +x ./php-instana-ext-download-script.sh \
# Running the helper script which downloads the PHP extension
# To check all available options run the shell script without any flags
    && ./php-instana-ext-download-script.sh -p <php version> -d serverless -t <NTS/ZTS> -s <OpenSSL version> \
    && mv ./instana.so $(php -i | sed -nE 's/^extension_dir => (.*) =>.*/\1/p')/instana.so \
# Enable the extension by adding a zzz-instana.ini file
    && echo 'extension=instana.so' > $(php -i | sed -nE 's/.*additional \.ini files => (.*)/\1/p')/zzz-instana.ini
 

Weitere Informationen zum Hilfs-Shell-Skript finden Sie im Abschnitt „Manuelle Installation der Tracing-Erweiterung für PHP “.

Um zu verhindern, dass Ihr Download-Schlüssel für den „ Instana “-Agenten offengelegt wird, übergeben Sie ihn als Build-Geheimnis unter „ Docker “.

Hinweis :

  • Wenn Sie das Modul „ PHP “ von „ Apache “ verwenden, stellen Sie die Umgebungsvariablen von „ Instana “ explizit für „ PHP “ bereit. Fügen Sie dazu diese Zeile PassEnv INSTANA_AGENT_KEY INSTANA_ENDPOINT_URL zusammen mit allen anderen Umgebungsvariablen in die Konfigurationsdatei „ Apache “ ein.

  • Wenn Sie „ PHP -FPM“ verwenden, das auf bestimmten Basis-Images installiert ist, beispielsweise auf einem offiziellen Basis-Image von Debian oder Ubuntu, müssen Sie entweder in der FPM-Pool-Konfiguration clear_env=no die entsprechende Einstellung vornehmen oder die Umgebungsvariable „ Instana “ explizit zulassen. Offizielle Bilder von „ PHP “ – FPM Docker sind clear_env=no standardmäßig eingestellt. In einigen Basis-Images verfügt „ PHP “ über ein separates Verzeichnis für CLI- und .ini FPM-Dateien. Das richtige Verzeichnis, das hinzugefügt werden muss zzz-instana.ini , lässt sich ermitteln, indem man die Scan this dir for additional .ini files Zeile in der Ausgabe von php-fpm -i, php-fpm8.x -i, oder überprüft, die von PHPphpinfo() -FPM erzeugt wird. Führen Sie „ PHP -FPM“ nicht als Dienst aus. Führen Sie es stattdessen als Daemon oder im Vordergrund aus.

  • PHP - Die FPM-Prozessüberwachung, die der Überwachung mit dem PHP -FPM-Sensor ähnelt, wird ebenfalls unterstützt. Siehe „ PHP -FPM-Statusseite aktivieren “.

  • Stellen Sie sicher, dass OpenSSL3 oder OpenSSL1.1 im Container „ PHP “ verfügbar ist. OpenSSL3 ist standardmäßig auf vielen Basis-Images installiert, darunter die offiziellen Images von Debian, Ubuntu, Alpine, Amazon Linux und PHP Docker.

  • Verwenden Sie den Fargate-Collector unter PHP und die native Tracing-Funktion unter PHP (mit dem Agenten unter Instana ) nicht gleichzeitig, da in einer Laufzeitumgebung von PHP jeweils nur eine Art der Überwachung funktioniert. Damit die native Ablaufverfolgung in einer „ AWS Fargate “-Konfiguration funktioniert, in der der „ Instana “-Agent aktiv ist, stellen Sie sicher, dass die INSTANA_ENDPOINT_URLINSTANA_AGENT_KEY Umgebungsvariablen und der „ PHP “-Laufzeitumgebung nicht zur Verfügung stehen.

Befolgen Sie die Konfigurationsschritte, die im Abschnitt „Aufgabendefinition konfigurieren“ beschrieben sind.

Taskdefinition konfigurieren

Hinweise:

  • Die Anweisungen zur Konfiguration der Aufgabendefinition gelten für die Einrichtung aller „ Instana “-Kollektoren unter AWS Fargate.

  • Bevor Sie die Taskdefinition konfigurieren, stellen Sie sicher, dass die Container-Images gemäß den Anweisungen für die Laufzeit erstellt werden, die Ihre Anwendung verwendet.

  • Wenn Ihre Anwendung auf „.NET Core “ basiert und Sie die Pakete „ Instana “ und „ NuGet “ während der Entwicklung installieren, wie unter „Installieren der „ NuGet “-Pakete während der Entwicklung “ beschrieben, stellen Sie sicher, dass Sie die Umgebungsvariablen setzen, die unter „Konfigurieren der Aufgaben-Definition „.NET Core ““ in Ihrer Aufgaben-Definition aufgeführt sind.

Alle „ Instana “-Collectors auf AWS Fargate benötigen einen gemeinsamen Satz von Konfigurationswerten, um eine Verbindung zum Backend unter Instana herzustellen und sich dort zu authentifizieren. Führen Sie die folgenden Schritte aus, um Ihre Taskdefinition zu konfigurieren:

  1. Melden Sie sich bei der AWS -Konsole an und wechseln Sie zu ECS.

  2. Klicken Sie im Navigationsfenster auf Taskdefinitionen.

  3. Klicken Sie auf der Konfigurationsseite für Taskdefinitionen auf Neue Revision erstellen , um eine Revision der Taskdefinition zu erstellen:

    Aufgabendefinitionsrevision erstellen

  4. Go zur Containerdefinition Ihres Containers, der über den Fargate-Collector verfügt, den Sie gerade konfigurieren:

    Containerdefinition bearbeiten

  5. Fügen Sie die folgenden zwei Umgebungsvariablen zur Containerspezifikation hinzu:

    Die korrekten Werte für diese Umgebungsvariablen erhalten Sie auch, indem Sie in Ihrer Instana -Benutzeroberfläche auf „Mehr“ > „Agenten“ > Instana -Agenten installieren “ > „ Plattform: " AWS "“ > „Technologie AWS Fargate klicken.

    Umgebungsvariablen im Container definieren

Weitere Informationen zu umgebungsbasierten Konfigurationen, die von „ AWS Fargate “-Collectors unterstützt werden, finden Sie unter „Allgemeine Referenz – Umgebungsvariablen “.