Telemetry architecture
| System | Traces | Browser RUM | Logs | Metrics | Synthetic checks |
|---|---|---|---|---|---|
| Next.js | Every request (sample rate set to 1; the design default is 20%, with errors and requests over 3 s always kept); emails and ids redacted | 20% of sessions | Acquia only | Heap, garbage collection, event loop, load shedding, per server | Origin check past Cloudflare, plus home, blog and the account host through Cloudflare, every 5 minutes from 3 locations; sitemap hourly; smoke test after each deploy |
| Drupal | Every request (sample rate set to 1; the design default is 1%, with errors and slow requests always kept) | n/a | Acquia only | Purge queue, dead letters, overdue purges, export failures | Delivery API through the cache and from PHP and MySQL, every 5 minutes from 2 locations |
| Cloudflare | n/a | n/a | Not exported | Requests, cache status, origin status by host | None |
| Finder | 20% sample, across both services | n/a | Errors, 5xx, slow and a 5% sample, kept 30 days; full archive in S3 for a year | Hosts, load balancers, Lambdas, pipeline lag | Health and search box for each API, every 5 minutes from 2 locations; 200 within 2 s |
| PADI APIs | Client-side spans from Next.js | PADI-owned checks for sign-in and eLearning |
SLI catalogue
| # | Journey or service | SLI (good events ÷ valid events) | Data source | SLO |
|---|---|---|---|---|
| 1 | Page availability | HTML responses without 5xx ÷ all HTML requests, per host | Cloudflare metrics | 99.9% |
| 2 | Page latency at the edge | HTML first byte < 500 ms ÷ all HTML | Synthetic checks | 99% of 5-minute windows |
| 3 | Origin render latency | 5-minute windows with p95 < 3 s | Frontend APM | 99% of windows |
| 4 | Frontend application availability | Requests without 5xx ÷ requests (5xx answered at the edge count under 1) | Frontend APM | 99.9% |
| 5 | Largest Contentful Paint | Initial page loads with LCP ≤ 2.5 s ÷ initial page loads | RUM | 75% |
| 6 | Content freshness | Tagged changes visible ≤ 8 min ÷ change canaries | Purge metrics and canaries | 99% |
| 7 | Purge pipeline | Items purged within 6 min ÷ items queued | Purge metrics | 99.9% |
| 8 | Drupal delivery API availability | Requests without error ÷ requests | Drupal APM | 99.9% |
| 9 | Drupal delivery API latency | 5-minute windows with p95 < 3 s | Drupal APM | 95% of windows |
| 10 | Finder API availability | Non-5xx ÷ requests, per API | Finder APM | 99.9% |
| 11 | Finder API latency | 5-minute windows with p95 < 500 ms | Finder APM | 99% of windows |
| 12 | Finder data freshness | Changes reaching search < 10 min ÷ changes | Pipeline metrics | 99% |
| 13 | Sign-in to MyPADI | Dashboards loaded < 10 s ÷ sign-ins | Frontend and PADI API spans | 95% (depends on PADI APIs) |
| 14 | Account sign-in | Sign-in check success | PADI synthetic checks | 99.5% |
| 15 | Edge Worker health | Invocations without exception ÷ invocations | Cloudflare Workers metrics | 99.9% |
| 16 | Uptime of www and CMS | Synthetic success from 2+ locations | Synthetic checks | 99.9% |
SLOs 4, 5 and 8 to 11 are live in Datadog, measured over 30 and 7 days. Cache hit ratio is a health indicator rather than an SLO: alert below 25%.
Monitors and dashboards
Monitors, SLOs, synthetic checks and dashboards are Terraform in the repository whose code produces the signal: padi.com for the frontend, drupal.padi.com for Drupal and its purge job, and search.padi.com for the finder. edge.padi.com applies the Cloudflare monitors and the cross-layer dashboard by script.
| Area | Monitors |
|---|---|
| Frontend | No server reporting; no requests traced for 15 min; 5xx over 1% per route; more than 5% of requests taking 3 s or more; a server shedding load for 5 min; calls to PADI APIs failing over 5%; pages failing to render in the browser |
| Drupal | Delivery API p95 over 3 s; delivery API errors over 5%; no requests traced for 15 min; more than 50 errors logged in 15 min; cron not run for 3 h; trace exports failing; more than one promoted page; purge job stopped; dead letters; purge queue backing up; overdue purges; whole-site refresh waiting too long; Varnish purges failing |
| Edge | Origin 5xx over 1% per host; analytics poller stopped |
| Finder | API p95 over 500 ms; 5xx over 5%; host memory below 15% and root disk above 85%; pipeline Lambda failures, timeouts and out-of-memory; change stream more than 10 min behind; a change late reaching FinderDB or its documents, or not applied; a column meant to be withheld arriving from PADI Travel; a listed key waiting more than 10 min; index disagrees with FinderDB |
For the frontend, the monitors read together: a failing origin check means the application is down; no server reporting while the check passes means telemetry has stopped; servers reporting with no requests traced means the application is stuck or its trace export has failed.
Dashboards: padi-frontend (requests, calls out, servers, browser), Drupal prod, padi.com edge cache and origin health (traffic, cache, origin, purge across the layers), and finder overview, search and locator.