Aktivieren Sie Anwendungssignale auf Kubernetes-Plattformen - Amazon CloudWatch

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.

Aktivieren Sie Anwendungssignale auf Kubernetes-Plattformen

Folgen Sie den Anweisungen in diesem Abschnitt, um Anwendungen zu aktivierenEKS, die auf anderen Kubernetes-Systemen als Amazon ausgeführt werden. Application Signals unterstützt Java, Python und. NETAnwendungen.

Voraussetzungen

Schritt 1: Application Signals in Ihrem Konto aktivieren

Wenn Sie Application Signals in diesem Konto noch nicht aktiviert haben, müssen Sie Application Signals die Berechtigungen gewähren, die es benötigt, um Ihre Services zu erkennen. Gehen Sie dazu wie folgt vor. Dies muss nur einmal für Ihr Konto durchgeführt werden.

So aktivieren Sie Application Signals für Ihre Anwendungen
  1. Öffnen Sie die CloudWatch Konsole unter. https://console.aws.amazon.com/cloudwatch/

  2. Wählen Sie im Navigationsbereich Services.

  3. Wählen Sie Mit der Entdeckung Ihrer Services beginnen.

  4. Aktivieren Sie das Kontrollkästchen und wählen Sie Start discovery your Services aus.

    Wenn Sie diesen Schritt zum ersten Mal in Ihrem Konto ausführen, erstellt Application Signals die AWSServiceRoleForCloudWatchApplicationSignalsdienstbezogene Rolle. Diese Rolle gewährt Application Signals die folgenden Berechtigungen:

    • xray:GetServiceGraph

    • logs:StartQuery

    • logs:GetQueryResults

    • cloudwatch:GetMetricData

    • cloudwatch:ListMetrics

    • tag:GetResources

    Weitere Informationen über diese Rolle finden Sie unter Dienstbezogene Rollenberechtigungen für Anwendungssignale CloudWatch .

Schritt 2: Installieren Sie den CloudWatch Agent-Operator in Ihrem Cluster

Durch die Installation des CloudWatch Agent-Operators werden der Operator, der CloudWatch Agent und andere automatische Instrumente in Ihrem Cluster installiert. Geben Sie dazu den folgenden Befehl ein. Ersetzen $REGION mit Ihrer AWS Region. Ersetzen $YOUR_CLUSTER_NAME mit dem Namen, der für Ihren Cluster in den Dashboards von Application Signals angezeigt werden soll.

helm repo add aws-observability https://aws-observability.github.io/helm-charts helm install amazon-cloudwatch-operator aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch --create-namespace \ --set region=$REGION \ --set clusterName=$YOUR_CLUSTER_NAME

Weitere Informationen finden Sie amazon-cloudwatch-observabilityunter GitHub.

Schritt 3: Richten Sie AWS Anmeldeinformationen für Ihre Kubernetes-Cluster ein

Wichtig

Wenn Ihr Kubernetes-Cluster auf Amazon gehostet wirdEC2, können Sie diesen Abschnitt überspringen und weitermachen. Schritt 4: Anmerkungen hinzufügen

Wenn Ihr Kubernetes-Cluster lokal gehostet wird, müssen Sie die Anweisungen in diesem Abschnitt befolgen, um Ihrer Kubernetes-Umgebung AWS Anmeldeinformationen hinzuzufügen.

Um Berechtigungen für einen lokalen Kubernetes-Cluster einzurichten
  1. Erstellen Sie den IAM Benutzer, der verwendet werden soll, um Ihrem lokalen Host Berechtigungen zu erteilen:

    1. Öffnen Sie die IAM Konsole unter. https://console.aws.amazon.com/iam/

    2. Wählen Sie Benutzer, Benutzer erstellen.

    3. Geben Sie im Feld Benutzerdetails unter Benutzername einen Namen für den neuen IAM Benutzer ein. Dies ist der Anmeldename AWS , der zur Authentifizierung Ihres Hosts verwendet wird. Wählen Sie anschließend Weiter.

    4. Wählen Sie auf der Seite Berechtigungen festlegen unter Berechtigungsoptionen die Option Richtlinien direkt anhängen aus.

    5. Wählen Sie aus der Liste der Berechtigungsrichtlinien die CloudWatchAgentServerPolicyRichtlinie aus, die Sie Ihrem Benutzer hinzufügen möchten. Wählen Sie anschließend Weiter.

    6. Stellen Sie auf der Seite Überprüfen und erstellen sicher, dass Sie mit dem Benutzernamen zufrieden sind und dass die CloudWatchAgentServerPolicyRichtlinie in der Berechtigungsübersicht aufgeführt ist.

    7. Wählen Sie „Benutzer erstellen

  2. Erstellen Sie Ihren AWS Zugangsschlüssel und Ihren geheimen Schlüssel und rufen Sie ihn ab:

    1. Wählen Sie im Navigationsbereich der IAM Konsole Benutzer und dann den Benutzernamen des Benutzers aus, den Sie im vorherigen Schritt erstellt haben.

    2. Wählen Sie auf der Seite des Benutzers die Registerkarte Sicherheitsanmeldeinformationen aus. Wählen Sie dann im Abschnitt Zugriffsschlüssel die Option Zugriffsschlüssel erstellen aus.

    3. Wählen Sie für Schritt 1 „Zugriffsschlüssel erstellen“ die Option Befehlszeilenschnittstelle (CLI).

    4. Geben Sie in Schritt 2 für Create access key (Schritt 2) optional ein Tag ein und wählen Sie dann Weiter.

    5. Wählen Sie für Schritt 3 „Zugriffsschlüssel erstellen“ die Option CSV-Datei herunterladen aus, um eine CSV-Datei mit dem Zugriffsschlüssel und dem geheimen Zugriffsschlüssel Ihres IAM Benutzers zu speichern. Sie benötigen diese Informationen für die nächsten Schritte.

    6. Wählen Sie Erledigt aus.

  3. Konfigurieren Sie Ihre AWS Anmeldeinformationen auf Ihrem lokalen Host, indem Sie den folgenden Befehl eingeben. Ersetzen ACCESS_KEY_ID and SECRET_ACCESS_ID mit Ihrem neu generierten Zugriffsschlüssel und dem geheimen Zugriffsschlüssel aus der CSV-Datei, die Sie im vorherigen Schritt heruntergeladen haben. Standardmäßig wird die Anmeldeinformationsdatei gespeichert in /home/user/.aws/credentials.

    $ aws configure --profile AmazonCloudWatchAgent AWS Access Key ID [None]: ACCESS_KEY_ID AWS Secret Access Key [None]: SECRET_ACCESS_ID Default region name [None]: MY_REGION Default output format [None]: json
  4. Bearbeiten Sie die benutzerdefinierte Ressource, die der CloudWatch Agent installiert hat, mithilfe des Helm-Diagramms, um das neu erstellte AWS Credential-Secret hinzuzufügen.

    kubectl edit amazoncloudwatchagent cloudwatch-agent -n amazon-cloudwatch
  5. Hängen Sie die AWS Anmeldeinformationen bei geöffnetem Dateieditor in den CloudWatch Agent-Container ein, indem Sie die folgende Konfiguration oben in der Bereitstellung hinzufügen. Ersetzen Sie den Pfad /home/user/.aws/credentials durch den Speicherort Ihrer lokalen AWS Anmeldeinformationsdatei.

    apiVersion: cloudwatch.aws.amazon.com/v1alpha1 kind: AmazonCloudWatchAgent metadata: name: cloudwatch-agent namespace: amazon-cloudwatch spec: volumeMounts: - mountPath: /rootfs volumeMounts: - name: aws-credentials mountPath: /root/.aws readOnly: true volumes: - hostPath: path: /home/user/.aws/credentials name: aws-credentials ---

Schritt 4: Anmerkungen hinzufügen

Anmerkung

Wenn Sie Application Signals für eine Anwendung mit Node.js aktivierenESM, überspringen Sie die Schritte in diesem Abschnitt und lesen Sie stattdessen nach.

Der nächste Schritt besteht darin, Ihre Anwendung für CloudWatch Application Signals zu instrumentieren, indem Sie Ihrem Kubernetes-Workload oder Namespace eine sprachspezifische Anmerkung hinzufügen. Diese Anmerkung instrumentiert Ihre Anwendung automatisch, um Metriken, Traces und Protokolle an Application Signals zu senden.

Um die Anmerkungen für Application Signals hinzuzufügen
  1. Sie haben zwei Möglichkeiten für die Anmerkung:

    • Annotate Workload instrumentiert automatisch einen einzelnen Workload in einem Cluster.

    • Namespace kommentieren instrumentiert automatisch alle Workloads, die im ausgewählten Namespace bereitgestellt werden.

    Wählen Sie eine dieser Optionen und folgen Sie den entsprechenden Schritten.

  2. Um einen einzelnen Workload mit Anmerkungen zu versehen, geben Sie einen der folgenden Befehle ein. Ersetzen $WORKLOAD_TYPE and $WORKLOAD_NAME mit den Werten für Ihren Workload.

    • Für Java-Workloads:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-java": "true"}}}}}'
    • Für Python-Workloads:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-python": "true"}}}}}'

      Für Python-Anwendungen sind zusätzliche Konfigurationen erforderlich. Weitere Informationen finden Sie unter Die Python-Anwendung startet nicht, nachdem Application Signals aktiviert wurde.

    • Für. NETArbeitslasten:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-dotnet": "true"}}}}}'
      Anmerkung

      Um Anwendungssignale für a zu aktivieren. NETWorkload auf Images, die auf Alpine Linux (linux-musl-x64) basieren, fügen Sie die folgende zusätzliche Anmerkung hinzu.

      instrumentation.opentelemetry.io/otel-dotnet-auto-runtime: "linux-musl-x64"
    • Für Node.js -Workloads:

      kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-nodejs": "true"}}}}}'
  3. Geben Sie einen der folgenden Befehle ein, um alle Workloads in einem Namespace mit Anmerkungen zu versehen. Ersetzen $NAMESPACE mit dem Namen Ihres Namespaces.

    Wenn der Namespace Java, Python und enthält. NETWorkloads, fügen Sie alle Anmerkungen zum Namespace hinzu.

    • Für Java-Workloads im Namespace:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-java=true
    • Für Python-Workloads im Namespace:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-python=true

      Für Python-Anwendungen sind zusätzliche Konfigurationen erforderlich. Weitere Informationen finden Sie unter Die Python-Anwendung startet nicht, nachdem Application Signals aktiviert wurde.

    • Für. NETWorkloads im Namespace:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-dotnet=true
    • Für Node.js -Workloads im Namespace:

      kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-nodejs=true

    Nachdem Sie die Anmerkungen hinzugefügt haben, starten Sie alle Pods im Namespace neu, indem Sie den folgenden Befehl eingeben:

    kubectl rollout restart
  4. Wenn die vorherigen Schritte abgeschlossen sind, wählen Sie in der CloudWatch Konsole Application Signals, Services aus. Dadurch werden die Dashboards geöffnet, in denen Sie die von Application Signals gesammelten Daten sehen können. Es kann einige Minuten dauern, bis Daten angezeigt werden.

    Weitere Informationen über die Services-Ansicht finden Sie unter Den Betriebsstatus Ihrer Anwendungen mit Application Signals überwachen.

Einrichtung einer Node.js -Anwendung mit dem ESM Modulformat

Wir bieten eingeschränkte Unterstützung für Node.js -Anwendungen im ESM Modulformat. Details hierzu finden Sie unter Bekannte Einschränkungen für Node.js mit ESM.

Für das ESM Modulformat funktioniert das Aktivieren von Anwendungssignalen durch Kommentieren der Manifestdatei nicht. Überspringen Sie das vorherige Verfahren und gehen Sie stattdessen wie folgt vor:

Um Anwendungssignale für eine Node.js -Anwendung zu aktivieren mit ESM
  1. Installieren Sie die relevanten Abhängigkeiten in Ihrer Anwendung Node.js für die automatische Instrumentierung:

    npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
  2. Fügen Sie der Dockerfile für Ihre Anwendung die folgenden Umgebungsvariablen hinzu und erstellen Sie das Image.

    ... ENV OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true ENV OTEL_TRACES_SAMPLER_ARG='endpoint=http://cloudwatch-agent.amazon-cloudwatch:2000' ENV OTEL_TRACES_SAMPLER='xray' ENV OTEL_EXPORTER_OTLP_PROTOCOL='http/protobuf' ENV OTEL_EXPORTER_OTLP_TRACES_ENDPOINT='http://cloudwatch-agent.amazon-cloudwatch:4316/v1/traces' ENV OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT='http://cloudwatch-agent.amazon-cloudwatch:4316/v1/metrics' ENV OTEL_METRICS_EXPORTER='none' ENV OTEL_LOGS_EXPORTER='none' ENV NODE_OPTIONS='--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs' ENV OTEL_SERVICE_NAME='YOUR_SERVICE_NAME' #replace with a proper service name ENV OTEL_PROPAGATORS='tracecontext,baggage,b3,xray' ... # command to start the application # for example # CMD ["node", "index.mjs"]
  3. Fügen Sie die UmgebungsvariablenOTEL_RESOURCE_ATTRIBUTES_POD_NAME, OTEL_RESOURCE_ATTRIBUTES_NODE_NAMEOTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME, POD_NAMESPACE und OTEL_RESOURCE_ATTRIBUTES zur Bereitstellungs-Yaml-Datei für die Anwendung hinzu. Beispielsweise:

    apiVersion: apps/v1 kind: Deployment metadata: name: nodejs-app labels: app: nodejs-app spec: replicas: 2 selector: matchLabels: app: nodejs-app template: metadata: labels: app: nodejs-app # annotations: # make sure this annotation doesn't exit # instrumentation.opentelemetry.io/inject-nodejs: 'true' spec: containers: - name: nodejs-app image:your-nodejs-application-image #replace it with a proper image uri imagePullPolicy: Always ports: - containerPort: 8000 env: - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME valueFrom: fieldRef: fieldPath: metadata.labels['app'] # Assuming 'app' label is set to the deployment name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: OTEL_RESOURCE_ATTRIBUTES value: "k8s.deployment.name=$(OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME),k8s.namespace.name=$(POD_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)"
  4. Stellen Sie die Anwendung Node.js im Kubernetes-Cluster bereit.