Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: OpenID Connect / OAuth client 3.0.0-alpha9 New alpha version released for module openid_connect (3.0.0-alpha9). Usage Milestone: Google Analytics Module google_analytics crossed 1,000 active installs. Release: Timelinr 1.0.1 Minor update available for module timelinr (1.0.1). Release: GraphQL Compose Codegen 1.1.2 Minor update available for module graphql_compose_codegen (1.1.2). Release: Mapy.com 1.1.3 Minor update available for module mapycom (1.1.3). Release: Ckeditor5 entity browser 3.0.3 Minor update available for module ckeditor5_entity_browser (3.0.3). Release: Ckeditor5 entity browser 3.0.1 Minor update available for module ckeditor5_entity_browser (3.0.1). Release: Ckeditor5 entity browser 3.0.2 Minor update available for module ckeditor5_entity_browser (3.0.2). Release: Teamleader Integration 4.0.2 Minor update available for module teamleader (4.0.2). Module Revived: Entityqueue Buttons 1.1.2 Module entityqueue_buttons updated after 8 months of inactivity (1.1.2).

Content Telemetry & Performance Insights

3 sites Security covered Drupal 10–11
View on drupal.org

This module provides performance insights for your Drupal site by tracking request-level data. It analyzes metrics like render and database time, cache performance, and entity metadata, offering a detailed overview of your site's health through an administrative interface. The data is stored internally and helps identify performance bottlenecks without external services or user tracking.

Content Telemetry & Performance Insights (CTPI) gives you always-on,
request-level performance telemetry for your Drupal site — with no external services,
no JavaScript trackers, no PII, and no ongoing costs. All data stays inside your
database.

What it does

CTPI instruments every page request at the PHP level. It records render time, DB time,
cache-hit ratio, and entity metadata, then aggregates that data hourly and daily via
Drupal cron. From those aggregates it derives deterministic, rule-based performance
insights and surfaces them in a purpose-built admin UI.

Reports and UI

  • Dashboard (admin/reports/content-telemetry) — site-wide
    health score (0–100), per-entity health badges, trend pill indicators
    (↑ Rising / ↑ Critical / → Stable), and an insight panel.
  • Per-node performance tab (/node/{id}/performance) —
    24-hour sparkline chart, health score badge, metric tiles (avg render, max render,
    avg DB time, cache-hit ratio), and a full insight panel per node.
  • Route performance report — all tracked routes with mini sparklines,
    status badges, avg/max render times, and drilldown links.
  • Route drilldown — full 24-hour sparkline, baseline comparison, and
    insights for a single route.
  • Views performance report — all tracked Views displays with render
    metrics and edit links.
  • View drilldown — block-level breakdown showing each block's share of
    the view's render time.
  • Block performance report — all tracked blocks with human-readable
    names, type labels, CRC32 IDs, and render metrics.
  • View performance tab (Structure → Views) — sparkline and render stats
    inline in the Views admin UI.
  • Block performance tab (Structure → Block layout) — per-block
    performance metrics.
  • Settings form (admin/config/system/content-telemetry) —
    configure sampling rate, force-sample toggle, render budget, and all insight-rule
    thresholds.

Insight engine

Six deterministic rules fire when data thresholds are crossed (all thresholds are
configurable):

  • PerformanceBudgetRule — avg render ≥ configured budget (warn); ≥ 2× budget (critical)
  • HighDbRatioRule — DB time as a % of total render exceeds threshold
  • LowCacheHitRule — cache-hit ratio below threshold
  • RegressionRule — 24h avg render has increased vs. 7-day baseline by more than the configured %
  • HeavyBlockDominanceRule — a single block accounts for more than 30% of page render time
  • GlobalSlowBlockRule — a block is slow (avg > 500 ms) across 3 or more routes

Each insight carries a severity (warn or poor) and contributes to a
health score. The score deducts 15 points per warn and 30 points per poor, clamped at 0.
Labels: Good (80–100) · Needs attention (50–79) ·
Critical (0–49).

JSON Insight API

Two JSON endpoints are available to authenticated users with the
view content telemetry permission:

  • GET /api/content-telemetry/insights/{entity_type}/{entity_id}
  • GET /api/content-telemetry/insights/dashboard

Responses carry Cache-Control: no-store, private and include
health_score, health_label, insight_count, and
a full insights array. Useful for monitoring scripts and CI health checks.

Data model

  • Three database tables: raw hourly samples, hourly aggregates, daily aggregates.
  • All reporting reads from aggregate tables — never from the raw table.
  • Raw data retention: 14 days.
  • Aggregation runs via Drupal cron (hourly rollup, daily rollup).
  • Insert-only raw table — no locks, no runtime aggregation.

Requirements

  • Drupal 10 or 11
  • PHP 8.1+
  • Core modules: Node, Views, System

Installation

composer require drupal/content_telemetry
drush en content_telemetry -y
drush updb -y
drush cr

Set sampling rate to 100% and enable force sample at
admin/config/system/content-telemetry for local testing. In production,
leave the default 5% sampling rate to minimise overhead.

Code quality

120 tests / 285 assertions · PHPStan Level 6 · PHPCS Drupal +
DrupalPractice · GitLab CI pipeline on every push · strict types throughout ·
zero deprecation warnings.

Depends on

Dependencies of the latest stable release

  • node Drupal core
  • system Drupal core
  • views Drupal core

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
10
Tracked since
Feb 2026
Latest release
3 months ago
Releases (12 mo)
10 ▲ from 0
Maintenance
Active

Release Timeline

Releases

Version Type Core Release date
1.1.3 Stable 10–11 May 28, 2026
1.1.2 Stable 10–11 Apr 6, 2026
1.1.0 Stable 10–11 Apr 6, 2026
1.0.0 Stable 10–11 Feb 13, 2026
1.0.0-beta3 Pre-release 10–11 Feb 12, 2026
1.0.0-beta2 Pre-release 10–11 Feb 12, 2026
1.0.0-beta1 Pre-release 10–11 Feb 11, 2026
1.0.0-alpha3 Pre-release 10–11 Feb 10, 2026
1.0.0-alpha2 Pre-release 10–11 Feb 10, 2026
1.0.0-alpha1 Pre-release 10–11 Feb 10, 2026