← Cloudflare Logs / logs
Logs Engine
Logs Engine позволяет хранить журналы в R2 и выполнять запросы к ним напрямую.
Сохраняйте журналы в R2
- Настройте Logpush для R2 задание.
- Создайте R2 access key как минимум с правами на чтение R2.
- Убедитесь, что у вас есть разрешение на чтение Logshare.
- Также можно создать API-токен Cloudflare со следующими разрешениями:
- Область аккаунта
- Разрешения на чтение журналов
Поиск по журналам
С помощью API журналы можно запрашивать и скачивать по диапазону времени или RayID.
Аутентификация
Для всех вызовов API требуются следующие заголовки:
X-Auth-Email- адрес электронной почты аккаунта Cloudflare, связанного с доменомX-Auth-Key- ключ API Cloudflare
Также для аутентификации можно использовать API-токены с разрешением Logs edit:
Authorization: Bearer <API_TOKEN>
Обязательные заголовки
Помимо упомянутых обязательных заголовков аутентификации, для доступа API к журналам, хранящимся в вашем бакете R2, необходимы следующие заголовки.
R2-access-key-id(обязательно) - R2 Access Key IdR2-secret-access-key(обязательно) - R2 Secret Access Key
Список файлов
Выведите список подходящих объектов R2 с журналами, соответствующими указанным параметрам запроса, используя конечную точку GET /accounts/{accountId}/logs/list.
Параметры запроса
-
start(обязательно) string (TimestampRFC3339) - начальное время в формате RFC 3339, напримерstart=2022-06-06T16:00:00Z. -
end(обязательно) string (TimestampRFC3339) - конечное время в формате RFC 3339, напримерend=2022-06-06T16:00:00Z. -
bucket(обязательно) string (Bucket) - имя бакета R2, напримерbucket=cloudflare-logs. -
prefixстрока (Prefix): префикс бакета R2, под которым хранятся логи, напримерprefix=http_requests/example.com/{DATE}. -
limitчисло (Limit): максимальное количество возвращаемых результатов, напримерlimit=100.
Получение журналов по диапазону времени
Транслируйте журналы, хранящиеся в R2 и соответствующие указанным параметрам запроса, используя конечную точку GET /accounts/{accountId}/logs/retrieve.
Параметры запроса
-
start(обязательно) string (TimestampRFC3339) - начальное время в формате RFC 3339, напримерstart=2022-06-06T16:00:00Z -
end(обязательно) string (TimestampRFC3339) - конечное время в формате RFC 3339, напримерend=2022-06-06T16:00:00Z -
bucket(обязательно) string (Bucket) - имя бакета R2, напримерbucket=cloudflare-logs -
prefixстрока (Prefix): префикс бакета R2, под которым хранятся логи, напримерprefix=http_requests/example.com/{DATE}
Пример запроса API
curl --globoff "https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/retrieve?start=2022-06-01T16:00:00Z&end=2022-06-01T16:05:00Z&bucket=cloudflare-logs&prefix=http_requests/example.com/{DATE}" \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>" \
--header "R2-Access-Key-Id: R2_ACCESS_KEY_ID" \
--header "R2-Secret-Access-Key: R2_SECRET_ACCESS_KEY"Результаты можно перенаправить в файл с помощью > logs.json.
Кроме того, если вы хотите получать необработанные байты GZIP без прозрачной распаковки на стороне клиента, добавьте заголовок --header "Accept-Encoding: gzip".
Получение журналов по Ray ID
Если ваши журналы хранятся в R2, функция Logpull RayID Lookup позволяет запросить наличие RayID в проиндексированном диапазоне времени и получить соответствующий результат. Эта функция доступна пользователям с бета-подпиской Logpull RayID Lookup.
Поиск по RayID выполняется в два этапа. Сначала необходимо проиндексировать временной диапазон, и только после этого можно запросить запись по RayID.
Индексы автоматически истекают после семи дней без использования.
Индексировать временной диапазон
Перед выполнением запроса можно задать временной диапазон для индексации, чтобы сузить область поиска. В следующем примере мы индексируем одну минуту журналов, хранящихся в бакете R2 "cloudflare-logs" под префиксом "http_requests/{DATE}".
Пример запроса API
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/rayids/index \
--header "Authorization: Bearer <API_TOKEN>" \
--header "R2-Access-Key-Id: <R2_ACCESS_KEY_ID>" \
--header "R2-Secret-Access-Key: <R2_SECRET_ACCESS_KEY>" \
--header "Content-Type: application/json" \
--data-raw '{
"start": "2022-08-16T20:30:00Z",
"end": "2022-08-16T20:31:00",
"bucket": "cloudflare-logs",
"prefix": "http_requests/example.com/{DATE}"
}'Поиск RayID
После индексации временного диапазона выполните GET запрос с RayID. Если в индексированном диапазоне времени найден совпадающий результат, запись будет возвращена. Обратите внимание, что параметры переместились из тела запроса в URL. -g флаг необходим, чтобы избежать {DATE} параметр не был неправильно интерпретирован cURL.
Пример запроса API
curl --globoff "https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/rayids/<RAY_ID>?bucket=cloudflare-logs&prefix=http_requests/example.com/{DATE}" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "R2-Access-Key-Id: <R2_ACCESS_KEY_ID>" \
--header "R2-Secret-Access-Key: <R2_SECRET_ACCESS_KEY>"Устранение неполадок
При обращении к API возникает ошибка
- Ошибка: Диапазон времени вернул слишком много результатов. Попробуйте сократить диапазон времени и повторите попытку.
Код состояния HTTP 422 будет возвращён, если диапазон времени между параметрами start и end слишком широк. Если вы столкнулись с этим ограничением, попробуйте запросить более короткий диапазон времени.
- Ошибка: У предоставленного токена не включены необходимые функции.
Обратитесь к своему представителю по работе с аккаунтом, чтобы он добавил к вашему аккаунту бета-подписку Logpull RayID Lookup.
- Ошибка: Диапазон времени вернул слишком много результатов. Попробуйте сократить диапазон времени и повторите попытку.
Зоны с высоким объёмом трафика могут создавать в R2 большое количество файлов журналов. Попробуйте сузить начальный и конечный временной диапазон, пока не найдёте длительность, которая лучше всего подходит для объёма ваших журналов.
Как узнать, какой временной диапазон индексировать?
В настоящее время процесс индексирования журналов сразу по их поступлении отсутствует. Если у вас есть RayID и известно время запроса, попробуйте проиндексировать журналы за 5-10 минут после завершения запроса.
Какова задержка между наступлением события и моментом, когда его можно запросить?
Logpush доставляет журналы пакетами как можно быстрее, обычно менее чем за одну минуту. После этого журналы становятся доступны через Logs Engine.
Есть ли в R2 средства управления сроком хранения данных?
В R2 в настоящее время не предусмотрены средства управления сроком хранения. Запросы можно делать вплоть до момента создания задания Logpush.
С какими наборами данных совместим Logs Engine?
API получения данных совместим со всеми поддерживаемыми наборами данных. Полный список доступен на Наборы данных раздел.