INTEGRITY Dokumentace

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:

Požadavek na origin : požadavek přeposlaný z Cloudflare na váš origin server:

Dílčí požadavek Workeru : volání fetch odeslané Workerem:

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í

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

  1. 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 ↗
  2. Vyberte Vytvořit úlohu Logpush, nebo vyberte Upravit vedle existující úlohy http_requests.
  3. V části Advanced Options povolte přepínač Subrequest merging.
  4. Vyberte Uložit.

API

  1. 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:

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
    }
  ]
}