fastmon Docs
Analytics

Network Error Logging reports browsers sent

Fehler melden

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.

Authentifizierung

bearerAuth
headerAuthentifizierungBearer <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.

Pfad-Parameter

org_id*Org Id
Formatuuid

Request-Body

application/json
  1. 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?GranularityRequest

Bucket size of the series: 'minute' (windows up to 6h), 'hour', 'day', or 'auto' (default; <=48h windows give hourly, longer daily).

Default"auto"
Value in"auto""minute""hour""day"
limit?Limit

Max entries in paths

Range1 <= value <= 200
Default50

Response-Body

Successful Response

application/json
  1. 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 Count

Weighted reports in the window

affected_visitors?Affected Visitors

Distinct 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

POST
/organizations/{org_id}/analytics/nel
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    }  ]}