0Pricing
AWS Solutions Architect · Lezione

Log CloudWatch e Log Insights

Aggregare i log di EC2, Lambda e dei container nei gruppi di log ed eseguire query CloudWatch Logs Insights per trovare errori e schemi ricorrenti

Log CloudWatch e Log Insights è una lezione AWS Solutions Architect gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AWS Solutions Architect, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AWS Solutions Architect include 4 lezioni in totale.

Panoramica di CloudWatch Logs

Amazon CloudWatch Logs è un servizio completamente gestito di aggregazione dei log che raccoglie, archivia e analizza i dati di log dai servizi AWS e dalle proprie applicazioni. A differenza della gestione tradizionale dei log, in cui ci si connette ai server tramite SSH per leggere i file, CloudWatch Logs centralizza tutti i log in un archivio durevole e crittografato, con funzionalità integrate di interrogazione, filtraggio, estrazione delle metriche e gestione della conservazione. Si integra nativamente con EC2, Lambda, ECS, EKS, API Gateway, CloudTrail e VPC Flow Logs.

Gruppi di log e flussi di log

I log sono organizzati gerarchicamente: un gruppo di log è un contenitore denominato per i log che condividono le stesse impostazioni di conservazione e controllo degli accessi (ad esempio, /aws/lambda/my-function). All'interno di un gruppo di log, ogni flusso di log rappresenta una singola origine di eventi di log sequenziali — un'istanza EC2, un container Lambda o un'attività ECS. Un gruppo di log può avere migliaia di flussi, ma ogni flusso appartiene esattamente a un gruppo di log.

# Create a log group with 30-day retention
aws logs create-log-group \
  --log-group-name /myapp/production/api

aws logs put-retention-policy \
  --log-group-name /myapp/production/api \
  --retention-in-days 30

# List log streams in a group
aws logs describe-log-streams \
  --log-group-name /myapp/production/api \
  --order-by LastEventTime \
  --descending

Invio dei log da Lambda ed EC2

AWS Lambda invia automaticamente a CloudWatch Logs tutto l'output stdout e stderr — è sufficiente che il ruolo di esecuzione Lambda includa logs:CreateLogGroup, logs:CreateLogStream e logs:PutLogEvents. Per le istanze EC2, installi il CloudWatch Agent e configuri quali file di log monitorare (ad esempio, /var/log/nginx/access.log), in quale gruppo di log scrivere e quale modello identifica le singole voci di log.

# CloudWatch Agent config for tailing an application log file
# /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
# {
#   "logs": {
#     "logs_collected": {
#       "files": {
#         "collect_list": [{
#           "file_path": "/var/log/myapp/app.log",
#           "log_group_name": "/myapp/production/api",
#           "log_stream_name": "{instance_id}",
#           "timestamp_format": "%Y-%m-%dT%H:%M:%S"
#         }]
#       }
#     }
#   }
# }

CloudWatch Logs Insights

CloudWatch Logs Insights è un motore interattivo di interrogazione che consente di cercare e analizzare i dati di log usando un linguaggio di query specifico. È possibile eseguire query su uno o più gruppi di log, filtrare per intervallo di tempo, estrarre campi da righe di log strutturate o non strutturate, aggregare i dati e visualizzare i risultati come grafici a barre o serie temporali. Le query vengono eseguite su richiesta e il costo dipende dai GB di dati analizzati — strutturare i log come JSON riduce significativamente il volume analizzato.

# Find the top 10 slowest Lambda invocations in the last hour
aws logs start-query \
  --log-group-name /aws/lambda/my-function \
  --start-time $(date -d '1 hour ago' +%s) \
  --end-time $(date +%s) \
  --query-string 'filter @type = "REPORT"
| fields @requestId, @duration
| sort @duration desc
| limit 10'

Linguaggio di query di Logs Insights

Il linguaggio di query di Logs Insights usa comandi separati da pipe: fields seleziona i campi da visualizzare, filter restringe gli eventi (supporta le espressioni regolari con like e =~), stats aggrega i dati, sort ordina i risultati e limit limita il numero di risultati. Il servizio individua automaticamente i campi nelle righe di log formattate in JSON. Per i log non strutturati, è possibile analizzare i valori usando parse con modelli glob o espressioni regolari.

# Count errors by status code in the last 24 hours
fields @timestamp, @message
| filter @message like /ERROR/
| parse @message '* * * [*] "* *" * *' as host, user, datetime, request, method, status, bytes
| stats count(*) as errorCount by status
| sort errorCount desc
| limit 20

Filtri metrici: dai log alle metriche

I filtri metrici analizzano continuamente gli eventi di log in ingresso alla ricerca di modelli e incrementano una metrica CloudWatch personalizzata ogni volta che viene rilevata una corrispondenza. Ad esempio, è possibile creare un filtro metrico su un gruppo di log Lambda che incrementi una metrica ErrorCount ogni volta che una riga di log contiene ERROR. È quindi possibile creare un allarme CloudWatch su questa metrica per avvisare il team. In questo modo i log vengono convertiti in metriche utilizzabili senza archiviare i risultati in un database separato.

# Create a metric filter that counts ERROR lines
aws logs put-metric-filter \
  --log-group-name /myapp/production/api \
  --filter-name ErrorCount \
  --filter-pattern 'ERROR' \
  --metric-transformations \
    metricName=ApplicationErrors,metricNamespace=MyApp,metricValue=1,defaultValue=0

# Now create an alarm on the resulting metric
aws cloudwatch put-metric-alarm \
  --alarm-name HighErrorRate \
  --metric-name ApplicationErrors \
  --namespace MyApp \
  --statistic Sum \
  --period 60 \
  --evaluation-periods 1 \
  --threshold 10 \
  --comparison-operator GreaterThanThreshold \
  --alarm-actions arn:aws:sns:us-east-1:111122223333:Ops

Sottoscrizioni e streaming dei log

Un filtro di sottoscrizione trasmette gli eventi di log quasi in tempo reale a un altro servizio per l'elaborazione o l'archiviazione. È possibile trasmetterli ad AWS Lambda (per trasformare e instradare i log), Amazon Kinesis Data Streams (per l'elaborazione di grandi volumi di log) o Amazon Kinesis Firehose (per la distribuzione in S3, OpenSearch o Splunk). Ogni gruppo di log supporta fino a due filtri di sottoscrizione. Lo streaming dei log tra account richiede una destinazione con una policy delle risorse appropriata.

# Stream all logs containing ERROR to a Kinesis Firehose for S3 archiving
aws logs put-subscription-filter \
  --log-group-name /myapp/production/api \
  --filter-name ErrorsToFirehose \
  --filter-pattern 'ERROR' \
  --destination-arn arn:aws:firehose:us-east-1:111122223333:deliverystream/LogArchive \
  --distribution 'ByLogStreamName'

Policy di conservazione e gestione dei costi

Per impostazione predefinita, CloudWatch Logs conserva i dati indefinitamente, il che può diventare costoso. Imposti policy di conservazione su ogni gruppo di log per eliminare automaticamente i vecchi eventi di log. I periodi di conservazione comuni sono 7 giorni per i log di debug, 30 giorni per i log delle applicazioni e da 1 a 5 anni per i log di audit. È possibile esportare i gruppi di log in S3 per l'archiviazione a lungo termine a basso costo usando l'API create-export-task, anche se le esportazioni sono operazioni batch (non in tempo reale).

# Set retention on all log groups that have no retention policy
aws logs describe-log-groups \
  --query 'logGroups[?!retentionInDays].logGroupName' \
  --output text | tr '\t' '\n' | while read lg; do
    aws logs put-retention-policy \
      --log-group-name "$lg" \
      --retention-in-days 90
    echo "Set 90-day retention on $lg"
done

VPC Flow Logs

VPC Flow Logs acquisisce i metadati relativi al traffico IP che entra ed esce dalle interfacce di rete nella VPC, nelle subnet o nei singoli ENI. I log vengono archiviati in CloudWatch Logs o S3. I flow log includono IP di origine, IP di destinazione, porta, protocollo, numero di pacchetti, numero di byte, azione (ACCEPT o REJECT) e timestamp. Sono preziosi per la risoluzione dei problemi relativi alle regole dei security group e delle NACL, per il rilevamento delle scansioni delle porte e per il controllo dei modelli di traffico — ma NON acquisiscono il payload effettivo dei pacchetti.

# Enable VPC Flow Logs to CloudWatch Logs
aws ec2 create-flow-logs \
  --resource-ids vpc-0abc1234def567890 \
  --resource-type VPC \
  --traffic-type ALL \
  --log-destination-type cloud-watch-logs \
  --log-group-name /aws/vpc/flow-logs \
  --deliver-logs-permission-arn arn:aws:iam::111122223333:role/FlowLogsRole

Interrogazione dei VPC Flow Logs con Insights

CloudWatch Logs Insights è particolarmente efficace per l'analisi dei VPC Flow Logs. È possibile identificare rapidamente il traffico rifiutato, trovare le origini con il maggior volume di byte, rilevare connessioni insolite o isolare il traffico verso un'istanza specifica. Per impostazione predefinita, il formato dei flow log è separato da spazi, ma la pubblicazione in formato JSON su CloudWatch Logs rende automatica l'estrazione dei campi nelle query di Insights.

# Find top 10 source IPs by rejected byte volume in the last day
fields srcAddr, dstAddr, dstPort, action, bytes
| filter action = 'REJECT'
| stats sum(bytes) as rejectedBytes by srcAddr
| sort rejectedBytes desc
| limit 10

Crittografia dei log con KMS

CloudWatch Logs crittografa per impostazione predefinita tutti i dati inattivi usando chiavi gestite da AWS. Per una maggiore sicurezza — in particolare negli ambienti regolamentati — è possibile associare una chiave KMS gestita dal cliente a un gruppo di log. In questo modo si ottiene il controllo sulla rotazione e sull'accesso alla chiave e si può revocare l'accesso a tutti i dati di log disabilitando la chiave. La chiave KMS deve disporre di una policy della chiave che conceda a CloudWatch Logs l'autorizzazione a usarla per la crittografia e la decrittografia.

# Associate a KMS key with a log group
aws logs associate-kms-key \
  --log-group-name /myapp/production/api \
  --kms-key-id arn:aws:kms:us-east-1:111122223333:key/KEY_ID

# Verify encryption is configured
aws logs describe-log-groups \
  --log-group-name-prefix /myapp/production \
  --query 'logGroups[].{Name:logGroupName,KmsKey:kmsKeyId}'

Verifica rapida

Verifichi la Sua comprensione dei concetti di AWS Solutions Architect (SAA-C03) trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: i gruppi e flussi di log organizzano i log in base alla fonte, con un periodo di conservazione configurabile; Logs Insights consente di interrogare e aggregare i dati dei log con un potente linguaggio di query basato sulle pipe; e i filtri delle metriche convertono i pattern dei log in metriche CloudWatch che possono attivare allarmi. Ora esamineremo le dashboard CloudWatch e Container Insights per ottenere visibilità operativa.

Domande Frequenti

La lezione «Log CloudWatch e Log Insights» è gratuita?

Sì — il testo completo di «Log CloudWatch e Log Insights» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AWS Solutions Architect, passa a CoddyKit PRO. Il corso AWS Solutions Architect include 4 lezioni in totale.

Cosa imparerò in «Log CloudWatch e Log Insights»?

Aggregare i log di EC2, Lambda e dei container nei gruppi di log ed eseguire query CloudWatch Logs Insights per trovare errori e schemi ricorrenti Eserciti AWS Solutions Architect con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AWS Solutions Architect?

Non è richiesta alcuna esperienza precedente. AWS Solutions Architect su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Log CloudWatch e Log Insights»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AWS Solutions Architect?

Sì. Ogni lezione AWS Solutions Architect include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Metriche, namespace e dimensioni di CloudWatch
  2. Allarmi CloudWatch e allarmi compositi
  3. Log CloudWatch e Log Insights
  4. Dashboard CloudWatch e Container Insights
← Torna a AWS Solutions Architect