0Pricing
AWS Solutions Architect · Урок

Журналы CloudWatch и Log Insights

Объединяйте журналы EC2, Lambda и контейнеров в группы журналов и выполняйте запросы CloudWatch Logs Insights для поиска ошибок и закономерностей.

«Журналы CloudWatch и Log Insights» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.

Обзор CloudWatch Logs

Amazon CloudWatch Logs — это полностью управляемый сервис агрегации журналов, который собирает, хранит и анализирует данные журналов от сервисов AWS и Ваших приложений. В отличие от традиционного управления журналами, при котором для чтения файлов необходимо подключаться к серверам по SSH, CloudWatch Logs централизует все журналы в надёжном зашифрованном хранилище со встроенными возможностями запросов, фильтрации, извлечения метрик и управления сроком хранения. Сервис изначально интегрируется с EC2, Lambda, ECS, EKS, API Gateway, CloudTrail и VPC Flow Logs.

Группы журналов и потоки журналов

Журналы организованы иерархически: группа журналов — это именованный контейнер для журналов с одинаковыми настройками срока хранения и контроля доступа, например /aws/lambda/my-function. Внутри группы журналов каждый поток журналов представляет один источник последовательных событий журнала: один экземпляр EC2, один контейнер Lambda или одна задача ECS. Группа журналов может содержать тысячи потоков, но каждый поток принадлежит ровно одной группе журналов.

# 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

Отправка журналов из Lambda и EC2

AWS Lambda автоматически отправляет весь вывод stdout и stderr в CloudWatch Logs — достаточно, чтобы роль выполнения Lambda содержала разрешения logs:CreateLogGroup, logs:CreateLogStream и logs:PutLogEvents. Для экземпляров EC2 необходимо установить CloudWatch Agent и настроить, какие файлы журналов отслеживать, например /var/log/nginx/access.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 — это интерактивный механизм запросов, позволяющий искать и анализировать данные журналов с помощью специализированного языка запросов. Можно выполнять запросы по одной или нескольким группам журналов, фильтровать данные по диапазону времени, извлекать поля из структурированных и неструктурированных строк журналов, агрегировать данные и визуализировать результаты в виде столбчатых диаграмм или временных рядов. Запросы выполняются по требованию и оплачиваются за каждый просканированный ГБ данных; структурирование журналов в формате JSON значительно уменьшает объём сканирования.

# 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'

Язык запросов Logs Insights

Язык запросов Logs Insights использует команды, разделённые вертикальной чертой: fields выбирает отображаемые поля, filter сужает набор событий (поддерживает регулярные выражения с помощью like и =~), stats агрегирует данные, sort упорядочивает результаты, а limit ограничивает их количество. Сервис автоматически обнаруживает поля в строках журналов в формате JSON. Для неструктурированных журналов значения можно извлекать с помощью parse, используя шаблоны с подстановочными символами или регулярными выражениями.

# 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

Фильтры метрик: от журналов к метрикам

Фильтры метрик непрерывно просматривают поступающие события журналов в поисках шаблонов и увеличивают значение пользовательской метрики CloudWatch при каждом совпадении. Например, можно создать фильтр метрик для группы журналов Lambda, который увеличивает метрику ErrorCount каждый раз, когда строка журнала содержит ERROR. Затем на основе этой метрики создаётся сигнал CloudWatch для уведомления команды. Так журналы превращаются в метрики, на основе которых можно выполнять действия, без сохранения результатов в отдельной базе данных.

# 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

Подписки на журналы и потоковая передача

Фильтр подписки передаёт события журналов почти в реальном времени в другой сервис для обработки или хранения. Данные можно передавать в AWS Lambda для преобразования и маршрутизации журналов, в Amazon Kinesis Data Streams для обработки больших объёмов журналов или в Amazon Kinesis Firehose для доставки в S3, OpenSearch или Splunk. Каждая группа журналов поддерживает до двух фильтров подписки. Для потоковой передачи журналов между аккаунтами требуется место назначения с соответствующей политикой ресурсов.

# 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'

Политики хранения и управление расходами

По умолчанию CloudWatch Logs хранит данные бессрочно, что может привести к значительным расходам. Задайте политики хранения для каждой группы журналов, чтобы автоматически удалять старые события. Распространённые сроки хранения: 7 дней для отладочных журналов, 30 дней для журналов приложений и 1–5 лет для журналов аудита. Группы журналов можно экспортировать в S3 для долгосрочного недорогого архивирования с помощью API create-export-task, однако экспорт выполняется пакетно, а не в реальном времени.

# 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

VPC Flow Logs собирают метаданные об IP-трафике, проходящем к сетевым интерфейсам в Вашей VPC, подсетях или отдельных ENI и от них. Они хранятся в CloudWatch Logs или S3. Журналы потоков содержат исходный IP-адрес, IP-адрес назначения, порт, протокол, количество пакетов, объём данных в байтах, действие (ACCEPT или REJECT) и временную метку. Они незаменимы для устранения неполадок в правилах групп безопасности и NACL, обнаружения сканирования портов и аудита схем трафика, но НЕ содержат фактические полезные данные пакетов.

# 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

Запросы к журналам потоков VPC с помощью Insights

CloudWatch Logs Insights особенно эффективен для анализа журналов потоков VPC. С его помощью можно быстро определить отклонённый трафик, найти наиболее активные источники по объёму переданных байтов, обнаружить необычные соединения или изолировать трафик конкретного экземпляра. По умолчанию формат журналов потоков использует пробелы как разделители, однако публикация данных в формате JSON в CloudWatch Logs обеспечивает автоматическое извлечение полей в запросах 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

Шифрование журналов с помощью KMS

CloudWatch Logs по умолчанию шифрует все данные в состоянии покоя с помощью ключей, управляемых AWS. Для повышения безопасности, особенно в регулируемых средах, с группой журналов можно связать управляемый клиентом ключ KMS. Это позволяет контролировать ротацию и доступ к ключу, а также отзывать доступ ко всем данным журналов, отключив ключ. Политика ключа KMS должна предоставлять CloudWatch Logs разрешение на его использование для шифрования и расшифровки.

# 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}'

Быстрая проверка

Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.

Повторение урока

В этом уроке Вы узнали, что группы и потоки журналов упорядочивают журналы по источнику и позволяют настраивать срок их хранения, Logs Insights позволяет выполнять запросы и агрегировать данные журналов с помощью мощного языка запросов на основе конвейеров, а фильтры метрик преобразуют шаблоны журналов в метрики CloudWatch, которые могут запускать оповещения. Далее мы рассмотрим панели CloudWatch и Container Insights для получения оперативной информации о системе.

Часто задаваемые вопросы

Урок «Журналы CloudWatch и Log Insights» бесплатный?

Да — полный текст урока «Журналы CloudWatch и Log Insights» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.

Чему я научусь в уроке «Журналы CloudWatch и Log Insights»?

Объединяйте журналы EC2, Lambda и контейнеров в группы журналов и выполняйте запросы CloudWatch Logs Insights для поиска ошибок и закономерностей. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AWS Solutions Architect?

Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Журналы CloudWatch и Log Insights»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AWS Solutions Architect?

Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Метрики CloudWatch, пространства имён и измерения
  2. Оповещения CloudWatch и составные оповещения
  3. Журналы CloudWatch и Log Insights
  4. Панели CloudWatch и Container Insights
← Назад к AWS Solutions Architect