

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.

# Bereitstellen mit der Daemon-Strategie
<a name="CloudWatch-Application-Signals-ECS-Daemon"></a>

## Schritt 1: Application Signals in Ihrem Konto aktivieren
<a name="Application-Signals-ECS-Grant-Daemon"></a>

Sie müssen Application Signals zuerst in Ihrem Konto aktivieren. Wenn Sie dies nicht getan haben, siehe [Application Signals in Ihrem Konto aktivieren](CloudWatch-Application-Signals-Enable.md).

## Schritt 2: IAM-Rollen erstellen
<a name="Application-Signals-Enable-ECS-IAM-Daemon"></a>

Sie müssen eine IAM-Rolle erstellen. Wenn Sie diese Rolle bereits erstellt haben, müssen Sie ihr möglicherweise Berechtigungen hinzufügen.
+ **ECS-Aufgabenrolle** – Container verwenden diese Rolle zum Ausführen. Die Berechtigungen sollten außerdem so sein, wie Ihre Anwendungen sie benötigen **CloudWatchAgentServerPolicy**. 

Weitere Informationen zum Erstellen von IAM-Rollen finden Sie unter [Erstellen von IAM-Rollen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html).

## Schritt 3: Bereiten Sie die CloudWatch Agentenkonfiguration vor
<a name="Application-Signals-Enable-ECS-PrepareAgent-Daemon"></a>

Bereiten Sie zunächst die Agentenkonfiguration mit Application Signals aktiviert vor. Erstellen Sie dazu eine lokale Datei mit dem Namen `/tmp/ecs-cwagent.json`. 

```
{
  "traces": {
    "traces_collected": {
      "application_signals": {}
    }
  },
  "logs": {
    "metrics_collected": {
      "application_signals": {}
    }
  }
}
```

Laden Sie dann diese Konfiguration in den SSM-Parameterspeicher hoch. Geben Sie dazu den folgenden Befehl ein. Ersetzen Sie die Datei {{$REGION}} durch Ihren tatsächlichen Regionsnamen.

```
aws ssm put-parameter \
--name "ecs-cwagent" \
--type "String" \
--value "`cat /tmp/ecs-cwagent.json`" \
--region "{{$REGION}}"
```

## Schritt 4: Stellen Sie den CloudWatch Agent-Daemon-Dienst bereit
<a name="Application-Signals-Enable-ECS-Sidecar-Daemon"></a>

Erstellen Sie die folgende Aufgabendefinition und stellen Sie sie in Ihrem Anwendungscluster bereit. Ersetzen Sie es {{$REGION}} durch Ihren tatsächlichen Regionsnamen. Ersetzen Sie {{$TASK\_ROLE\_ARN}} und {{$EXECUTION\_ROLE\_ARN}} durch die IAM-Rollen, für die Sie sich vorbereitet haben. [Schritt 2: IAM-Rollen erstellen](#Application-Signals-Enable-ECS-IAM-Daemon) {{$IMAGE}}Ersetzen Sie durch den Pfad zum neuesten CloudWatch Container-Image in Amazon Elastic Container Registry. Weitere Informationen finden Sie unter [cloudwatch-agent](https://gallery.ecr.aws/cloudwatch-agent/cloudwatch-agent) auf Amazon ECR. 

**Anmerkung**  
Der Daemon-Service macht zwei Ports auf dem Host verfügbar, wobei 4316 als Endpunkt für den Empfang von Metriken und Traces und 2000 als CloudWatch Trace-Sampler-Endpunkt verwendet werden. Dieses Setup ermöglicht es dem Agenten, Telemetriedaten von allen Anwendungsaufgaben zu erfassen und zu übertragen, die auf dem Host ausgeführt werden. Stellen Sie sicher, dass diese Ports nicht von anderen Services auf dem Host verwendet werden, um Konflikte zu vermeiden.

```
{
  "family": "ecs-cwagent-daemon",
  "taskRoleArn": "{{$TASK_ROLE_ARN}}",
  "executionRoleArn": "{{$EXECUTION_ROLE_ARN}}",
  "networkMode": "bridge",
  "containerDefinitions": [
    {
      "name": "ecs-cwagent",
      "image": "$IMAGE",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 4316,
          "hostPort": 4316
        },
        {
          "containerPort": 2000,
          "hostPort": 2000
        }
      ],
      "secrets": [
        {
          "name": "CW_CONFIG_CONTENT",
          "valueFrom": "ecs-cwagent"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-create-group": "true",
          "awslogs-group": "/ecs/ecs-cwagent",
          "awslogs-region": "{{$REGION}}",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
  ],
  "requiresCompatibilities": [
    "EC2"
  ],
  "cpu": "128",
  "memory": "64"
}
```

## Schritt 5: Ihre Anwendung instrumentieren
<a name="Application-Signals-Enable-ECS-Instrument-Daemon"></a>

Der nächste Schritt besteht darin, Ihre Anwendung für Application Signals zu instrumentieren.

------
#### [ Java ]

**Um Ihre Anwendung auf Amazon ECS mit dem CloudWatch Agenten zu instrumentieren**

1. Geben Sie zunächst einen Bind-Mount an. Das Volume wird in den nächsten Schritten verwendet, um Dateien containerübergreifend freizugeben. Sie werden diesen Bind-Mount später in diesem Verfahren verwenden.

   ```
   "volumes": [
     {
       "name": "opentelemetry-auto-instrumentation"
     }
   ]
   ```

1. Fügen Sie einen neuen Container namens `init` an die Aufgabendefinition Ihrer Anwendung an. {{$IMAGE}}Ersetzen Sie es durch das neueste Bild aus dem [AWS Distro for OpenTelemetry Amazon ECR-Image-Repository](https://gallery.ecr.aws/aws-observability/adot-autoinstrumentation-java). 

   ```
   {
     "name": "init",
     "image": "{{$IMAGE}}",
     "essential": false,
     "command": [
       "cp",
       "/javaagent.jar",
       "/otel-auto-instrumentation/javaagent.jar"
     ],
     "mountPoints": [
       {
         "sourceVolume": "opentelemetry-auto-instrumentation",
         "containerPath": "/otel-auto-instrumentation",
         "readOnly": false
       }
     ]
   }
   ```

1. Fügen Sie eine Abhängigkeit auf dem `init`-Container hinzu, um sicherzustellen, dass dieser Container fertig ist, bevor Ihr Anwendungscontainer gestartet wird.

   ```
   "dependsOn": [
     {
       "containerName": "init",
       "condition": "SUCCESS"
     }
   ]
   ```

1. Fügen Sie die folgenden Umgebungsvariablen Ihrem Anwendungs-Container hinzu. Sie müssen Version 1.32.2 oder höher des Agenten AWS Distro for OpenTelemetry [Auto-Instrumentation](https://opentelemetry.io/docs/zero-code/java/agent/) für Java verwenden.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Signals-ECS-Daemon.html)

1. Mounten Sie das Volume `opentelemetry-auto-instrumentation`, das Sie in Schritt 1 dieses Verfahrens definiert haben. Wenn Sie die Protokollkorrelation mit Metriken und Ablaufverfolgungen nicht aktivieren müssen, verwenden Sie das folgende Beispiel für eine Java-Anwendung. Wenn Sie die Protokollkorrelation aktivieren möchten, gehen Sie zum nächsten Schritt über.

   ```
   {
     "name": "{{my-app}}",
      ...
     "environment": [
       {
         "name": "OTEL_RESOURCE_ATTRIBUTES",
         "value": "service.name={{$SVC_NAME}}"
       },
       {
         "name": "OTEL_LOGS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_METRICS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_PROTOCOL",
         "value": "http/protobuf"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED",
         "value": "true"
       },
       {
         "name": "JAVA_TOOL_OPTIONS",
         "value": " -javaagent:/otel-auto-instrumentation/javaagent.jar"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/metrics"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/traces"
       },
       {
         "name": "OTEL_TRACES_SAMPLER",
         "value": "xray"
       },
       {
         "name": "OTEL_PROPAGATORS",
         "value": "tracecontext,baggage,b3,xray"
       }
     ],
       "dependsOn": [
       {
         "containerName": "init",
         "condition": "SUCCESS"
       }
     ],
     "mountPoints": [
       {
         "sourceVolume": "opentelemetry-auto-instrumentation",
         "containerPath": "/otel-auto-instrumentation",
         "readOnly": false
       }
     ]
   }
   ```

------
#### [ Python ]

Bevor Sie Application Signals für Ihre Python-Anwendungen aktivieren, sollten Sie die folgenden Punkte beachten.
+ In einigen containerisierten Anwendungen kann eine fehlende `PYTHONPATH`-Umgebungsvariable manchmal dazu führen, dass die Anwendung nicht gestartet werden kann. Um dieses Problem zu beheben, stellen Sie sicher, dass Sie die `PYTHONPATH`-Umgebungsvariable auf den Speicherort des Arbeitsverzeichnisses Ihrer Anwendung setzen. Dies ist auf ein bekanntes Problem mit der OpenTelemetry automatischen Instrumentierung zurückzuführen. Weitere Informationen zu diesem Problem finden Sie unter [Python-Autoinstrumentierungs-Einstellung von PYTHONPATH ist nicht kompatibel](https://github.com/open-telemetry/opentelemetry-operator/issues/2302).
+ Für Django-Anwendungen sind zusätzliche Konfigurationen erforderlich, die in der [ OpenTelemetry Python-Dokumentation](https://opentelemetry-python.readthedocs.io/en/latest/examples/django/README.html) beschrieben werden.
  + Verwenden Sie das `--noreload`-Flag, um ein automatisches Neuladen zu verhindern.
  + Legen Sie die `DJANGO_SETTINGS_MODULE`-Umgebungsvariable für den Speicherort der `settings.py`-Datei Ihrer Django-Anwendung fest. Dadurch wird sichergestellt, dass OpenTelemetry Sie korrekt auf Ihre Django-Einstellungen zugreifen und diese integrieren können. 
+ Wenn Sie einen WSGI-Server für Ihre Python-Anwendung verwenden, finden Sie zusätzlich zu den folgenden Schritten in diesem Abschnitt Informationen zur Verwendung von Application Signals unter [Keine Application-Signals-Daten für eine Python-Anwendung, die einen WSGI-Server verwendet](CloudWatch-Application-Signals-Enable-Troubleshoot.md#Application-Signals-troubleshoot-Python-WSGI).

**Um Ihre Python-Anwendung auf Amazon ECS mit dem CloudWatch Agenten zu instrumentieren**

1. Geben Sie zunächst einen Bind-Mount an. Das Volume wird in den nächsten Schritten verwendet, um Dateien containerübergreifend freizugeben. Sie werden diesen Bind-Mount später in diesem Verfahren verwenden.

   ```
   "volumes": [
     {
       "name": "opentelemetry-auto-instrumentation-python"
     }
   ]
   ```

1. Fügen Sie einen neuen Container namens `init` an die Aufgabendefinition Ihrer Anwendung an. {{$IMAGE}}Ersetzen Sie es durch das neueste Bild aus dem [AWS Distro for OpenTelemetry Amazon ECR-Image-Repository](https://gallery.ecr.aws/aws-observability/adot-autoinstrumentation-python).

   ```
   {
       "name": "init",
       "image": "$IMAGE",
       "essential": false,
       "command": [
           "cp",
           "-a",
           "/autoinstrumentation/.",
           "/otel-auto-instrumentation-python"
       ],
       "mountPoints": [
           {
               "sourceVolume": "opentelemetry-auto-instrumentation-python",
               "containerPath": "/otel-auto-instrumentation-python",
               "readOnly": false
           }
       ]
   }
   ```

1. Fügen Sie eine Abhängigkeit auf dem `init`-Container hinzu, um sicherzustellen, dass dieser Container fertig ist, bevor Ihr Anwendungscontainer gestartet wird.

   ```
   "dependsOn": [
     {
       "containerName": "init",
       "condition": "SUCCESS"
     }
   ]
   ```

1. Fügen Sie die folgenden Umgebungsvariablen Ihrem Anwendungs-Container hinzu.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Signals-ECS-Daemon.html)

1. Mounten Sie das Volume `opentelemetry-auto-instrumentation-python`, das Sie in Schritt 1 dieses Verfahrens definiert haben. Wenn Sie die Protokollkorrelation mit Metriken und Ablaufverfolgungen nicht aktivieren müssen, verwenden Sie das folgende Beispiel für eine Python-Anwendung. Wenn Sie die Protokollkorrelation aktivieren möchten, gehen Sie zum nächsten Schritt über. 

   ```
   {
     "name": "{{my-app}}",
     ...
     "environment": [
       {
         "name": "PYTHONPATH",
         "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_PROTOCOL",
         "value": "http/protobuf"
       },
       {
         "name": "OTEL_TRACES_SAMPLER",
         "value": "xray"
       },
       {
         "name": "OTEL_TRACES_SAMPLER_ARG",
         "value": "endpoint=http://{{CW_CONTAINER_IP}}:2000"
       },
       {
         "name": "OTEL_LOGS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_PYTHON_DISTRO",
         "value": "aws_distro"
       },
       {
         "name": "OTEL_PYTHON_CONFIGURATOR",
         "value": "aws_configurator"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/traces"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/metrics"
       },
       {
         "name": "OTEL_METRICS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED",
         "value": "true"
       },
       {
         "name": "OTEL_RESOURCE_ATTRIBUTES",
         "value": "service.name={{$SVC_NAME}}"
       },
       {
         "name": "DJANGO_SETTINGS_MODULE",
         "value": "{{$PATH_TO_SETTINGS}}.settings"
       }
     ],
     "dependsOn": [
       {
         "containerName": "init",
         "condition": "SUCCESS"
       }
     ],
     "mountPoints": [
       {
         "sourceVolume": "opentelemetry-auto-instrumentation-python",
         "containerPath": "/otel-auto-instrumentation-python",
         "readOnly": false
       }
     ]
   }
   ```

1. (Optional) Um die Protokollkorrelation zu aktivieren, gehen Sie wie folgt vor, bevor Sie das Volume mounten. Legen Sie unter `OTEL_RESOURCE_ATTRIBUTES` eine zusätzliche Umgebungsvariable `aws.log.group.names` für die Protokollgruppen Ihrer Anwendung fest. Auf diese Weise können die Ablaufverfolgungen und Metriken aus Ihrer Anwendung mit den relevanten Protokolleinträgen aus diesen Protokollgruppen korreliert werden. Ersetzen Sie für diese Variable {{$YOUR\_APPLICATION\_LOG\_GROUP}} durch die Namen der Protokollgruppen für Ihre Anwendung. Wenn Sie mehrere Protokollgruppen haben, können Sie sie mit einem Und-Zeichen (`&`) trennen, wie in diesem Beispiel: `aws.log.group.names=log-group-1&log-group-2`. Um die Korrelation zwischen Metrik und Protokoll zu aktivieren, reicht es aus, diese aktuelle Umgebungsvariable festzulegen. Weitere Informationen finden Sie unter [Metrik zur Protokollierungskorrelation aktivieren](Application-Signals-MetricLogCorrelation.md). Um die Korrelation zwischen Ablaufverfolgung und Protokoll zu aktivieren, müssen Sie auch die Protokollierungskonfiguration in Ihrer Anwendung ändern. Weitere Informationen finden Sie unter [Die Korrelation von Ablaufverfolgung zu Protokollen aktivieren](Application-Signals-TraceLogCorrelation.md). 

   Im Folgenden wird ein -Beispiel gezeigt. Um die Protokollkorrelation zu aktivieren, verwenden Sie dieses Beispiel, wenn Sie das Volume `opentelemetry-auto-instrumentation-python`mounten, das Sie in Schritt 1 dieses Verfahrens definiert haben.

   ```
   {
     "name": "{{my-app}}",
     ...
     "environment": [
       {
         "name": "PYTHONPATH",
         "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_PROTOCOL",
         "value": "http/protobuf"
       },
       {
         "name": "OTEL_TRACES_SAMPLER",
         "value": "xray"
       },
       {
         "name": "OTEL_TRACES_SAMPLER_ARG",
         "value": "endpoint=http://{{CW_CONTAINER_IP}}:2000"
       },
       {
         "name": "OTEL_LOGS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_PYTHON_DISTRO",
         "value": "aws_distro"
       },
       {
         "name": "OTEL_PYTHON_CONFIGURATOR",
         "value": "aws_configurator"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/traces"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/metrics"
       },
       {
         "name": "OTEL_METRICS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED",
         "value": "true"
       },
       {
         "name": "OTEL_RESOURCE_ATTRIBUTES",
         "value": "aws.log.group.names={{$YOUR_APPLICATION_LOG_GROUP}},service.name={{$SVC_NAME}}"
       },
       {
         "name": "DJANGO_SETTINGS_MODULE",
         "value": "{{$PATH_TO_SETTINGS}}.settings"
       }
     ],
     "dependsOn": [
       {
         "containerName": "init",
         "condition": "SUCCESS"
       }
     ],
     "mountPoints": [
       {
         "sourceVolume": "opentelemetry-auto-instrumentation-python",
         "containerPath": "/otel-auto-instrumentation-python",
         "readOnly": false
       }
     ]
   }
   ```

------
#### [ .NET ]

**Um Ihre Anwendung auf Amazon ECS mit dem CloudWatch Agenten zu instrumentieren**

1. Geben Sie zunächst einen Bind-Mount an. Das Volume wird in den nächsten Schritten verwendet, um Dateien containerübergreifend freizugeben. Sie werden diesen Bind-Mount später in diesem Verfahren verwenden.

   ```
   "volumes": [
     {
       "name": "opentelemetry-auto-instrumentation"
     }
   ]
   ```

1. Fügen Sie einen neuen Container namens `init` an die Aufgabendefinition Ihrer Anwendung an. {{$IMAGE}}Ersetzen Sie es durch das neueste Bild aus dem [AWS Distro for OpenTelemetry Amazon ECR-Image-Repository](https://gallery.ecr.aws/aws-observability/adot-autoinstrumentation-dotnet). 

   Verwenden Sie Folgendes für eine Linux-Container-Instance.

   ```
   {
     "name": "init",
     "image": "{{$IMAGE}}",
     "essential": false,
     "command": [
         "cp",
         "-a",
         "autoinstrumentation/.",
         "/otel-auto-instrumentation"
     ],
     "mountPoints": [
         {
             "sourceVolume": "opentelemetry-auto-instrumentation",
             "containerPath": "/otel-auto-instrumentation",
             "readOnly": false
         }
     ]
   }
   ```

   Verwenden Sie Folgendes für eine Windows-Server-Container-Instance.

   ```
   {
     "name": "init",
     "image": "{{$IMAGE}}",
     "essential": false,
     "command": [
         "CMD",
         "/c",
         "xcopy",
         "/e",
         "C:\\autoinstrumentation\\*",
         "C:\\otel-auto-instrumentation",
         "&&",
         "icacls",
         "C:\\otel-auto-instrumentation",
         "/grant",
         "*S-1-1-0:R",
         "/T"
     ],
     "mountPoints": [
         {
             "sourceVolume": "opentelemetry-auto-instrumentation",
             "containerPath": "C:\\otel-auto-instrumentation",
             "readOnly": false
         }
     ]
   }
   ```

1. Fügen Sie eine Abhängigkeit auf dem `init`-Container hinzu, um sicherzustellen, dass dieser Container fertig ist, bevor Ihr Anwendungscontainer gestartet wird.

   ```
   "dependsOn": [
       {
           "containerName": "init",
           "condition": "SUCCESS"
       }
   ]
   ```

1. Fügen Sie die folgenden Umgebungsvariablen Ihrem Anwendungs-Container hinzu. Sie müssen Version 1.1.0 oder höher des [Agenten AWS Distro for OpenTelemetry Auto-Instrumentation für .NET](https://opentelemetry.io/docs/zero-code/net/) verwenden.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Signals-ECS-Daemon.html)

1. Mounten Sie das Volume `opentelemetry-auto-instrumentation`, das Sie in Schritt 1 dieses Verfahrens definiert haben. Verwenden Sie Folgendes für Linux.

   ```
   {
       "name": "{{my-app}}",
      ...
       "environment": [
           {
              "name": "OTEL_RESOURCE_ATTRIBUTES",
              "value": "service.name=$SVC_NAME"
          },
           {
               "name": "CORECLR_ENABLE_PROFILING",
               "value": "1"
           },
           {
               "name": "CORECLR_PROFILER",
               "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}"
           },
           {
               "name": "CORECLR_PROFILER_PATH",
               "value": "/otel-auto-instrumentation/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so"
           },
           {
               "name": "DOTNET_ADDITIONAL_DEPS",
               "value": "/otel-auto-instrumentation/AdditionalDeps"
           },
           {
               "name": "DOTNET_SHARED_STORE",
               "value": "/otel-auto-instrumentation/store"
           },
           {
               "name": "DOTNET_STARTUP_HOOKS",
               "value": "/otel-auto-instrumentation/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll"
           },
           {
               "name": "OTEL_DOTNET_AUTO_HOME",
               "value": "/otel-auto-instrumentation"
           },
           {
               "name": "OTEL_DOTNET_AUTO_PLUGINS",
               "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation"
           },
           {
               "name": "OTEL_RESOURCE_ATTRIBUTES",
               "value": "aws.log.group.names={{$YOUR_APPLICATION_LOG_GROUP}},service.name=dotnet-service-name"
           },
           {
               "name": "OTEL_LOGS_EXPORTER",
               "value": "none"
           },
           {
               "name": "OTEL_METRICS_EXPORTER",
               "value": "none"
           },
           {
               "name": "OTEL_EXPORTER_OTLP_PROTOCOL",
               "value": "http/protobuf"
           },
           {
               "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED",
               "value": "true"
           },
           {
               "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT",
               "value": "http://localhost:4316/v1/metrics"
           },
           {
               "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
               "value": "http://{{CW_CONTAINER_IP}}:4316/v1/traces"
           },
           {
               "name": "OTEL_EXPORTER_OTLP_ENDPOINT",
               "value": "http://{{CW_CONTAINER_IP}}:4316"
           },
           {
              "name": "OTEL_TRACES_SAMPLER",
              "value": "xray"
          },
          {
              "name": "OTEL_TRACES_SAMPLER_ARG",
              "value": "endpoint=http://{{CW_CONTAINER_IP}}:2000"
          },
           {
               "name": "OTEL_PROPAGATORS",
               "value": "tracecontext,baggage,b3,xray"
           }
       ],
         "dependsOn": [
       {
         "containerName": "init",
         "condition": "SUCCESS"
       }
     ],
       "mountPoints": [
           {
               "sourceVolume": "opentelemetry-auto-instrumentation",
               "containerPath": "/otel-auto-instrumentation",
               "readOnly": false
           }
       ],
       "dependsOn": [
           {
               "containerName": "init",
               "condition": "SUCCESS"
           }
      ]
   }
   ```

   Verwenden Sie Folgendes für Windows Server.

   ```
   {
       "name": "{{my-app}}",
      ...
       "environment": [
          {
              "name": "OTEL_RESOURCE_ATTRIBUTES",
              "value": "service.name=$SVC_NAME"
          },
           {
               "name": "CORECLR_ENABLE_PROFILING",
               "value": "1"
           },
           {
               "name": "CORECLR_PROFILER",
               "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}"
           },
           {
               "name": "CORECLR_PROFILER_PATH",
               "value": "C:\\otel-auto-instrumentation\\win-x64\\OpenTelemetry.AutoInstrumentation.Native.dll"
           },
           {
               "name": "DOTNET_ADDITIONAL_DEPS",
               "value": "C:\\otel-auto-instrumentation\\AdditionalDeps"
           },
           {
               "name": "DOTNET_SHARED_STORE",
               "value": "C:\\otel-auto-instrumentation\\store"
           },
           {
               "name": "DOTNET_STARTUP_HOOKS",
               "value": "C:\\otel-auto-instrumentation\\net\\OpenTelemetry.AutoInstrumentation.StartupHook.dll"
           },
           {
               "name": "OTEL_DOTNET_AUTO_HOME",
               "value": "C:\\otel-auto-instrumentation"
           },
           {
               "name": "OTEL_DOTNET_AUTO_PLUGINS",
               "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation"
           },
           {
               "name": "OTEL_RESOURCE_ATTRIBUTES",
               "value": "aws.log.group.names={{$YOUR_APPLICATION_LOG_GROUP}},service.name=dotnet-service-name"
           },
           {
               "name": "OTEL_LOGS_EXPORTER",
               "value": "none"
           },
           {
               "name": "OTEL_METRICS_EXPORTER",
               "value": "none"
           },
           {
               "name": "OTEL_EXPORTER_OTLP_PROTOCOL",
               "value": "http/protobuf"
           },
           {
               "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED",
               "value": "true"
           },
           {
               "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT",
               "value": "http://{{CW_CONTAINER_IP}}:4316/v1/metrics"
           },
           {
               "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
               "value": "http://{{CW_CONTAINER_IP}}:4316/v1/traces"
           },
           {
               "name": "OTEL_EXPORTER_OTLP_ENDPOINT",
               "value": "http://{{CW_CONTAINER_IP}}:4316"
           },
           {
              "name": "OTEL_TRACES_SAMPLER",
              "value": "xray"
          },
          {
              "name": "OTEL_TRACES_SAMPLER_ARG",
              "value": "endpoint=http://{{CW_CONTAINER_IP}}:2000"
          },
           {
               "name": "OTEL_PROPAGATORS",
               "value": "tracecontext,baggage,b3,xray"
           }
       ],
       "mountPoints": [
           {
               "sourceVolume": "opentelemetry-auto-instrumentation",
               "containerPath": "C:\\otel-auto-instrumentation",
               "readOnly": false
           }
       ],
       "dependsOn": [
           {
               "containerName": "init",
               "condition": "SUCCESS"
           }
      ]
   }
   ```

------
#### [ Node.js ]

**Anmerkung**  
Wenn Sie Application Signals für eine Node.js-Anwendung mit ESM aktivieren, finden Sie weitere Informationen unter [Setting up a Node.js application with the ESM module format](#ECSDaemon-NodeJs-ESM), bevor Sie mit diesen Schritten beginnen.

**Um Ihre Anwendung auf Amazon ECS mit dem CloudWatch Agenten zu instrumentieren**

1. Geben Sie zunächst einen Bind-Mount an. Das Volume wird in den nächsten Schritten verwendet, um Dateien containerübergreifend freizugeben. Sie werden diesen Bind-Mount später in diesem Verfahren verwenden.

   ```
   "volumes": [
     {
       "name": "opentelemetry-auto-instrumentation-node"
     }
   ]
   ```

1. Fügen Sie einen neuen Container namens `init` an die Aufgabendefinition Ihrer Anwendung an. {{$IMAGE}}Ersetzen Sie es durch das neueste Bild aus dem [AWS Distro for OpenTelemetry Amazon ECR-Image-Repository](https://gallery.ecr.aws/aws-observability/adot-autoinstrumentation-node). 

   ```
   {
     "name": "init",
     "image": "{{$IMAGE}}",
     "essential": false,
     "command": [
       "cp",
       "-a",
       "/autoinstrumentation/.",
       "/otel-auto-instrumentation-node"
     ],
     "mountPoints": [
       {
         "sourceVolume": "opentelemetry-auto-instrumentation-node",
         "containerPath": "/otel-auto-instrumentation-node",
         "readOnly": false
       }
     ],
   }
   ```

1. Fügen Sie eine Abhängigkeit auf dem `init`-Container hinzu, um sicherzustellen, dass dieser Container fertig ist, bevor Ihr Anwendungscontainer gestartet wird.

   ```
   "dependsOn": [
     {
       "containerName": "init",
       "condition": "SUCCESS"
     }
   ]
   ```

1. Fügen Sie die folgenden Umgebungsvariablen Ihrem Anwendungs-Container hinzu.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Signals-ECS-Daemon.html)

1. Mounten Sie das Volume `opentelemetry-auto-instrumentation-node`, das Sie in Schritt 1 dieses Verfahrens definiert haben. Wenn Sie die Protokollkorrelation mit Metriken und Ablaufverfolgungen nicht aktivieren müssen, verwenden Sie das folgende Beispiel für eine Node.js-Anwendung. Wenn Sie die Protokollkorrelation aktivieren möchten, gehen Sie zum nächsten Schritt über.

   Fügen Sie für Ihren Anwendungscontainer eine Abhängigkeit vom `init`-Container hinzu, um sicherzustellen, dass der Container fertig ist, bevor Ihr Anwendungscontainer gestartet wird.

   ```
   {
     "name": "{{my-app}}",
      ...
     "environment": [
       {
         "name": "OTEL_RESOURCE_ATTRIBUTES",
         "value": "service.name={{$SVC_NAME}}"
       },
       {
         "name": "OTEL_LOGS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_METRICS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_PROTOCOL",
         "value": "http/protobuf"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED",
         "value": "true"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/metrics"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/traces"
       },
       {
         "name": "OTEL_TRACES_SAMPLER",
         "value": "xray"
       },
       {
         "name": "OTEL_TRACES_SAMPLER_ARG",
         "value": "endpoint=http://{{CW_CONTAINER_IP}}:2000"
       },
       {
         "name": "NODE_OPTIONS",
         "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js"
       }
       ],
     "mountPoints": [
       {
         "sourceVolume": "opentelemetry-auto-instrumentation-node",
         "containerPath": "/otel-auto-instrumentation-node",
         "readOnly": false
       }
     ],
     "dependsOn": [
       {
         "containerName": "init",
         "condition": "SUCCESS"
       }
     ]
   }
   ```

1. (Optional) Um die Protokollkorrelation zu aktivieren, gehen Sie wie folgt vor, bevor Sie das Volume mounten. Legen Sie unter `OTEL_RESOURCE_ATTRIBUTES` eine zusätzliche Umgebungsvariable `aws.log.group.names` für die Protokollgruppen Ihrer Anwendung fest. Auf diese Weise können die Ablaufverfolgungen und Metriken aus Ihrer Anwendung mit den relevanten Protokolleinträgen aus diesen Protokollgruppen korreliert werden. Ersetzen Sie für diese Variable {{$YOUR\_APPLICATION\_LOG\_GROUP}} durch die Namen der Protokollgruppen für Ihre Anwendung. Wenn Sie mehrere Protokollgruppen haben, können Sie sie mit einem Und-Zeichen (`&`) trennen, wie in diesem Beispiel: `aws.log.group.names=log-group-1&log-group-2`. Um die Korrelation zwischen Metrik und Protokoll zu aktivieren, reicht es aus, diese aktuelle Umgebungsvariable festzulegen. Weitere Informationen finden Sie unter [Metrik zur Protokollierungskorrelation aktivieren](Application-Signals-MetricLogCorrelation.md). Um die Korrelation zwischen Ablaufverfolgung und Protokoll zu aktivieren, müssen Sie auch die Protokollierungskonfiguration in Ihrer Anwendung ändern. Weitere Informationen finden Sie unter [Die Korrelation von Ablaufverfolgung zu Protokollen aktivieren](Application-Signals-TraceLogCorrelation.md). 

   Im Folgenden wird ein -Beispiel gezeigt. Verwenden Sie dieses Beispiel, um die Protokollkorrelation zu aktivieren, wenn Sie das Volume `opentelemetry-auto-instrumentation`mounten, das Sie in Schritt 1 dieses Verfahrens definiert haben.

   ```
   {
     "name": "{{my-app}}",
      ...
     "environment": [
       {
         "name": "OTEL_RESOURCE_ATTRIBUTES",
         "value": "aws.log.group.names={{$YOUR_APPLICATION_LOG_GROUP}},service.name={{$SVC_NAME}}"
       },
       {
         "name": "OTEL_LOGS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_METRICS_EXPORTER",
         "value": "none"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_PROTOCOL",
         "value": "http/protobuf"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED",
         "value": "true"
       },
       {
         "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/metrics"
       },
       {
         "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
         "value": "http://{{CW_CONTAINER_IP}}:4316/v1/traces"
       },
       {
         "name": "OTEL_TRACES_SAMPLER",
         "value": "xray"
       },
       {
         "name": "OTEL_TRACES_SAMPLER_ARG",
         "value": "endpoint=http://{{CW_CONTAINER_IP}}:2000"
       },
       {
         "name": "NODE_OPTIONS",
         "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js"
       }
       ],
     "mountPoints": [
       {
         "sourceVolume": "opentelemetry-auto-instrumentation-node",
         "containerPath": "/otel-auto-instrumentation-node",
         "readOnly": false
       }
     ],
     "dependsOn": [
       {
         "containerName": "init",
         "condition": "SUCCESS"
       }
     ]
   }
   ```<a name="ECSDaemon-NodeJs-ESM"></a>

**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 von Node.js mit ESM](CloudWatch-Application-Signals-supportmatrix.md#ESM-limitations).

Für das ESM-Modulformat gilt die Verwendung des `init`-Containers zum Einfügen des Instrumentierungs-SDK Node.js nicht. Um Application Signals für Node.js mit ESM zu aktivieren, überspringen Sie die Schritte 1 und 2 des vorherigen Verfahrens und gehen Sie stattdessen wie folgt vor.

**So aktivieren Sie Application Signals für eine Node.js-Anwendung mit ESM**

1. Installieren Sie die relevanten Abhängigkeiten in Ihrer Node.js-Anwendung für die automatische Instrumentierung:

   ```
   npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation
   npm install @opentelemetry/instrumentation@0.54.0
   ```

1. Entfernen Sie in den Schritten 4 und 5 des vorherigen Verfahrens das Mounting des Volumes `opentelemetry-auto-instrumentation-node`:

   ```
   "mountPoints": [
       {
           "sourceVolume": "opentelemetry-auto-instrumentation-node",
           "containerPath": "/otel-auto-instrumentation-node",
           "readOnly": false
       }
    ]
   ```

   Ersetzen Sie die Knotenoptionen durch die folgenden Optionen.

   ```
   {
       "name": "NODE_OPTIONS",
       "value": "--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs"
   }
   ```

------

## Schritt 6: Stellen Sie Ihre Anwendung bereit
<a name="Application-Signals-Enable-ECS-Deploy-Daemon"></a>

Erstellen Sie eine neue Version Ihrer Aufgabendefinition und stellen Sie sie in Ihrem Anwendungscluster bereit. In der neu erstellten Aufgabe sollten Sie zwei Container sehen:
+ `init`– Ein erforderlicher Container für die Initialisierung von Application Signals
+ `{{my-app}}`– Dies ist der Beispielanwendungscontainer in unserer Dokumentation. In Ihren tatsächlichen Workloads ist dieser spezielle Container möglicherweise nicht vorhanden oder er wurde möglicherweise durch Ihre eigenen Servicecontainer ersetzt.

## (Optional) Schritt 7: Überwachen des Anwendungsstatus
<a name="CloudWatch-Application-Signals-Monitor-daemon"></a>

Sobald Sie Ihre Anwendungen auf Amazon ECS aktiviert haben, können Sie den Zustand Ihrer Anwendung überwachen. Weitere Informationen finden Sie unter [Den Betriebsstatus Ihrer Anwendungen mit Application Signals überwachen](Services.md).