Configurazione degli Amazon CloudWatch Logs per Run Command - AWS Systems Manager

Configurazione degli Amazon CloudWatch Logs per Run Command

Quando si invia un comando usando Run Command, una funzionalità di AWS Systems Manager, è possibile specificare la destinazione a cui inviare il risultato del comando. Per impostazione predefinita, Systems Manager restituisce solo i primi 24.000 caratteri dell'output del comando. Se si desidera visualizzare i dettagli completi del risultato del comando, è possibile specificare un bucket Amazon Simple Storage Service (Amazon S3). Oppure è possibile specificare Amazon CloudWatch Logs. Se si specifica CloudWatch Logs, Run Command invia periodicamente il risultato di tutti i comandi e i log degli errori a CloudWatch Logs. È possibile monitorare i log di output in tempo quasi reale, cercare locuzioni, valori o modelli specifici e creare allarmi in base alla ricerca.

Se hai configurato il tuo nodo gestito per utilizzare le policy gestite da AWS Identity and Access Management (IAM) AmazonSSMManagedInstanceCore e CloudWatchAgentServerPolicy, allora il tuo nodo non richiede configurazioni aggiuntive per inviare i risultati a CloudWatch Logs. Scegliere questa opzione se si inviano i comandi dalla console, oppure aggiungere la sezione cloud-watch-output-config e il parametro CloudWatchOutputEnabled se si utilizza AWS Command Line Interface (AWS CLI), AWS Tools for Windows PowerShell, o una operazione API. La sezione cloud-watch-output-config e il parametro CloudWatchOutputEnabled sono descritti in dettaglio più avanti in questo argomento.

Per informazioni sull'aggiunta di policy a un profilo dell'istanza per le istanze EC2, consulta la pagina Configurazione delle autorizzazioni dell'istanza richieste per Systems Manager. Per informazioni sull'aggiunta di policy a un ruolo di servizio per server on-premises e macchine virtuali che si prevede di utilizzare come nodi gestiti, si veda Creazione di un ruolo di servizio IAM richiesto per System Manager in ambiente ibrido e multicloud.

Se se si utilizza una policy personalizzata per i nodi, sarà necessario aggiornare la policy in ogni nodo per consentire a Systems Manager di inviare l'output e i log a CloudWatch Logs. Aggiungere i seguenti oggetti di policy alla policy personalizzata. Per informazioni sull'aggiornamento di una policy IAM, si veda Editing IAM policies (Modifica di policy IAM) nella Guida per l'utente di IAM.

{ "Effect": "Allow", "Action": "logs:DescribeLogGroups", "Resource": "*" }, { "Effect":"Allow", "Action":[ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource":"arn:aws:logs:*:*:log-group:/aws/ssm/*" },

Definizione dei log CloudWatch Logs quando si inviano comandi

Per specificare CloudWatch Logs come output quando si invia un comando dalla AWS Management Console, scegliere CloudWatch Output (Output CloudWatch) nella sezione Output options (Opzioni output). In alternativa, è possibile specificare il nome del gruppo CloudWatch Logs a cui inviare il risultato del comando. Se non si specifica il nome di un gruppo, Systems Manager crea automaticamente un gruppo di log. Il gruppo di log utilizza il seguente formato di nomi: /aws/ssm/SystemsManagerDocumentName

Se si eseguono i comandi usando l'AWS CLI, specificare la sezione cloud-watch-output-config nel comando. Questa sezione consente di specificare il parametro CloudWatchOutputEnabled e, facoltativamente, il parametro CloudWatchLogGroupName. Ecco un esempio.

Linux & macOS
aws ssm send-command \ --instance-ids "instance ID" \ --document-name "AWS-RunShellScript" \ --parameters "commands=echo helloWorld" \ --cloud-watch-output-config "CloudWatchOutputEnabled=true,CloudWatchLogGroupName=log group name"
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --parameters commands=["echo helloWorld"] ^ --targets "Key=instanceids,Values=an instance ID” ^ --cloud-watch-output-config '{"CloudWatchLogGroupName":"log group name","CloudWatchOutputEnabled":true}'

Visualizzazione del risultato dei comandi in CloudWatch Logs

Non appena inizia l'esecuzione del comando, Systems Manager invia il risultato a CloudWatch Logs in tempo quasi reale. L'output in CloudWatch Logs usa il formato seguente:

CommandID/InstanceID/PluginID/stdout

CommandID/InstanceID/PluginID/stderr

Il risultato dell'esecuzione viene caricato ogni 30 secondi o quando il buffer supera i 200 KB, a seconda di quale condizione si verifica prima.

Nota

I flussi di log vengono creati solo quando sono disponibili dati di output. Per esempio, se per un'esecuzione non sono presenti dati con errori, il flusso stderr non viene creato.

Di seguito è riportato un esempio di output del comando come visualizzato in CloudWatch Logs.

Group - /aws/ssm/AWS-RunShellScript
Streams – 
1234-567-8910/i-abcd-efg-hijk/AWS-RunPowerShellScript/stdout
24/1234-567-8910/i-abcd-efg-hijk/AWS-RunPowerShellScript/stderr