Агрегация логов EC2 в AWS CloudWatch

Быстрые ссылки
- Почему стоит агрегировать логи
- Как настроить CloudWatch Logs
Почему стоит агрегировать логи
Если вы запускаете веб‑сервер (например, nginx), каждый HTTP‑запрос создаёт строку в файле лога с информацией о визите. Такие записи обычно содержат:
- IP‑адрес клиента
- Имя пользователя при базовой аутентификации (чаще пусто)
- Время запроса
- Сам запрос, например:
GET /index.php?url=abc- Код ответа
- Отправленные байты (без HTTP‑заголовков)
- HTTP‑referer (откуда пришёл пользователь)
- User‑agent клиента
Логи генерируются в реальном времени. Их быстрое агрегирование позволяет отвечать на вопросы типа «сколько трафика с этого IP‑диапазона?» или «какие крупнейшие источники реферального трафика?». Для быстрого поиска и аналитики часто используют Elasticsearch/Opensearch, а AWS предлагает управляемые сервисы, которые интегрируются с CloudWatch Logs.
Когда у вас много серверов, поиск по одному файлу уже не даст полной картины. Аггрегация логов в одно место решает эту проблему: вы получаете унифицированный поток логов и можете строить метрики, оповещения и дашборды.
Как настроить CloudWatch Logs
Ниже — пошаговая инструкция для EC2‑инстанса.
1. Создайте IAM‑роль для агента логов
Агент должен иметь права на создание групп логов, потоков логов и отправку событий. Войдите в EC2 Console, выберите инстанс, затем «Instance Settings» > «Attach/Replace IAM Role».

Если роли ещё нет — создайте новую в консоли IAM. Выберите сервис EC2 как доверенный сущность. Затем создайте политику с набором разрешений. Пример JSON‑политики, которую можно вставить при создании собственной политики:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"arn:aws:logs:*:*:*"
]
}
]
}Выберите созданную политику для роли, сохраните и привяжите роль к инстансу.

Важно: роль должна быть ассоциирована с инстансом до установки агента. Без этого агент не сможет отправлять логи.
2. Установите агент на инстанс
Есть две распространённые опции:
- awslogs (классический Python‑агент) — прост в настройке.
- CloudWatch Agent (новый унифицированный агент) — поддерживает метрики и логи, имеет более гибкую конфигурацию.
Примеры установки:
Для Amazon Linux с yum:
sudo yum install -y awslogsДля Debian/Ubuntu загрузите установщик:
curl https://s3.amazonaws.com//aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -OЗапустите установщик и укажите регион:
sudo python ./awslogs-agent-setup.py --region us-east-1Если используете CloudWatch Agent (рекомендуется для новых проектов), скачайте и установите его пакет, затем используйте встроенный конфигер:
# пример для Amazon Linux 2
sudo yum install -y amazon-cloudwatch-agent
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
sudo systemctl start amazon-cloudwatch-agentПримечание: замените us-east-1 на регион, где вы хотите хранить логи.
3. Укажите файлы логов для отправки
Во время настройки агента вы указываете, какие пути логов отправлять. По умолчанию отправляется /var/log/syslog или /var/log/messages. Вы можете добавить несколько путей, например логи nginx, приложения и т. д. Каждый путь попадает в группу логов (логгруппу) и получает поток логов по ID инстанса.

4. Просмотр логов в CloudWatch
После запуска агента логи обычно появляются в CloudWatch через несколько секунд. В консоли CloudWatch можно выполнить быстрый поиск по строкам логов или воспользоваться CloudWatch Logs Insights для SQL‑подобных запросов и агрегаций.


Если вам нужна визуализация или более мощные возможности поиска, рассмотрите интеграцию с Elasticsearch/Opensearch и Kibana/Opensearch Dashboards.
Практические советы и шаблоны
Мини‑методология для запуска логирования на новом инстансе
- Создайте/обновите IAM‑роль с необходимыми правами.
- Привяжите роль к инстансу до старта агента.
- Установите awslogs или CloudWatch Agent.
- Настройте пути логов и уровни (info/warn/error).
- Проверьте появление логов в CloudWatch.
- Настройте Alerts/Metric Filters при необходимости.
Контрольный список приёма (Критерии приёмки)
- Роль IAM назначена и содержит нужную политику.
- Агент запущен и работает как служба.
- Логи от инстанса появляются в соответствующей группе логов.
- Для каждого приложения есть отдельная логгруппа или читаемое разделение потоков.
- Покрыты критические уровни (ERROR, WARN) фильтрами оповещений.
Быстрый SOP для onboarding нового инстанса
- Шаг 1: Привязать роль logs‑agent‑role.
- Шаг 2: Установить CloudWatch Agent через пакетный менеджер.
- Шаг 3: Подгрузить шаблон конфигурации (пример ниже).
- Шаг 4: Перезапустить агент и проверить CloudWatch.
Пример конфигурации CloudWatch Agent (фрагмент JSON):
{
"logs":{
"logs_collected":{
"files":{
"collect_list":[
{"file_path":"/var/log/nginx/access.log","log_group_name":"/nginx/access","timestamp_format":"%d/%b/%Y:%H:%M:%S %z"},
{"file_path":"/var/log/nginx/error.log","log_group_name":"/nginx/error"}
]
}
}
}
}Роль‑ориентированные чеклисты
DevOps:
- Автоматизировать привязку IAM‑роли через Terraform/CloudFormation.
- Включить метрики и оповещения для ошибок.
Разработчик приложения:
- Логи приложения должны быть структурированы (JSON) для удобного парсинга.
- Использовать корреляционный ID для трассировки запросов.
SRE/операции:
- Настроить сохранение логов и ротацию на стороне сервера до отправки.
- Настроить удержание (retention) и архивирование в S3 при необходимости.
Альтернативные подходы и когда они лучше
- CloudWatch Agent — если хотите единый агент для метрик и логов.
- Fluentd/Fluent Bit / Filebeat — если требуется кастомная обработка, обогащение или буферизация перед отправкой в внешние хранилища.
- Отправка напрямую в Elasticsearch/Opensearch — уменьшает задержку между записью и визуализацией в Kibana, но требует управления кластерами.
- SaaS (Datadog, Splunk) — если нужна готовая платформа с продвинутой аналитикой и вы не хотите управляеть хранилищем.
Когда CloudWatch Logs не подходит:
- Если вам нужна сложная трансформация логов на лету — лучше Fluentd/Logstash.
- Если нужно хранить логи очень долго и получать гибкие экономические модели — возможно, S3 + Athena подойдет лучше.
Проблемы и устранение неисправностей
- Логи не появляются: проверьте IAM‑роль на предмет требуемых разрешений и убедитесь, что роль привязана к инстансу.
- Агент падает при старте: смотрите системный журнал (systemctl status, journalctl) и логи агента в /var/log/awslogs или /opt/aws/amazon-cloudwatch-agent/logs.
- Неправильное временное значение: проверьте часовой пояс и формат timestamp в конфигурации агента.
- Высокая задержка доставки: убедитесь, что сеть инстанса не заблокирована и что агент не перегружен большими файлами.
Decision flow (выбор агента) — диаграмма
flowchart TD
A[Нужно логировать и метрики?] -->|Да| B[CloudWatch Agent]
A -->|Только логи и нужна трансформация| C[Fluentd/Fluent Bit]
A -->|Только логи, простая отправка| D[awslogs или Filebeat]
B --> E{Нужна визуализация}
C --> E
D --> E
E -->|Kibana/Opensearch| F[Elasticsearch/Opensearch]
E -->|CloudWatch Insights| G[Оставить в CloudWatch]1‑строчный глоссарий
- Log Group — логическая группа, содержащая потоки логов.
- Log Stream — последовательность лог‑событий от одного источника (например, от инстанса).
- CloudWatch Logs Insights — инструмент для интерактивного анализа логов.
- IAM Role — роль, которую сервис или агент использует для доступа к ресурсам.
Краткое резюме
- Агрегация логов нужна для централизованного поиска и аналитики по множеству инстансов.
- Минимум: создать IAM роль, установить агент и настроить пути логов.
- Для расширенной аналитики интегрируйте CloudWatch с Elasticsearch/Opensearch или используйте CloudWatch Insights.
Важно: сохраняйте структурированные логи (JSON) там, где это возможно. Это значительно упрощает парсинг и построение метрик.
Если нужно, могу подготовить Terraform/CloudFormation шаблон для автоматизации создания роли и настройки агента, а также пример конфигурации для Fluent Bit или Filebeat.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента