Cloud & IT Cert Prep · 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

Lezione 3 di 413 passaggi

Log CloudWatch e Log Insights è una lezione Cloud & IT Cert Prep 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 Cloud & IT Cert Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cloud & IT Cert Prep 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.

Gratis per iniziare

Impara Cloud & IT Cert Prep con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
150
Lezioni
600

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 Cloud & IT Cert Prep, passa a CoddyKit PRO. Il corso Cloud & IT Cert Prep 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 Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?

Non è richiesta alcuna esperienza precedente. Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?

Sì. Ogni lezione Cloud & IT Cert Prep 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 Cloud & IT Cert Prep