

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.

# Bereitstellung des CloudWatch Agenten zur Erfassung von Metriken auf EC2-Instanzebene auf Amazon ECS
<a name="deploy-container-insights-ECS-instancelevel"></a>

Um den CloudWatch Agenten zur Erfassung von Metriken auf Instanzebene aus Amazon ECS-Clustern einzusetzen, die auf einer EC2-Instance gehostet werden, verwenden Sie ein Schnellstart-Setup mit einer Standardkonfiguration oder installieren Sie den Agenten manuell, um ihn anpassen zu können.

Beide Methoden setzen voraus, dass Sie bereits mindestens einen Amazon ECS-Cluster mit einem EC2-Starttyp bereitgestellt haben und dass der CloudWatch Agent-Container Zugriff auf den Amazon EC2 Instance Metadata Service (IMDS) hat. Weitere Informationen finden Sie unter [Instance-Metadaten und Benutzerdaten](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html).

Bei diesen Methoden wird außerdem davon ausgegangen, dass Sie den installiert haben. AWS CLI Um die Befehle in den folgenden Verfahren ausführen zu können, müssen Sie außerdem mit einem Konto oder einer Rolle angemeldet sein, für das die Richtlinien **IAMFullAccess** und **FullAccessAmazonECS\$1** gelten.

**Wichtig**  
Wenn Sie den CloudWatch Agent-Container in Ihrer Aufgabendefinition definieren, legen Sie Folgendes fest. `essential: false` Dadurch wird verhindert, dass der gesamte Amazon ECS-Service angehalten wird, wenn der CloudWatch Agent-Container ausfällt. Andere kritische Anwendungscontainer werden auch dann weiterhin ausgeführt, wenn der Agent vorübergehend nicht verfügbar ist.

**Topics**
+ [Schnelle Einrichtung mit CloudFormation](#deploy-container-insights-ECS-instancelevel-quickstart)
+ [Manuelle und benutzerdefinierte Einrichtung](#deploy-container-insights-ECS-instancelevel-manual)

## Schnelle Einrichtung mit CloudFormation
<a name="deploy-container-insights-ECS-instancelevel-quickstart"></a>

Um die Schnellinstallation zu verwenden, geben Sie den folgenden Befehl zur Installation des Agenten CloudFormation ein. Ersetzen Sie *cluster-name* und *cluster-region* durch den Namen und die Region Ihres Amazon ECS-Clusters.

Dieser Befehl erstellt die IAM-Rollen **CWAgentECSTaskRole** und **CWAgentECSExecutionRole**. Wenn diese Rollen bereits in Ihrem Konto vorhanden sind, verwenden Sie `ParameterKey=CreateIAMRoles,ParameterValue=False` anstelle von `ParameterKey=CreateIAMRoles,ParameterValue=True` bei der Eingabe des Befehls. Andernfalls schlägt der Befehl fehl.

```
ClusterName=cluster-name
Region=cluster-region
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json
aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \
    --template-body file://cwagent-ecs-instance-metric-cfn.json \
    --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \
                 ParameterKey=CreateIAMRoles,ParameterValue=True \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${Region}
```

**(Alternative) Verwenden Ihrer eigenen IAM-Rollen**

**Wenn Sie anstelle der Rollen Rolle und Rolle Ihre eigene benutzerdefinierte ECS-Aufgabenrolle und **CWAgentECSTaskECS-Aufgabenausführungsrolle** verwenden möchten, stellen Sie zunächst sicher, dass die Rolle, die als ECS-Aufgabenrolle verwendet werden soll, **CloudWatchAgentServerPolicy**angehängt ist. CWAgent ECSExecution** Stellen Sie außerdem sicher, dass der Rolle, die als ECS-Aufgabenausführungsrolle verwendet werden soll, **CloudWatchAgentServerPolicy**sowohl die Richtlinien als auch die **ECSTaskExecutionRolePolicyAmazon-Richtlinien** angehängt sind. Geben Sie dann den folgenden Befehl ein. Ersetzen Sie im Befehl durch den *task-role-arn* ARN Ihrer benutzerdefinierten ECS-Aufgabenrolle und *execution-role-arn* ersetzen Sie ihn durch den ARN Ihrer benutzerdefinierten ECS-Aufgabenausführungsrolle.

```
ClusterName=cluster-name
Region=cluster-region
TaskRoleArn=task-role-arn
ExecutionRoleArn=execution-role-arn
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json
aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \
    --template-body file://cwagent-ecs-instance-metric-cfn.json \
    --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \
                 ParameterKey=TaskRoleArn,ParameterValue=${TaskRoleArn} \
                 ParameterKey=ExecutionRoleArn,ParameterValue=${ExecutionRoleArn} \
    --capabilities CAPABILITY_NAMED_IAM \
    --region ${Region}
```

**Fehlerbehebung bei der Schnelleinrichtung**

Geben Sie den folgenden Befehl ein, um den Status des CloudFormation Stacks zu überprüfen.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stacks --stack-name CWAgentECS-$ClusterName-$Region --region $Region
```

Wenn Sie sehen, dass es sich beim `StackStatus` nicht um `CREATE_COMPLETE` oder `CREATE_IN_PROGRESS` handelt, überprüfen Sie die Stack-Ereignisse, um den Fehler zu finden. Geben Sie den folgenden Befehl ein.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation describe-stack-events --stack-name CWAgentECS-$ClusterName-$Region --region $Region
```

Um den Status des `cwagent`-Daemon-Services zu überprüfen, geben Sie den folgenden Befehl ein. In der Ausgabe sollten Sie sehen, dass die `runningCount` gleich der `desiredCount` im Abschnitt `deployment` ist. Wenn sie nicht gleich ist, überprüfen Sie den Abschnitt `failures` in der Ausgabe.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs describe-services --services cwagent-daemon-service --cluster $ClusterName --region $Region
```

Sie können auch die CloudWatch Logs-Konsole verwenden, um das Agent-Log zu überprüfen. Suchen Sie nach der **Protokollgruppe /ecs/ ecs-cwagent-daemon-service**.

**Den CloudFormation Stack für den Agenten löschen CloudWatch **

Wenn Sie den CloudFormation Stack löschen müssen, geben Sie den folgenden Befehl ein.

```
ClusterName=cluster-name
Region=cluster-region
aws cloudformation delete-stack --stack-name CWAgentECS-${ClusterName}-${Region} --region ${Region}
```

## Manuelle und benutzerdefinierte Einrichtung
<a name="deploy-container-insights-ECS-instancelevel-manual"></a>

Folgen Sie den Schritten in diesem Abschnitt, um den CloudWatch Agenten manuell bereitzustellen, um Metriken auf Instance-Ebene aus Ihren Amazon ECS-Clustern zu sammeln, die auf EC2-Instances gehostet werden.

### Erforderliche IAM-Rollen und -Richtlinien
<a name="deploy-container-insights-ECS-instancelevel-IAMRoles"></a>

Zwei IAM-Rollen sind erforderlich. Sie müssen sie erstellen, wenn sie noch nicht vorhanden sind. Weitere Informationen zu diesen Rollen finden Sie unter [IAM-Rollen für Aufgaben](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) und [Amazon ECS-Aufgabenausführungsrolle](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html).
+ Eine *ECS-Aufgabenrolle*, die vom CloudWatch Agenten verwendet wird, um Metriken zu veröffentlichen. Wenn diese Rolle bereits vorhanden ist, müssen Sie sicherstellen, dass die `CloudWatchAgentServerPolicy`-Richtlinie angehängt ist.
+ Eine *Rolle zur Ausführung von ECS-Aufgaben*, die vom Amazon ECS-Agenten verwendet wird, um den CloudWatch Agenten zu starten. Wenn diese Rolle bereits vorhanden ist, müssen Sie sicherstellen, dass die Richtlinien `AmazonECSTaskExecutionRolePolicy` und `CloudWatchAgentServerPolicy` angehängt sind.

Wenn Sie diese Rollen noch nicht besitzen, können Sie die folgenden Befehle verwenden, um sie zu erstellen und die erforderlichen Richtlinien anzuhängen. Mit diesem ersten Befehl wird die ECS-Aufgabenrolle erstellt.

```
aws iam create-role --role-name CWAgentECSTaskRole \
    --assume-role-policy-document "{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
```

Nachdem Sie den vorherigen Befehl eingegeben haben, notieren Sie sich den Wert von `Arn` aus der Befehlsausgabe als "TaskRoleArn“. Sie müssen ihn später verwenden, wenn Sie die Aufgabendefinition erstellen. Geben Sie dann den folgenden Befehl ein, um die erforderlichen Richtlinien anzuhängen.

```
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
    --role-name CWAgentECSTaskRole
```

Mit diesem nächsten Befehl wird die ECS-Aufgabenausführungsrolle erstellt.

```
aws iam create-role --role-name CWAgentECSExecutionRole \
    --assume-role-policy-document "{\"Version\": \"2012-10-17\",		 	 	 \"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
```

Nachdem Sie den vorherigen Befehl eingegeben haben, notieren Sie sich den Wert von `Arn` aus der Befehlsausgabe als "ExecutionRoleArn“. Sie müssen ihn später verwenden, wenn Sie die Aufgabendefinition erstellen. Geben Sie dann die folgenden Befehle ein, um die erforderlichen Richtlinien anzuhängen.

```
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
    --role-name CWAgentECSExecutionRole
          
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy \
    --role-name CWAgentECSExecutionRole
```

### Erstellen der Aufgabendefinition und Starten des Daemon-Services
<a name="deploy-container-insights-ECS-instancelevel-taskdefinition"></a>

Erstellen Sie eine Aufgabendefinition und verwenden Sie sie, um den CloudWatch Agenten als Daemon-Service zu starten. Geben Sie den folgenden Befehl ein, um die Aufgabendefinition zu erstellen. Ersetzen Sie in den ersten Zeilen die Platzhalter durch die tatsächlichen Werte für Ihre Bereitstellung. *logs-region*ist die Region, in der sich CloudWatch Logs befindet, und *cluster-region* ist die Region, in der sich Ihr Cluster befindet. *task-role-arn*ist der Arn der ECS-Aufgabenrolle, die Sie verwenden, und *execution-role-arn* ist der Arn der ECS-Aufgabenausführungsrolle.

```
TaskRoleArn=task-role-arn
ExecutionRoleArn=execution-role-arn
AWSLogsRegion=logs-region
Region=cluster-region
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json \
    | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \
    | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
```

Führen Sie dann den folgenden Befehl aus, um den Daemon-Service zu starten. Ersetzen Sie *cluster-name* und *cluster-region* durch den Namen und die Region Ihres Amazon ECS-Clusters.

**Wichtig**  
Entfernen Sie vor der Ausführung dieses Befehls alle Strategien für Kapazitätsanbieter. Andernfalls funktioniert der Befehl nicht.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs create-service \
    --cluster ${ClusterName} \
    --service-name cwagent-daemon-service \
    --task-definition ecs-cwagent-daemon-service \
    --scheduling-strategy DAEMON \
    --region ${Region}
```

Wenn diese Fehlermeldung angezeigt wird, `An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent`, haben Sie bereits einen Daemon-Service mit dem Namen `cwagent-daemon-service` erstellt. Sie müssen diesen Service zuerst löschen, indem Sie den folgenden Befehl als Beispiel verwenden.

```
ClusterName=cluster-name
Region=cluster-region
aws ecs delete-service \
    --cluster ${ClusterName} \
    --service cwagent-daemon-service \
    --region ${Region} \
    --force
```

### (Optional) Erweiterte Konfiguration
<a name="deploy-container-insights-ECS-instancelevel-advanced"></a>

Optional können Sie SSM verwenden, um andere Konfigurationsoptionen für den CloudWatch Agenten in Ihren Amazon ECS-Clustern anzugeben, die auf EC2-Instances gehostet werden. Es handelt sich um folgende Optionen:
+ `metrics_collection_interval`— Wie oft in Sekunden sammelt der CloudWatch Agent Metriken. Der Standardwert ist 60. Der Bereich liegt zwischen 1 und 172 000.
+ `endpoint_override` – (Optional) Gibt einen anderen Endpunkt an, an den Protokolle gesendet werden sollen. Dies ist sinnvoll, wenn Sie aus einem Cluster in einer VPC veröffentlichen und die Protokolldaten zu einem VPC-Endpunkt weiterleiten möchten.

  Der Wert von `endpoint_override` muss eine Zeichenkette sein, die eine URL ist.
+ `force_flush_interval` – Gibt die maximale Zeitspanne in Sekunden an, in der Protokolle im Speicherpuffer verbleiben, bevor sie an den Server gesendet werden. Unabhängig von der Einstellung für dieses Feld werden die Protokolle an den Server gesendet, sobald die Größe der Protokolle im Puffer 1 MB erreicht. Der Standardwert ist 5 Sekunden.
+ `region` – Standardmäßig veröffentlicht der Agent Metriken in derselben Region, in der sich die Amazon-ECS-Container-Instance befindet. Um dies zu überschreiben, können Sie hier eine andere Region angeben. Beispiel: `"region" : "us-east-1"`

Im Folgenden finden Sie ein Beispiel für eine benutzerdefinierte Konfiguration:

```
{
    "agent": {
        "region": "us-east-1"
    },
    "logs": {
        "metrics_collected": {
            "ecs": {
                "metrics_collection_interval": 30
            }
        },
        "force_flush_interval": 5
    }
}
```

**So passen Sie Ihre CloudWatch Agentenkonfiguration in Ihren Amazon ECS-Containern an**

1. Vergewissern Sie sich, dass die **SSMReadOnlyAccessAmazon-Richtlinie** mit Ihrer Amazon ECS Task Execution-Rolle verknüpft ist. Dazu können Sie den folgenden Befehl eingeben. In diesem Beispiel wird davon ausgegangen, dass Ihre Amazon ECS Task CWAgent ECSExecution Execution-Rolle Rolle ist. Wenn Sie eine andere Rolle verwenden, ersetzen Sie diesen Rollennamen im folgenden Befehl.

   ```
   aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \
           --role-name CWAgentECSExecutionRole
   ```

1. Erstellen Sie die angepasste Konfigurationsdatei ähnlich dem vorangegangenen Beispiel. Benennen Sie diese Datei `/tmp/ecs-cwagent-daemon-config.json`.

1. Führen Sie den folgenden Befehl aus, um diese Konfiguration im Parameter Store zu speichern. *cluster-region*Ersetzen Sie durch die Region Ihres Amazon ECS-Clusters. Um diesen Befehl auszuführen, müssen Sie bei einem Benutzer oder einer Rolle angemeldet sein, für die die **Amazon SSMFull Access-Richtlinie** gilt.

   ```
   Region=cluster-region
   aws ssm put-parameter \
       --name "ecs-cwagent-daemon-service" \
       --type "String" \
       --value "`cat /tmp/ecs-cwagent-daemon-config.json`" \
       --region $Region
   ```

1. Laden Sie die Aufgabendefinitionsdatei in eine lokale Datei herunter, z. B. `/tmp/cwagent-ecs-instance-metric.json`

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json -o /tmp/cwagent-ecs-instance-metric.json
   ```

1. Ändern Sie die Aufgabendefinitionsdatei. Entfernen Sie den folgenden Abschnitt:

   ```
   "environment": [
                   {
                       "name": "USE_DEFAULT_CONFIG",
                       "value": "True"
                   }
               ],
   ```

   Ersetzen Sie diesen Abschnitt durch Folgendes:

   ```
   "secrets": [
                   {
                       "name": "CW_CONFIG_CONTENT",
                       "valueFrom": "ecs-cwagent-daemon-service"
                   }
               ],
   ```

1. Starten Sie den Agenten als Daemon-Service neu, indem Sie die folgenden Schritte ausführen:

   1. Führen Sie den folgenden Befehl aus.

      ```
      TaskRoleArn=task-role-arn
      ExecutionRoleArn=execution-role-arn
      AWSLogsRegion=logs-region
      Region=cluster-region
      cat /tmp/cwagent-ecs-instance-metric.json \
          | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \
          | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
      ```

   1. Führen Sie den folgenden Befehl aus, um den Daemon-Service zu starten. Ersetzen Sie *cluster-name* und *cluster-region* durch den Namen und die Region Ihres Amazon ECS-Clusters.

      ```
      ClusterName=cluster-name
      Region=cluster-region
      aws ecs create-service \
          --cluster ${ClusterName} \
          --service-name cwagent-daemon-service \
          --task-definition ecs-cwagent-daemon-service \
          --scheduling-strategy DAEMON \
          --region ${Region}
      ```

      Wenn diese Fehlermeldung angezeigt wird, `An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent`, haben Sie bereits einen Daemon-Service mit dem Namen `cwagent-daemon-service` erstellt. Sie müssen diesen Service zuerst löschen, indem Sie den folgenden Befehl als Beispiel verwenden.

      ```
      ClusterName=cluster-name
      Region=Region
      aws ecs delete-service \
          --cluster ${ClusterName} \
          --service cwagent-daemon-service \
          --region ${Region} \
          --force
      ```