← Cloudflare Logs / logs / logpush / logpush-job
Podpožadavky
Když Cloudflare Worker zachytí požadavek návštěvníka, může odeslat další odchozí volání fetch, takzvané dílčí požadavky. Ve výchozím nastavení každý dílčí požadavek vygeneruje v Logpush vlastní záznam protokolu, takže jeden požadavek návštěvníka se v protokolu projeví jako více řádků.
Každou fázi požadavku lze identifikovat podle jejích polí v logu. Můžete také zapnout slučování podpožadavků, které agreguje záznamy podpožadavků do nadřazeného požadavku, takže úloha Logpush pak doručuje jeden řádek logu na jeden požadavek návštěvníka.
Identifikace typů protokolů
Každá fáze požadavku generuje vlastní řádek logu. Rozlišit je můžete pomocí následujících polí.
Požadavek návštěvníka : původní požadavek návštěvníka na vaši zónu:
- ClientRequestSource == "eyeball"
Požadavek na origin : požadavek přeposlaný z Cloudflare na váš origin server:
- OriginIP != "", or
- OriginResponseStatus != 0 (for example, OriginResponseStatus == 200)
Dílčí požadavek Workeru : volání fetch odeslané Workerem:
- WorkerSubrequest == true
- ClientRequestSource == "edgeWorkerFetch"
Chcete-li propojit protokol dílčího požadavku s jeho nadřazeným požadavkem, porovnejte pole ParentRayID dílčího požadavku s polem RayID nadřazeného požadavku.
Slučování dílčích požadavků
Slučování dílčích požadavků je funkce, kterou je nutné aktivovat pro datovou sadu http_requests. Po jejím povolení doručuje vaše úloha Logpush jeden řádek protokolu na jeden požadavek návštěvníka, přičemž data o dílčích požadavcích jsou vložena jako pole typu vnořené pole v nadřazeném záznamu protokolu.
Způsobilost ke slučování
- Do jednoho nadřazeného požadavku lze sloučit maximálně 50 dílčích požadavků. Dílčí požadavky nad tento limit se předávají beze změny jako jednotlivé záznamy logu.
- Dílčí požadavky musí být dokončeny do 5 minut od požadavku návštěvníka. Dílčí požadavky, které tento časový limit překročí, jsou předány beze změny.
Nové pole protokolu
Když je povoleno slučování dílčích požadavků, Subrequests pole (array<object>) se přidává ke každému záznamu protokolu nadřazeného požadavku. Každý prvek pole obsahuje standardní pole http_requests pro daný podřízený požadavek.
Pole obsahuje pouze podpožadavky, které splňují výše uvedená kritéria pro sloučení. Podpožadavky, které tato kritéria nesplňují, se zobrazují jako samostatné položky v logu. Pokud požadavek nemá žádné podpožadavky nebo žádný nesplňuje kritéria, bude pole prázdné ([]).
Povolení slučování dílčích požadavků
Slučování dílčích požadavků lze povolit přes API nebo Cloudflare dashboard.
Dashboard
- V Cloudflare dashboardu přejděte na stránku Logpush na úrovni domény (známé také jako zóna). Přejděte na Logpush ↗
- Vyberte Vytvořit úlohu Logpush, nebo vyberte Upravit vedle existující úlohy http_requests.
- V části Advanced Options povolte přepínač Subrequest merging.
- Vyberte Uložit.
API
- Chcete-li povolit slučování dílčích požadavků u nové úlohy, nastavte v těle požadavku "merge_subrequests": true.
Požadovaná oprávnění API tokenu
Je vyžadováno alespoň jedno z následujících oprávnění tokenu:
- Logs Write
Vytvořit úlohu Logpush
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/logpush/jobs" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "<DOMAIN_NAME>",
"destination_conf": "s3://<BUCKET_PATH>?region=us-east-1",
"dataset": "http_requests",
"output_options": {
"field_names": [
"ClientIP",
"ClientRequestHost",
"ClientRequestMethod",
"ClientRequestURI",
"EdgeStartTimestamp",
"EdgeResponseStatus",
"RayID",
"ParentRayID",
"Subrequests"
],
"timestamp_format": "rfc3339"
},
"merge_subrequests": true,
"enabled": true
}'Chcete-li povolit slučování dílčích požadavků u stávající úlohy:
Aktualizace úlohy Logpush
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/logpush/jobs/$JOB_ID" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"merge_subrequests": true
}'Příklad výstupu protokolu
Bez slučování dílčích požadavků vytvoří Worker, který provede jeden dílčí požadavek, dva samostatné záznamy protokolu:
{"RayID":"abc123","ParentRayID":"","ClientIP":"203.0.113.1","EdgeResponseStatus":200, ...}
{"RayID":"def456","ParentRayID":"abc123","ClientIP":"203.0.113.1","EdgeResponseStatus":200, ...}Když je slučování dílčích požadavků povoleno, vytvoří se jediný záznam s vnořeným dílčím požadavkem:
{
"RayID": "abc123",
"ParentRayID": "",
"ClientIP": "203.0.113.1",
"EdgeResponseStatus": 200,
"Subrequests": [
{
"RayID": "def456",
"ClientIP": "203.0.113.1",
"EdgeResponseStatus": 200
}
]
}