Network Error Logging reports browsers sent
Failed requests to the organization's sites, from Network Error Logging reports.
A site that sends the Report-To and NEL headers gets a report from a
Chromium browser for every request that failed, including pages that never
loaded and so never ran the tracker. The answer counts them over the
window, per bucket, per error type, per HTTP status code and per host and
path.
Beside each count stands affected_visitors, the distinct visitors behind
it, and per error type the percentiles of the time until the failure. A
visitor is a non-zero stitch, so only sites with store_stitch count
them, and meta.stitchless_site_ids names the sites that do not.
Every count is weighted by 1 / sampling_fraction, the share of failures
the site's NEL header asks browsers to report. meta.sampling describes
that failure sampling and not the application's rate: is_sampled is true
when a report of the window was sampled below 1.0, and estimated_metrics
then names the weighted fields. A status code of 0 means the request got no
HTTP response.
Filters: the site scope, stitch, the report's own report_id,
error_type, nel_class, status_code_range, host, path and
page_url, and the edge-derived
dimensions (country, asn, device_type, browser, os, bot_class,
is_bot, is_datacenter, bot_name, bot_type, datacenter,
ua_anomaly). exclude takes error_type, nel_class, host,
path, page_url and the eight edge labels. Any other filter is a 422 naming it, since an
empty answer would read as "no errors". An entry of paths is a host
and a path value that together match exactly it. Without an
error_type filter every type counts, abandoned included: a visitor who left while a
request loaded, which every site has. exclude: {"error_type": ["abandoned"]}
leaves it out of every count and the path list. nel_class has
no default either.
bearerAuthAuthentifizierungBearer <token>API token generated from the fastmon dashboard (Account → API Token) or at organization level (fmo_…, one that outlives its creator). Send as Authorization: Bearer fm_... or paste the full token (including its prefix) into the Authorize dialog.
org_id*Org Iduuidapplication/json- body
Request for the Network Error Logging reports of the organization's sites.
time_range*Time range, on the time the browser saw the error
filters?Optional filters. The site scope, stitch and the edge-derived dimensions are accepted, because a report carries those and no page or metric. Anything else is a 422 naming it under its own path, since an empty answer would read as 'no errors'.
granularity?GranularityRequestBucket size of the series: 'minute' (windows up to 6h), 'hour', 'day', or 'auto' (default; <=48h windows give hourly, longer daily).
"auto""auto""minute""hour""day"limit?LimitMax entries in paths
1 <= value <= 20050Successful Response
application/json- response
The NEL reports of the organization's sites, as browsers sent them.
Every count is weighted by the report's sampling_fraction, the share of
failures the site's NEL header asks the browser to report. meta.sampling
describes that failure sampling, not the application's rate.
meta*Facts about the result
request*The request as the server resolved it
error_count*Error CountWeighted reports in the window
affected_visitors?Affected VisitorsDistinct visitors behind the reports of the window, each once however many buckets it appears in. Counted unweighted over the non-zero stitch, so it is exact with a failure_fraction of 1 in the site's NEL header and a lower bound below it. Only sites with store_stitch carry a stitch, and a report that came without a valid stitch is left out. The stitch salt rotates daily and on every edge restart, so a report uploaded after a rotation loses its visitor. Only Chromium browsers report. Absent when no site in scope stores a stitch
errors_by_error_type*The browser's error type to weighted reports in the window
elapsed_by_error_type*The browser's error type to the percentiles of its elapsed time in the window, unweighted as every percentile is. A report with an elapsed time of 0 is left out, since 0 stands for both an invalid and a zero time, and a type without a report above 0 has no entry
errors_by_status_code*HTTP status code to weighted reports in the window, 0 for a request that got no HTTP response
series*array<>One point per bucket with at least one report. A bucket with none is absent rather than zero-filled, as in /analytics/query.
paths*array<>The limit pairs of host and path with the most weighted reports, most first. The same path on two hosts is two entries
curl -X POST 'https://api.fastmon.eu/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/analytics/nel' \ -H 'Content-Type: application/json' \ -d '{ "time_range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" }}'{ "meta": { "execution_time_ms": 0, "total": 0, "limit": 0, "offset": 0, "has_more": true, "next_cursor": "string", "sampling": { "sampling_rate": 0, "is_sampled": true, "estimated_metrics": [ "string" ] }, "is_identity_mixed": true, "stitchless_site_ids": [ "69469e5a-8ce7-4bbc-8031-8525fff71fc6" ] }, "request": { "time_range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" }, "comparison_time_range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" }, "granularity": "minute", "identity": "stitch", "window_seconds": 0, "filters": {} }, "error_count": 0, "affected_visitors": 0, "errors_by_error_type": { "property1": 0, "property2": 0 }, "elapsed_by_error_type": { "property1": { "p50_ms": 0, "p75_ms": 0, "p95_ms": 0 }, "property2": { "p50_ms": 0, "p75_ms": 0, "p95_ms": 0 } }, "errors_by_status_code": { "property1": 0, "property2": 0 }, "series": [ { "timestamp": "2019-08-24T14:15:22Z", "error_count": 0, "errors_by_error_type": { "property1": 0, "property2": 0 }, "errors_by_status_code": { "property1": 0, "property2": 0 }, "affected_visitors": 0 } ], "paths": [ { "host": "string", "path": "string", "error_count": 0, "errors_by_status_code": { "property1": 0, "property2": 0 }, "affected_visitors": 0 } ]}