Dzienniki CloudWatch i Log Insights
Agregować dzienniki z EC2, Lambda i kontenerów w grupach dzienników oraz uruchamiać zapytania CloudWatch Logs Insights w celu wyszukiwania błędów i wzorców.
Dzienniki CloudWatch i Log Insights to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Przegląd CloudWatch Logs
Amazon CloudWatch Logs to w pełni zarządzana usługa agregowania logów, która zbiera, przechowuje i analizuje dane dzienników z usług AWS oraz własnych aplikacji. W przeciwieństwie do tradycyjnego zarządzania logami, które wymaga połączenia SSH z serwerami w celu odczytania plików, CloudWatch Logs centralizuje wszystkie logi w trwałym i szyfrowanym magazynie z wbudowanymi funkcjami wyszukiwania, filtrowania, wyodrębniania metryk i zarządzania okresem przechowywania. Usługa natywnie integruje się z EC2, Lambda, ECS, EKS, API Gateway, CloudTrail i VPC Flow Logs.
Grupy logów i strumienie logów
Logi są uporządkowane hierarchicznie: grupa logów to nazwany kontener na logi, które mają te same ustawienia okresu przechowywania i kontroli dostępu (na przykład /aws/lambda/my-function). W ramach grupy logów każdy strumień logów reprezentuje pojedyncze źródło sekwencyjnych zdarzeń logów — jedną instancję EC2, jeden kontener Lambda lub jedno zadanie ECS. Grupa logów może zawierać tysiące strumieni, ale każdy strumień należy dokładnie do jednej grupy logów.
# 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 \
--descendingWysyłanie logów z Lambda i EC2
AWS Lambda automatycznie wysyła całe wyjście stdout i stderr do CloudWatch Logs — wystarczy, aby rola wykonawcza Lambda zawierała uprawnienia logs:CreateLogGroup, logs:CreateLogStream i logs:PutLogEvents. W przypadku instancji EC2 należy zainstalować CloudWatch Agent i skonfigurować monitorowane pliki logów (na przykład /var/log/nginx/access.log), grupę logów, do której mają być zapisywane dane, oraz wzorzec identyfikujący poszczególne wpisy logów.
# 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 to interaktywny silnik zapytań, który umożliwia wyszukiwanie i analizowanie danych logów za pomocą specjalizowanego języka zapytań. Mogą Państwo wykonywać zapytania w jednej lub wielu grupach logów, filtrować dane według zakresu czasu, wyodrębniać pola ze strukturalnych i niestrukturalnych wierszy logów, agregować dane oraz wizualizować wyniki na wykresach słupkowych lub szeregach czasowych. Zapytania są wykonywane na żądanie, a opłaty są naliczane za każdy GB przeskanowanych danych — strukturyzowanie logów w formacie JSON znacząco zmniejsza ilość skanowanych danych.
# 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'Język zapytań Logs Insights
Język zapytań Logs Insights używa poleceń oddzielonych znakami potoku: fields wybiera wyświetlane pola, filter zawęża zdarzenia (obsługuje wyrażenia regularne za pomocą like i =~), stats agreguje dane, sort porządkuje wyniki, a limit ogranicza ich liczbę. Usługa automatycznie wykrywa pola w wierszach logów sformatowanych w JSON. W przypadku logów niestrukturalnych wartości można analizować za pomocą parse i wzorców glob lub wyrażeń regularnych.
# 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 20Filtry metryk: od logów do metryk
Filtry metryk stale skanują napływające zdarzenia logów w poszukiwaniu wzorców i zwiększają wartość niestandardowej metryki CloudWatch za każdym razem, gdy znajdą dopasowanie. Można na przykład utworzyć filtr metryki dla grupy logów Lambda, który zwiększa metrykę ErrorCount za każdym razem, gdy wiersz logu zawiera ERROR. Następnie można utworzyć alarm CloudWatch dla tej metryki, aby powiadamiać zespół. Umożliwia to przekształcanie logów w metryki, na podstawie których można podejmować działania, bez przechowywania wyników w oddzielnej bazie danych.
# 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:OpsSubskrypcje logów i strumieniowanie
Filtr subskrypcji przesyła zdarzenia logów niemal w czasie rzeczywistym do innej usługi w celu ich przetwarzania lub przechowywania. Dane można przesyłać do AWS Lambda (w celu transformacji i przekierowywania logów), Amazon Kinesis Data Streams (do przetwarzania dużych ilości logów) lub Amazon Kinesis Firehose (w celu dostarczania danych do S3, OpenSearch lub Splunk). Każda grupa logów obsługuje maksymalnie dwa filtry subskrypcji. Strumieniowanie logów między kontami wymaga miejsca docelowego z odpowiednią zasadą zasobu.
# 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'Zasady przechowywania i zarządzanie kosztami
Domyślnie CloudWatch Logs przechowuje dane bezterminowo, co może stać się kosztowne. Należy ustawić zasady przechowywania dla każdej grupy logów, aby automatycznie usuwać stare zdarzenia logów. Typowe okresy przechowywania to 7 dni dla logów debugowania, 30 dni dla logów aplikacji oraz 1–5 lat dla logów audytowych. Grupy logów można eksportować do S3 w celu długoterminowej i niedrogiej archiwizacji za pomocą interfejsu API create-export-task, jednak eksport odbywa się partiami, a nie w czasie rzeczywistym.
# 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"
doneVPC Flow Logs
VPC Flow Logs rejestrują metadane dotyczące ruchu IP przepływającego do interfejsów sieciowych VPC i z nich, a także do podsieci lub poszczególnych ENI i z nich. Są przechowywane w CloudWatch Logs lub S3. Dzienniki przepływu zawierają źródłowy adres IP, docelowy adres IP, port, protokół, liczbę pakietów, liczbę bajtów, działanie (ACCEPT lub REJECT) oraz znacznik czasu. Są niezwykle przydatne podczas rozwiązywania problemów z regułami grup zabezpieczeń i NACL, wykrywania skanowania portów oraz audytowania wzorców ruchu — ale NIE rejestrują rzeczywistej zawartości pakietów.
# 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/FlowLogsRoleWyszukiwanie w VPC Flow Logs za pomocą Insights
CloudWatch Logs Insights jest szczególnie przydatny do analizy VPC Flow Logs. Mogą Państwo szybko identyfikować odrzucony ruch, znajdować główne źródła ruchu według liczby bajtów, wykrywać nietypowe połączenia lub wyodrębniać ruch do określonej instancji. Format dzienników przepływu jest domyślnie rozdzielany spacjami, ale publikowanie danych w formacie JSON w CloudWatch Logs umożliwia automatyczne wyodrębnianie pól w zapytaniach 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 10Szyfrowanie logów za pomocą KMS
CloudWatch Logs domyślnie szyfruje wszystkie dane w spoczynku za pomocą kluczy zarządzanych przez AWS. W celu zwiększenia bezpieczeństwa — szczególnie w środowiskach podlegających regulacjom — można powiązać klucz KMS zarządzany przez klienta z grupą logów. Zapewnia to kontrolę nad rotacją klucza i dostępem oraz umożliwia odebranie dostępu do wszystkich danych logów przez wyłączenie klucza. Klucz KMS musi mieć zasadę klucza przyznającą CloudWatch Logs uprawnienia do używania go podczas szyfrowania i odszyfrowywania.
# 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}'Szybkie sprawdzenie
Sprawdź swoją znajomość zagadnień AWS Solutions Architect (SAA-C03) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji poznali Państwo: grupy i strumienie logów, które organizują logi według źródła i umożliwiają konfigurowanie okresu przechowywania; Logs Insights, które pozwala wykonywać zapytania i agregować dane logów za pomocą zaawansowanego języka zapytań opartego na potokach; oraz filtry metryk, które przekształcają wzorce w logach w metryki CloudWatch mogące wyzwalać alarmy. W następnej części omówimy CloudWatch Dashboards i Container Insights, które zapewniają wgląd w działanie systemów.
Często zadawane pytania
Czy lekcja „Dzienniki CloudWatch i Log Insights” jest bezpłatna?
Tak — pełny tekst „Dzienniki CloudWatch i Log Insights” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Dzienniki CloudWatch i Log Insights”?
Agregować dzienniki z EC2, Lambda i kontenerów w grupach dzienników oraz uruchamiać zapytania CloudWatch Logs Insights w celu wyszukiwania błędów i wzorców. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Dzienniki CloudWatch i Log Insights”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Metryki, przestrzenie nazw i wymiary CloudWatch
- Alarmy CloudWatch i alarmy złożone
- Dzienniki CloudWatch i Log Insights
- Panele CloudWatch i Container Insights