Логи и observability

Анализатор логов AWSдля логов доступа CloudFront и ALB

Вставьте стандартный лог CloudFront или лог доступа ALB — формат определится автоматически (или выберите вручную), — и нажмите «Разобрать лог», чтобы получить таблицу с фильтрами.

Анализатор логов AWS

Пример:
Тип лога
Фильтры

Лог доступа

Всё обрабатывается локально в браузере. Текст лога никогда не отправляется, учётная запись AWS не нужна.

Разобранные строки

Разберите лог, чтобы увидеть строки здесь.

Вставьте лог CloudFront или ALB либо загрузите пример, затем нажмите «Разобрать лог».

CloudFront и ALB генерируют два самых распространённых типа логов доступа в AWS, и ни один из них не читается на глаз без труда: набор полей CloudFront зависит от того, какие столбцы были выбраны при включении логирования, а ALB укладывает более 30 значений через пробел в одну строку, часть из них в кавычках. Другое его название — парсер логов балансировщика нагрузки AWS, суть не в названии: этот анализатор логов AWS создан для момента, когда под рукой есть фрагмент одного из этих логов — скопированный из тикета поддержки, скачанный из S3 или вырезанный из экспорта CloudWatch — и нужно понять, какая edge-локация обработала запрос, какая цель вернула 502 или какой клиентский IP слишком часто обращается к определённому пути, не настраивая запрос в Athena.

Подходит для быстрой проверки нескольких сотен или тысяч строк, а не для замены постоянного пайплайна анализа. Всё происходит во вкладке браузера; текст лога никуда не отправляется, учётная запись AWS или доступ к S3 не требуются.

Зачем нужен этот анализатор логов AWS

Сделан с учётом того, как эти два формата AWS на самом деле объявляют свои поля.

Список полей CloudFront берётся из заголовка самого лога

Стандартный лог CloudFront начинается со строк #Version и #Fields, где по порядку перечислены названия всех столбцов. Этот анализатор читает именно эти две строки вместо того, чтобы предполагать фиксированную структуру — когда AWS добавляет в лог новые поля, таблица просто расширяется вместе с ним, без обновления инструмента и без выбора номера версии.

Строка заголовка #Fields из CloudFront напрямую превращается в столбцы таблицы

Статистика под конкретный формат, а не общая сводка

Для CloudFront показывается разбивка по результату кэша (Hit, Miss, RefreshHit, Error) и топ edge-локаций — именно то, что проверяют при странном поведении CDN. Для ALB — разбивка выполненных действий и число запросов, где код статуса балансировщика расходится с кодом цели, что обычно первым сигнализирует о проблеме на бэкенде.

Отдельные панели статистики по результату кэша и расхождению статусов ELB/цели

От сырого лога AWS к таблице с фильтрами

Разбор, фильтрация и экспорт в три шага.

01

Вставьте лог и доверьтесь автоопределению

Вставьте стандартный лог CloudFront или лог доступа ALB. Автоопределение смотрит только на первую непустую строку: если она начинается с #Version: — это CloudFront, если первое слово одно из http/https/h2/grpcs/ws/wss — это ALB. Если ни то ни другое не подошло (например, вставлены только строки данных без заголовка), выберите тип вручную из списка, а не полагайтесь на угадывание.

  • Если вручную выбрать CloudFront для лога без заголовка #Version/#Fields, ошибки не будет — инструмент переключится на встроенный список полей по умолчанию, который покрывает текущий набор полей AWS
  • Оба встроенных примера загружаются с уже выбранным форматом и содержат по одной намеренно некорректной строке, чтобы показать, как сообщается о несоответствии
02

Нажмите «Разобрать лог» (или Ctrl/Cmd+Enter)

Разбор не запускается автоматически во время набора текста — такие логи часто состоят из тысяч строк, некоторые с более чем 30 полями, и повторное сопоставление на каждое нажатие клавиши было бы расточительным. Нажмите «Разобрать лог» один раз или используйте сочетание клавиш — и таблица заполнится.

  • Смена типа лога после этого не запускает повторный разбор автоматически; старая таблица остаётся видимой, но становится тусклее, пока вы снова не нажмёте «Разобрать лог»
03

Отфильтруйте и экспортируйте

Фильтры по статусу, пути, клиентскому IP и (для CloudFront) edge-локации применяются мгновенно к уже разобранным строкам — повторно нажимать «Разобрать лог» не нужно. Панель сводки под таблицей обновляется вместе с фильтром, включая разбивку по результату кэша или выполненным действиям, а также общий объём в байтах и среднюю/максимальную задержку для того, что показано сейчас. Видимые строки можно скопировать или скачать в формате CSV, JSON или обычного текста.

  • Поле фильтра по edge-локации показывается только когда тип лога — CloudFront или Автоопределение; в логах ALB нет такого поля, поэтому оно просто не отображается, а не выводится отключённым
Перейти к анализатору

Что даёт эта таблица помимо сырого текста

Сопоставление полей, четыре фильтра и статистика под конкретный формат для разбора реального лога доступа AWS.

Самоописываемое сопоставление полей для CloudFront

Названия столбцов берутся прямо из строки #Fields самого лога, поэтому таблица всегда точно соответствует версии вставленного лога, включая любой собственный набор полей, выбранный при включении логирования.

Фиксированная и только дополняемая карта полей для ALB

У ALB нет строки заголовка, но официальная документация AWS прямо говорит: новые поля всегда добавляются в конец. Этот анализатор сопоставляет токены строки по позиции с полным списком известных полей и сообщает, сколько известных полей реально совпало, — так более старый лог с меньшим числом хвостовых полей по-прежнему разбирается чисто, без ошибки.

Четыре фильтра: статус, путь, клиентский IP, edge-локация

Можно сузить таблицу по диапазону статусов или точному коду, подстроке или регулярному выражению пути, подстроке клиентского IP и — только для CloudFront — подстроке edge-локации, без повторного разбора лога.

Разбивка по кэшу и действиям, плюс счётчик расхождений статусов

Строки CloudFront сводятся по x-edge-result-type (Hit, Miss, RefreshHit, Error и похожие); строки ALB — по значению actions_executed через запятую, плюс отдельный счётчик запросов, где коды ELB и цели не совпадают.

Некорректные строки с номерами

Строка, число столбцов которой не совпадает с определённым форматом, попадает в список с её номером (с единицы) и исходным текстом, так что несколько странных строк никогда незаметно не исчезают из подсчёта.

Экспорт в CSV, JSON или обычный текст

Экспортируются именно те строки, что сейчас показаны с учётом фильтров, с теми же столбцами, что и в таблице — готово для вставки в таблицу или другой инструмент.

Что этот анализатор читает, а что нет

Точное поведение при определении полей, обработке некорректных строк и границах охвата, которое вряд ли изменится.

Для CloudFront нужно точное совпадение числа столбцов, для ALB — не меньше 13 токенов
Строка данных CloudFront принимается только если число столбцов, разделённых табуляцией, точно совпадает с текущим списком полей (из #Fields или встроенным по умолчанию). Строке ALB нужно как минимум 13 токенов через пробел — этого достаточно, чтобы дойти до поля request в кавычках, — иначе она попадает в список некорректных строк, а не разбирается наугад.
Хвостовые поля ALB сверх известных 34 просто не сопоставляются
Если в будущем релизе AWS добавит поля после тех, что этот инструмент знает сейчас, эти дополнительные значения не появятся как новые столбцы — индикатор покрытия полей по-прежнему покажет реальное число совпавших известных полей относительно общего числа, чтобы было видно, когда лог новее, чем список полей этого инструмента.
Разбирается классический текстовый формат лога, а не JSON или Parquet из CloudFront Standard Logging v2
CloudFront Standard Logging v2 может также доставлять файлы в JSON или Parquet. Parquet — это бинарный колоночный формат, который браузер не может осмысленно разобрать как вставленный текст, поэтому инструмент обрабатывает только классический текстовый лог в стиле W3C (формат legacy и соответствующий вариант вывода w3c в v2).
Нет подключения к S3, нет учётных данных AWS, нет логов в реальном времени или потоковых
Этот инструмент никогда не запрашивает имя бакета или ключ доступа и никогда не делает сетевых запросов — вы вставляете текст, который уже есть у вас на руках. Он также не читает логи CloudFront в реальном времени, которые доставляются через Kinesis Data Streams, а не в виде файла, который можно вставить.
Одна вставка ограничена 300 000 символов и 20 000 строк
Это ограничение сохраняет разбор быстрым и предсказуемым во вкладке браузера. Более крупный экспорт лога разбейте на несколько частей.

Частые вопросы про анализатор логов AWS

Ответы на вопросы, которые чаще всего задают перед онлайн-разбором лога доступа CloudFront или ALB.

Что означают поля в логе доступа ALB?

Поскольку у ALB нет строки заголовка, этот инструмент сопоставляет токены каждой строки, разделённые пробелами, по позиции с порядком полей, задокументированным AWS, — type, time, elb, client:port и далее вплоть до более новых полей вроде classification и ip_address. Это сопоставление применяется автоматически, как только выбран или определён ALB.

Что означают поля лога CloudFront?

Это зависит от настроек логирования и версии на момент включения — именно поэтому инструмент читает названия полей прямо из строки #Fields самого лога, а не предполагает фиксированный список. После вставки лога заголовки столбцов — это настоящие названия полей той версии, от date и c-ip до более редких, таких как fle-status или sc-range-start.

Как связать логи CloudFront и ALB для одного и того же запроса?

Этот инструмент не объединяет два лога автоматически, он разбирает каждый по отдельности. Зато он даёт поля, нужные для ручного сопоставления: x-edge-request-id и x-forwarded-for со стороны CloudFront и trace_id со стороны ALB — именно то значение, которое AWS в документации рекомендует использовать для связи между обоими переходами.

Как узнать реальный IP клиента за ALB, если перед ним стоит CloudFront?

Когда CloudFront стоит перед ALB, последний обычно видит в качестве клиента IP edge-узла CloudFront. Этот инструмент отображает поле client:port из ALB как есть в отдельном столбце и позволяет фильтровать по клиентскому IP без учёта порта, чтобы сразу проверить, соответствует ли значение ожиданиям.

Можно ли разобрать лог прямо в браузере, без загрузки на сервер?

Да. Вставленный текст никуда не отправляется. Разбор, фильтрация и экспорт целиком выполняются во вкладке браузера на JavaScript, без загрузки, хранения или записи на сервере, и ни на одном этапе не запрашивается учётная запись AWS или доступ к S3.

Что за новые поля появились в логах ALB, например conn_trace_id или classification?

С 2016 года AWS несколько раз добавляла поля в конец формата лога ALB — classification и classification_reason для защиты от desync-атак, conn_trace_id, а позже transformed_host и ip_address. Этот анализатор сопоставляет столько из известных 34 полей, сколько реально есть в строке, и сообщает это число, оставаясь полезным как на старых, так и на новых логах ALB — не нужно помнить, в каком релизе появилось какое поле.

Поддерживает ли этот инструмент формат JSON или Parquet из CloudFront Standard Logging v2?

Нет — этот анализатор читает только классический текстовый формат лога с разделением табуляцией (формат legacy и соответствующий вариант вывода w3c в Standard Logging v2). Parquet — это бинарный колоночный файл, который нельзя осмысленно вставить как текст, поэтому этот вариант вывода выходит за рамки браузерного текстового анализатора.

Нашли реальную строку лога, которую этот анализатор разбирает неверно?

Разберите свой лог CloudFront или ALB прямо сейчас

Вставьте стандартный лог CloudFront или лог доступа ALB и получите за секунды таблицу с фильтрами и экспортом — без S3, без учётных данных AWS, без загрузки на сервер.

Добавьте этот анализатор логов AWS в закладки на случай, когда понадобится проверить процент попаданий в кэш, найти, кто слишком часто обращается к пути, или понять, почему target group возвращает не тот код статуса.

Весь разбор происходит локально в вашем браузере.