INTEGRITY Документация

Workers Logpush

Cloudflare Logpush поддерживает возможность отправки Workers Trace Event Logs к поддерживаемый пункт назначения. Workers Trace Events Logpush включает метаданные о запросах и ответах, неструктурированные console.log() сообщения и все необработанные исключения. Этот продукт доступен на плане Workers Paid. Информацию о ценах см. в Цены.

Проверьте доступ к Logpush

Чтобы настроить задание Logpush, убедитесь, что ваша роль в аккаунте Cloudflare позволяет использовать Logpush. Чтобы проверить свою роль:

  1. На панели управления Cloudflare перейдите к разделу Участники страницу.

    Перейдите в Участники ↗
  2. Проверьте права доступа своей учетной записи. Роли с доступом к настройке Logpush отличаются от прав доступа Workers. Полный доступ к Logpush имеют роли Super Administrator, Administrator и Log Share.

Также можно создать новый API-токен ограничен уровнем Account с правами Logs Edit.

Создание задания Logpush

Через панель управления Cloudflare

Чтобы создать задание Logpush в панели управления Cloudflare:

  1. На панели управления Cloudflare перейдите к разделу Logpush страницу.

    Перейдите в Logpush ↗
  2. Выберите Создание задания Logpush.

  3. Выберите назначение и при необходимости настройте его.

  4. Выберите События трассировки Workers в качестве набора данных > Далее.

  5. При необходимости настройте поля данных. В противном случае выберите Далее.

  6. Следуйте инструкциям в панели управления, чтобы подтвердить владение назначением ваших данных и завершить создание задания.

Через cURL

В следующем примере логи Workers отправляются в R2. Дополнительные варианты настройки описаны в Enable destinations и Настройка API в документации по Logs.

curl "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/logpush/jobs" \
--header 'X-Auth-Key: <API_KEY>' \
--header 'X-Auth-Email: <EMAIL>' \
--header 'Content-Type: application/json' \
--data '{
  "name": "workers-logpush",
  "output_options": {
    "field_names": ["Event", "EventTimestampMs", "Outcome", "Exceptions", "Logs", "ScriptName"],
  },
  "destination_conf": "r2://<BUCKET_PATH>/{DATE}?account-id=<ACCOUNT_ID>&access-key-id=<R2_ACCESS_KEY_ID>&secret-access-key=<R2_SECRET_ACCESS_KEY>",
  "dataset": "workers_trace_events",
  "enabled": true
}' | jq .

В Logpush вы можете настроить фильтры и частота сэмплирования чтобы точнее контролировать объем данных, отправляемых в настроенное место назначения. Например, если вы хотите получать логи только по запросам, которые не завершились исключением, добавьте следующее filter свойство JSON ниже output_options:

"filter":"{\"where\": {\"key\":\"Outcome\",\"operator\":\"!eq\",\"value\":\"exception\"}}"

Включить логирование для Worker

Локальная разработка

Включите логирование для Worker, добавив новое свойство logpush = true, в ваш файл Wrangler. Это можно добавить либо в конфигурацию верхнего уровня, либо в окружение. Любые новые Workers с этим свойством будут автоматически подхватываться задачей Logpush.

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	// Top-level configuration
	"name": "my-worker",
	"main": "src/index.js",
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"workers_dev": false,
	"logpush": true,
	"route": {
		"pattern": "example.org/*",
		"zone_name": "example.org"
	}
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker"
main = "src/index.js"
# Set this to today's date
compatibility_date = "2026-08-28"
workers_dev = false
logpush = true

[route]
pattern = "example.org/*"
zone_name = "example.org"

Настройте с помощью API для multipart-загрузки скрипта:

curl --request PUT \
"https://api.cloudflare.com/client/v4/accounts/{account_id}/workers/scripts/{script_name}" \
--header "Authorization: Bearer <API_TOKEN>" \
--form 'metadata={"main_module": "my-worker.js", "logpush": true}' \
--form '"my-worker.js"=@./my-worker.js;type=application/javascript+module'

Dashboard

Чтобы включить логирование Logpush через панель управления:

  1. На панели управления Cloudflare перейдите к разделу Workers & Pages страницу.

    Перейдите в Workers & Pages ↗
  2. Выберите свой Worker.

  3. Перейдите в Настройки > Observability.

  4. Для Logpush, выберите Включить (это доступно, только если вы уже создали задание Logpush).

Лимиты

logs и exceptions поля имеют суммарный лимит в 16,384 символа, после которого поля начнут обрезаться. Символы учитываются в порядке всех exception.names, exception.messages, а затем log.messages.

После достижения этого предела символов все поля будут усечены с "<<<Logpush: *field* truncated>>>" на одно сообщение, после чего логи и исключения отбрасываются.

Пример

Чтобы проиллюстрировать это, предположим, что событие Logpush выглядит как JSON ниже, а лимит составляет 50 символов (вместо фактического лимита в 16,384). Алгоритм выполнит следующее:

  1. Подсчитайте количество символов в exception.names:
    1. "SampleError" и "AuthError" как 20 символов.
  2. Подсчитайте количество символов в exception.message:
    1. "something went wrong" засчитывается как 20 символов, остаётся 10 символов.
    2. Первые 10 символов "unable to process request authentication from client" будет взят и подсчитан перед усечением до "unable to <<<Logpush: exception messages truncated>>>".
  3. Подсчитайте количество символов в log.message:
    1. Усечение уже началось, поэтому "Hello " будет заменён на "<<<Logpush: messages truncated>>>" и "World!" будет отброшен.

Пример входных данных

{
	"Exceptions": [
		{
			"Name": "SampleError",
			"Message": "something went wrong",
			"TimestampMs": 0
		},
		{
			"Name": "AuthError",
			"Message": "unable to process request authentication from client",
			"TimestampMs": 1
		}
	],
	"Logs": [
		{
			"Level": "log",
			"Message": ["Hello "],
			"TimestampMs": 0
		},
		{
			"Level": "log",
			"Message": ["World!"],
			"TimestampMs": 0
		}
	]
}

Пример выходных данных

{
	"Exceptions": [
		{
			"name": "SampleError",
			"message": "something went wrong",
			"TimestampMs": 0
		},
		{
			"name": "AuthError",
			"message": "unable to <<<Logpush: exception messages truncated>>>",
			"TimestampMs": 1
		}
	],
	"Logs": [
		{
			"Level": "log",
			"Message": ["<<<Logpush: messages truncated>>>"],
			"TimestampMs": 0
		}
	]
}