Поиск по сайту:

Как настроить службу агрегации журналов CloudWatch


Агрегация и анализ журналов — это огромная область, вокруг которой строятся целые наборы продуктов, чтобы упростить ее. Сервис AWS CloudWatch автоматически собирает метрики использования, но его также можно настроить для агрегирования журналов из ваших инстансов EC2.

Зачем объединять журналы в первую очередь?

Допустим, вы используете веб-сервер, такой как nginx. Каждый раз, когда кто-то подключается к вашему веб-сайту, создается новая строка в файле журнала, содержащая сведения о посещении. Эта информация может быть весьма полезной; например, nginx записывает следующие данные для каждого запроса:

  • IP-адрес подключающегося пользователя
  • Имя пользователя, если используется обычная аутентификация (в большинстве случаев пустое)
  • Время запроса
  • Сам запрос (например, «GET /index.php?url=abc»)
  • Код статуса возвращен
  • Отправлено байт, за исключением заголовков HTTP (полезно для отслеживания фактического объема трафика)
  • Реферер HTTP (то есть сайт, с которого пришел пользователь)
  • Агент пользователя браузера пользователя

Хотя пакет аналитики, такой как Google Analytics, также предоставляет много этой информации, файлы журналов создаются автоматически и обновляются в режиме реального времени. Если вы хотите узнать, сколько трафика вы получаете с определенного диапазона IP-адресов или каковы ваши самые большие источники переходов, запрос ваших файлов журнала может дать результаты очень быстро. (Elasticsearch подходит для этого; AWS предлагает его как управляемый сервис, который хорошо работает с журналами CloudWatch.)

Теперь предположим, что у вас много веб-серверов — вдруг проблема становится немного сложнее, чем просто поиск одного файла журнала. Даже имея всего два сервера, вы не получите точных результатов, если журналы не будут собраны в одном месте. Именно здесь пригодится функция потоковой передачи журналов CloudWatch.

Как настроить журналы CloudWatch

Чтобы подключить инстанс EC2 к CloudWatch Logs, вам нужно установить агент журналов, который обрабатывает отправку журналов в CloudWatchFirst, и вам нужно настроить новую роль IAM для работы агента.

Эта роль должна быть связана с вашим экземпляром, поэтому в консоли управления EC2 щелкните правой кнопкой мыши свой экземпляр и выберите «Настройки экземпляра» > «Прикрепить/заменить роль IAM»:

Если вы делаете это впервые, выберите создание новой роли в консоли IAM. Создайте новую роль, затем выберите «EC2» в качестве службы, использующей эту роль.

Затем добавьте права доступа к роли. Создайте новое разрешение и вставьте следующий JSON:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
    ],
      "Resource": [
        "arn:aws:logs:*:*:*"
    ]
  }
 ]
}

Как только это будет сделано, вернитесь на вкладку создания роли и выберите только что созданное разрешение.

Дайте роли имя, и вы должны быть готовы к работе. Вернитесь к консоли EC2 и нажмите «Обновить» в раскрывающемся списке ролей. Вы должны увидеть роль агента журналов.

После того, как разрешения устранены, вы можете установить агент. Если вы используете 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

Здесь вы настраиваете, какие файлы журналов обрабатывает агент журналов. По умолчанию он отправляет /var/log/syslog, в котором регистрируется множество системных действий. Здесь вы можете добавить несколько файлов журнала. Каждый файл журнала объединяется в группу (имя которой по умолчанию соответствует местоположению журнала) и получает отметку времени.

Журналы из отдельных экземпляров разделены идентификатором экземпляра, но вы можете просмотреть общий поток для каждой группы журналов, состоящий из всех экземпляров, отправляющих журналы в эту группу. После настройки агента журналы сразу же начинают отображаться в CloudWatch (плюс-минус пять секунд).

Отсюда вы можете использовать панель поиска в средстве просмотра журналов для выполнения простого поиска и использовать встроенный инструмент CloudWatch Insights для запроса ваших журналов.

Если вам нужны дополнительные возможности поиска или вы хотите визуализировать вещи с помощью Kibana, вы можете использовать размещенный на AWS сервис Elasticsearch, который хорошо интегрируется с CloudWatch Logs.