Implementazione dell' CloudWatch agente per raccogliere parametri a livello di EC2 istanza su Amazon ECS - Amazon CloudWatch

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementazione dell' CloudWatch agente per raccogliere parametri a livello di EC2 istanza su Amazon ECS

Per distribuire l' CloudWatch agente per raccogliere parametri a livello di istanza dai ECS cluster Amazon ospitati sull'EC2istanza, utilizza una configurazione di avvio rapido con una configurazione predefinita o installa l'agente manualmente per poterlo personalizzare.

Entrambi i metodi richiedono che tu disponga già di almeno un ECS cluster Amazon distribuito con un tipo di EC2 avvio e che il contenitore dell' CloudWatch agente abbia accesso ad Amazon EC2 Instance Metadata Service (). IMDS Per ulteriori informazioni in meritoIMDS, consulta Metadati dell'istanza e dati utente.

Questi metodi presuppongono inoltre che tu abbia AWS CLI installato il. Inoltre, per eseguire i comandi nelle seguenti procedure, devi accedere a un account o ruolo con FullAccess le politiche IAMFullAccesse Amazon ECS _.

Configurazione rapida tramite AWS CloudFormation

Per utilizzare la configurazione rapida, inserisci il seguente comando da utilizzare per installare l'agente. AWS CloudFormation Replace (Sostituisci) cluster-name e cluster-region con il nome e la regione del tuo ECS cluster Amazon.

Questo comando crea i IAM ruoli CWAgentECSTaskRolee CWAgentECSExecutionRole. Se questi ruoli esistono già nell'account, utilizza ParameterKey=CreateIAMRoles,ParameterValue=False anziché ParameterKey=CreateIAMRoles,ParameterValue=True quando immetti il comando. In caso contrario, il comando avrà esito negativo.

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}

(Alternativa) Utilizzo IAM dei propri ruoli

Se desideri utilizzare il tuo ruolo di ECS attività e il tuo ruolo di esecuzione dell'ECSattività personalizzati anziché CWAgentECSExecutionRolei ruoli CWAgentECSTaskRoleand, assicurati innanzitutto che il ruolo da utilizzare come ruolo dell'ECSattività sia CloudWatchAgentServerPolicyassociato. Inoltre, assicuratevi che il ruolo da utilizzare come ruolo di esecuzione dell'ECSattività abbia CloudWatchAgentServerPolicysia i mazonECSTask ExecutionRolePolicy criteri A che quelli associati. Quindi, immetti il comando seguente: Nel comando, sostituisci task-role-arn con il ruolo ARN dell'ECSattività personalizzato e sostituisci execution-role-arn con il ruolo ARN di esecuzione dell'ECSattività personalizzato.

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}

Risoluzione dei problemi relativi alla configurazione rapida

Per controllare lo stato dello AWS CloudFormation stack, inserisci il seguente comando.

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

Se StackStatus è diverso da CREATE_COMPLETE o CREATE_IN_PROGRESS, controlla gli eventi di stack per trovare l'errore. Inserire il seguente comando.

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

Per verificare lo stato del servizio daemon cwagent, immetti il seguente comando. Nell'output, deve essere mostrato che runningCount è uguale a desiredCount nella sezione deployment. In caso contrario, controlla la sezione failures nell'output.

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

Puoi anche utilizzare la console CloudWatch Logs per controllare il registro dell'agente. Cerca il gruppo di log ecs-cwagent-daemon-service/ecs/.

Eliminazione dello stack per l'agente AWS CloudFormation CloudWatch

Se è necessario eliminare lo AWS CloudFormation stack, immettere il seguente comando.

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

Configurazione manuale e personalizzata

Segui i passaggi in questa sezione per distribuire manualmente l' CloudWatch agente per raccogliere parametri a livello di istanza dai tuoi cluster ECS Amazon ospitati su istanze. EC2

Ruoli e politiche necessari IAM

Sono richiesti due ruoli IAM. Se non esistono già è necessario crearli. Per ulteriori informazioni su questi ruoli, consulta i IAMruoli per Tasks e Amazon ECS Task Execution Role.

  • Un ruolo di ECS attività, utilizzato dall' CloudWatch agente per pubblicare le metriche. Se questo ruolo esiste già, è necessario assicurarsi che ad esso sia collegata la policy CloudWatchAgentServerPolicy.

  • Un ruolo di esecuzione delle ECS attività, utilizzato dall'ECSagente Amazon per avviare l' CloudWatch agente. Se questo ruolo esiste già, è necessario assicurarsi che le policy AmazonECSTaskExecutionRolePolicy e CloudWatchAgentServerPolicy siano collegate ad esso.

Se questi ruoli non sono ancora disponibili, puoi utilizzare i seguenti comandi per crearli e collegare le policy necessarie. Questo primo comando crea il ruolo dell'ECSattività.

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\"}]}"

Dopo aver immesso il comando precedente, prendete nota del valore Arn dell'output del comando come "TaskRoleArn». Questo sarà richiesto in seguito durante la creazione della definizione di attività. Quindi immetti il seguente comando per collegare le policy necessarie.

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

Il comando successivo crea il ruolo di esecuzione dell'ECSoperazione.

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\"}]}"

Dopo aver immesso il comando precedente, prendete nota del valore Arn dell'output del comando come "ExecutionRoleArn». Questo sarà richiesto in seguito durante la creazione della definizione di attività. Quindi immetti i seguenti comandi per collegare le policy necessarie.

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

Creazione della definizione di attività e avvio del servizio Daemon

Crea una definizione di attività e usala per avviare l'agente come servizio daemon. CloudWatch Per creare la definizione di attività, immetti il seguente comando. Nelle prime righe, sostituisci i segnaposto con i valori effettivi per la distribuzione. logs-region è la regione in cui si trova CloudWatch Logs e cluster-region è la regione in cui si trova il cluster. task-role-arn è l'Arn del ruolo di ECS attività che si sta utilizzando e execution-role-arn è l'Arn del ruolo di esecuzione dell'ECSattività.

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

Quindi esegui il seguente comando per avviare il servizio daemon. Replace (Sostituisci) cluster-name e cluster-region con il nome e la regione del tuo ECS cluster Amazon.

Importante

Rimuovi tutte le strategie dei provider di capacità prima di eseguire questo comando. In caso contrario, il comando non funzionerà.

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}

Se viene visualizzato questo messaggio di errore, An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent, un servizio daemon denominato cwagent-daemon-service è già stato creato. Elimina innanzitutto tale servizio, utilizzando il comando riportato di seguito come un esempio.

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

(Facoltativo) Configurazione avanzata

Facoltativamente, puoi utilizzare SSM per specificare altre opzioni di configurazione per l' CloudWatchagente nei tuoi ECS cluster Amazon ospitati su EC2 istanze. Le opzioni sono le seguenti:

  • metrics_collection_interval— Con quale frequenza, in secondi, l' CloudWatch agente raccoglie i parametri. Il valore predefinito è 60. L'intervallo varia tra 1 e 172.000.

  • endpoint_override (Facoltativo): specifica un endpoint diverso a cui inviare i log. È consigliabile eseguire questa operazione se si pubblica da un cluster in un endpoint VPC e si desidera che i dati dei log vengano trasferiti a un endpoint. VPC

    Il valore di endpoint_override deve essere una stringa che è un. URL

  • force_flush_interval: specifica in secondi la quantità massima di tempo in cui i log rimangono nel buffer di memoria prima di essere inviati al server. Indipendentemente dall'impostazione di questo campo, se la dimensione dei log nel buffer raggiunge 1 MB, i log vengono immediatamente inviati al server. Il valore di default è 5 secondi.

  • region— Per impostazione predefinita, l'agente pubblica i parametri nella stessa regione in cui si trova l'istanza del ECS contenitore Amazon. Per sovrascriverla, è possibile specificare una regione diversa qui. Ad esempio, "region" : "us-east-1"

Di seguito è riportato un esempio di configurazione personalizzata:

{ "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "ecs": { "metrics_collection_interval": 30 } }, "force_flush_interval": 5 } }
Per personalizzare la configurazione CloudWatch dell'agente nei ECS contenitori Amazon
  1. Assicurati che la mazonSSMRead OnlyAccess policy A sia associata al tuo ruolo Amazon ECS Task Execution. A questo scopo, è possibile immettere il seguente comando. Questo esempio presuppone che il tuo ruolo di Amazon ECS Task Execution siaCWAgentECSExecutionRole. Se utilizzi un ruolo diverso, sostituire tale nome del ruolo nel comando seguente.

    aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \ --role-name CWAgentECSExecutionRole
  2. Creare il file di configurazione personalizzato simile all'esempio precedente. Assegnare a questo file il nome /tmp/ecs-cwagent-daemon-config.json.

  3. Eseguire il seguente comando per inserire questa configurazione nel Parameter Store. Replace (Sostituisci) cluster-region con la regione del tuo ECS cluster Amazon. Per eseguire questo comando, devi accedere a un utente o a un ruolo con la politica A mazonSSMFull Access.

    Region=cluster-region aws ssm put-parameter \ --name "ecs-cwagent-daemon-service" \ --type "String" \ --value "`cat /tmp/ecs-cwagent-daemon-config.json`" \ --region $Region
  4. Scaricare il file di definizione dell'attività in un file locale, ad esempio /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
  5. Modificare il file di definizione dell'attività. Rimuovere la sezione seguente:

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

    Sostituire tale sezione con la seguente:

    "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent-daemon-service" } ],
  6. Riavviare l'agente come servizio daemon effettuando la seguente procedura:

    1. Esegui il comando seguente.

      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
    2. Eseguire il comando seguente per avviare il servizio daemon. Replace (Sostituisci) cluster-name e cluster-region con il nome e la regione del tuo ECS cluster Amazon.

      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}

      Se viene visualizzato questo messaggio di errore, An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent, un servizio daemon denominato cwagent-daemon-service è già stato creato. Elimina innanzitutto tale servizio, utilizzando il comando riportato di seguito come un esempio.

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