Перейти к основному содержимому

Получение статистики запросов к объекту с использованием S3 Select

Вы можете легко получить статистику запросов к объектам S3 с помощью языка запросов S3 Select. Этот инструмент помогает анализировать логи и быстро находить нужные данные прямо в объектном хранилище.

Перед началом работы

  1. Установите и настройте интерфейс командной строки AWS CLI.
  2. Скачайте и установите утилиту jq — она пригодится для обработки JSON-данных в командной строке.

Получение статистики запросов

Сначала выполните запрос к S3 и сохраните результат выполнения в файл.
Для удобства задайте переменные:

bucket=my-stats-bucket
key=logs/site-access-2025.json
query='SELECT "timestamp", request_id, handler, object_key, status, request_time FROM S3Object WHERE status >= 400'

Примеры выражений запросов

1. Поиск запросов по коду ответа (ошибки 4xx и 5xx):

SELECT "timestamp", request_id, handler, object_key, status, request_time
FROM S3Object
WHERE status >= 400

2. Поиск долго обрабатываемых запросов:

SELECT "timestamp", request_id, handler, object_key, status, request_time
FROM S3Object
WHERE request_time >= 1200

3. Среднее время обработки запросов:

SELECT AVG(request_time) AS "average_time"
FROM S3Object

Выполнение запроса

aws --endpoint https://storage.turbocloud.ru s3api select-object-content \
--bucket $bucket \
--key $key \
--expression "$query" \
--expression-type 'SQL' \
--input-serialization 'JSON={Type=LINES}' \
--output-serialization 'JSON={}' \
"output.json"

Анализ результатов

Если запрос не содержит агрегатных функций, вы можете вывести количество запросов по каждому ключу объекта:

jq .object_key output.json | uniq -c | sort -nr

Пример результата

9 "path/logs/2025-03-12-11-03-12-1a9b5db2-4321-4090-5d8a-1abf1e6f7a1f"
6 "path/logs/2025-02-28-14-44-09-8c3e57a4-8820-2168-3a4b-1bca1d2f5d7e"
4 "path/logs/2025-01-19-09-32-41-3f9a47b6-1223-4510-6b8c-4adc1e9f9a2e"
2 "path/logs/2025-01-05-18-10-30-9d8f57b5-1773-7410-2d1b-5bcc1e8d8b3c"
1 "path/logs/2025-01-01-12-11-11-7e6b58c5-1093-5120-7a8b-5bac1f9f8b1a"