Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)
    1. Docs
    2. /Deployment
    3. /Monitoring & Analytics

    Updated Jun 22, 20265 min listen

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Docs
    2. /Deployment
    3. /Monitoring & Analytics

    Updated Jun 22, 20265 min listen

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Docs
    2. /Deployment
    3. /Monitoring & Analytics

    Updated Jun 22, 20265 min listen

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Monitoring & Analytics

    Filter with Founder / Developer in the docs sidebar. This page replaces legacy fiction (PostHog/Mixpanel stacks, fabricated ROI, invented apiMonitor classes). Monitoring truth lives in app/api/health, app/api/analytics/*, lib/logger.ts, and the admin analytics UI.

    Ring Platform ships first-party telemetry into PostgreSQL JSONB tables, a container-friendly health endpoint, and structured server logs. External APM (Sentry, Vercel Analytics) is optional via env vars — not required for core operation.

    Monitoring layers (what actually exists)

    LayerMechanismPrimary signal
    LivenessGET /api/health (+ HEAD)Process up, env warnings, memory
    UX performanceWebVitalsProvider → POST /api/analytics/web-vitalsLCP, CLS, INP, TTFB, FCP
    Product eventsapp-analytics.js → POST /api/analytics/appSessions, page loads, custom events
    Client errorsPOST /api/analytics/errorsStack traces, component, severity
    Admin dashboard/admin/analyticsAggregates via getPlatformAnalytics()
    Realtime connectivity/api/tunnel/ping, /api/tunnel/heartbeatTunnel latency / session health
    Server logslib/logger.tsJSON lines to stdout (LOG_LEVEL)
    Optional infraDocker profile monitoringPrometheus + Grafana (local dev only)

    Why operators should monitor

    A Ring clone combines auth, marketplace data, payments, and realtime notifications. Silent failure shows up as “the site loads but orders don’t sync” — not as a red error page.

    What to watch without reading code

    Health endpoint

    Probe GET /api/health from your load balancer or uptime checker — 503 means degraded (often missing AUTH_SECRET).

    Admin analytics

    Platform admins open Admin → Analytics for user counts, Web Vitals medians, and recent client errors (7-day window).

    Backup correlation

    Monitoring tells you things broke; backups tell you you can restore.

    Architecture

    First-party analytics ingest

    Health check — app/api/health/route.ts

    Returns JSON: status (healthy | degraded | unhealthy), uptime, memory, inferred services.database (postgresql vs firebase), optional Docker container block. Missing AUTH_SECRET → degraded + HTTP 503.

    Used by Dockerfile / docker-compose.yml healthchecks and optional Prometheus scrape config (see caveat below).

    Analytics API surface

    RouteMethodAuthPersists to
    /api/analytics/web-vitalsPOSTOptional sessionweb_vitals
    /api/analytics/web-vitalsGETAdminQuery or summary

    Related documentation

    Backup & recovery

    Restore after incidents detected here.

    Performance optimization

    Next stale cohort doc — React 19 and Web Vitals tuning.

    Environment configuration

    CRON_SECRET, LOG_LEVEL, optional Sentry.

    Realtime transport

    Tunnel transports and heartbeat behavior.

    Monitoring & Analytics

    Filter with Founder / Developer in the docs sidebar. This page replaces legacy fiction (PostHog/Mixpanel stacks, fabricated ROI, invented apiMonitor classes). Monitoring truth lives in app/api/health, app/api/analytics/*, lib/logger.ts, and the admin analytics UI.

    Ring Platform ships first-party telemetry into PostgreSQL JSONB tables, a container-friendly health endpoint, and structured server logs. External APM (Sentry, Vercel Analytics) is optional via env vars — not required for core operation.

    Monitoring layers (what actually exists)

    LayerMechanismPrimary signal
    LivenessGET /api/health (+ HEAD)Process up, env warnings, memory
    UX performanceWebVitalsProvider → POST /api/analytics/web-vitalsLCP, CLS, INP, TTFB, FCP
    Product eventsapp-analytics.js → POST /api/analytics/appSessions, page loads, custom events
    Client errorsPOST /api/analytics/errorsStack traces, component, severity
    Admin dashboard/admin/analyticsAggregates via getPlatformAnalytics()
    Realtime connectivity/api/tunnel/ping, /api/tunnel/heartbeatTunnel latency / session health
    Server logslib/logger.tsJSON lines to stdout (LOG_LEVEL)
    Optional infraDocker profile monitoringPrometheus + Grafana (local dev only)

    Why operators should monitor

    A Ring clone combines auth, marketplace data, payments, and realtime notifications. Silent failure shows up as “the site loads but orders don’t sync” — not as a red error page.

    What to watch without reading code

    Health endpoint

    Probe GET /api/health from your load balancer or uptime checker — 503 means degraded (often missing AUTH_SECRET).

    Admin analytics

    Platform admins open Admin → Analytics for user counts, Web Vitals medians, and recent client errors (7-day window).

    Backup correlation

    Monitoring tells you things broke; backups tell you you can restore.

    Architecture

    First-party analytics ingest

    Health check — app/api/health/route.ts

    Returns JSON: status (healthy | degraded | unhealthy), uptime, memory, inferred services.database (postgresql vs firebase), optional Docker container block. Missing AUTH_SECRET → degraded + HTTP 503.

    Used by Dockerfile / docker-compose.yml healthchecks and optional Prometheus scrape config (see caveat below).

    Analytics API surface

    RouteMethodAuthPersists to
    /api/analytics/web-vitalsPOSTOptional sessionweb_vitals
    /api/analytics/web-vitalsGETAdminQuery or summary

    Related documentation

    Backup & recovery

    Restore after incidents detected here.

    Performance optimization

    Next stale cohort doc — React 19 and Web Vitals tuning.

    Environment configuration

    CRON_SECRET, LOG_LEVEL, optional Sentry.

    Realtime transport

    Tunnel transports and heartbeat behavior.

    Monitoring & Analytics

    Filter with Founder / Developer in the docs sidebar. This page replaces legacy fiction (PostHog/Mixpanel stacks, fabricated ROI, invented apiMonitor classes). Monitoring truth lives in app/api/health, app/api/analytics/*, lib/logger.ts, and the admin analytics UI.

    Ring Platform ships first-party telemetry into PostgreSQL JSONB tables, a container-friendly health endpoint, and structured server logs. External APM (Sentry, Vercel Analytics) is optional via env vars — not required for core operation.

    Monitoring layers (what actually exists)

    LayerMechanismPrimary signal
    LivenessGET /api/health (+ HEAD)Process up, env warnings, memory
    UX performanceWebVitalsProvider → POST /api/analytics/web-vitalsLCP, CLS, INP, TTFB, FCP
    Product eventsapp-analytics.js → POST /api/analytics/appSessions, page loads, custom events
    Client errorsPOST /api/analytics/errorsStack traces, component, severity
    Admin dashboard/admin/analyticsAggregates via getPlatformAnalytics()
    Realtime connectivity/api/tunnel/ping, /api/tunnel/heartbeatTunnel latency / session health
    Server logslib/logger.tsJSON lines to stdout (LOG_LEVEL)
    Optional infraDocker profile monitoringPrometheus + Grafana (local dev only)

    Why operators should monitor

    A Ring clone combines auth, marketplace data, payments, and realtime notifications. Silent failure shows up as “the site loads but orders don’t sync” — not as a red error page.

    What to watch without reading code

    Health endpoint

    Probe GET /api/health from your load balancer or uptime checker — 503 means degraded (often missing AUTH_SECRET).

    Admin analytics

    Platform admins open Admin → Analytics for user counts, Web Vitals medians, and recent client errors (7-day window).

    Backup correlation

    Monitoring tells you things broke; backups tell you you can restore.

    Architecture

    First-party analytics ingest

    Health check — app/api/health/route.ts

    Returns JSON: status (healthy | degraded | unhealthy), uptime, memory, inferred services.database (postgresql vs firebase), optional Docker container block. Missing AUTH_SECRET → degraded + HTTP 503.

    Used by Dockerfile / docker-compose.yml healthchecks and optional Prometheus scrape config (see caveat below).

    Analytics API surface

    RouteMethodAuthPersists to
    /api/analytics/web-vitalsPOSTOptional sessionweb_vitals
    /api/analytics/web-vitalsGETAdminQuery or summary

    Related documentation

    Backup & recovery

    Restore after incidents detected here.

    Performance optimization

    Next stale cohort doc — React 19 and Web Vitals tuning.

    Environment configuration

    CRON_SECRET, LOG_LEVEL, optional Sentry.

    Realtime transport

    Tunnel transports and heartbeat behavior.

    when
    what

    Email CRM cron

    Production inboxes rely on POST /api/cron/email-processor — alert if cron stops firing.

    Typical alert scenarios

    • Health flips to degraded — missing critical env after deploy; check secrets before blaming Postgres.
    • Web Vitals poor ratings climb — CDN, image weight, or SSR regression; correlate with a release tag (BUILD_DATE / GIT_COMMIT on health JSON when set).
    • Spike in analytics_errors — broken client bundle or third-party script; admin dashboard lists recent messages.
    • Tunnel disconnect storms — see Realtime transport; often edge/WSS config, not database.

    Define who gets paged (operator vs developer) and what “down” means for your clone — Ring OSS does not ship PagerDuty wiring; you attach health checks to your provider.

    web_vitals
    ?scope=platform
    /api/analytics/appPOSTOptional sessionanalytics_events
    /api/analytics/errorsPOSTOptional sessionanalytics_errors
    /api/analytics/errorsGETAdminList errors
    /api/analytics/devicePOSTSession requireduser_device_telemetry
    /api/analytics/platform-statsGETAdminCounts: users, entities, opportunities

    Implementation: features/analytics/lib/analytics-db.ts. Client collector: lib/web-vitals.tsx (uses web-vitals package — INP replaces FID).

    Database tables

    Included in data/schema.sql and migration 017_ring_analytics_schema.sql:

    • analytics_events — batched client telemetry
    • web_vitals — Core Web Vitals batches
    • analytics_errors — client-side error log

    Apply on postgres-primary clones per Database migrations.

    Disable storage (privacy / load testing)

    When set, ingest routes acknowledge payloads but skip DatabaseService writes (isAnalyticsStorageDisabled()).

    Structured logging

    Env: LOG_LEVEL (debug | info | warn | error, default info in production), LOG_SILENT=true to mute. Logs are JSON to stdout — ship with your cluster log agent (not built into Ring).

    Optional external APM

    Commented/optional in env.local.template / docker.env.template:

    • SENTRY_DSN — wire via your Sentry Next.js integration (not auto-enabled in repo)
    • NEXT_PUBLIC_ANALYTICS_ID, VERCEL_ANALYTICS_ID — Vercel-hosted clones only

    Realtime probes

    RoutePurpose
    POST /api/tunnel/pingAuthenticated pong + timestamp
    POST /api/tunnel/heartbeatConnection keep-alive

    See Tunnel protocol.

    Cron / pipeline monitoring

    Cron routes (/api/cron/*) fail closed without CRON_SECRET. Example: GET /api/cron/email-analytics runs ProcessConductor pipeline email-analytics. Monitor HTTP 401 vs 200 from your scheduler.

    Optional Docker Prometheus + Grafana

    Services: ring-prometheus (:9090), ring-grafana (:3001). Config: docker/prometheus/prometheus.yml.

    Prometheus config caveat

    The bundled Prometheus job references /api/metrics, which is not implemented in this tree, and scrapes /api/health as JSON (not Prometheus exposition format). Treat the profile as a starting scaffold — add a real metrics exporter or fix scrape targets before production use.

    Admin UI entrypoint

    Server page: app/[locale]/admin/analytics/page.tsx — requires isPlatformAdmin, loads getPlatformAnalytics('7d').

    Admin API

    Additional admin endpoints (verify against live routes before relying on legacy API doc examples).

    when
    what

    Email CRM cron

    Production inboxes rely on POST /api/cron/email-processor — alert if cron stops firing.

    Typical alert scenarios

    • Health flips to degraded — missing critical env after deploy; check secrets before blaming Postgres.
    • Web Vitals poor ratings climb — CDN, image weight, or SSR regression; correlate with a release tag (BUILD_DATE / GIT_COMMIT on health JSON when set).
    • Spike in analytics_errors — broken client bundle or third-party script; admin dashboard lists recent messages.
    • Tunnel disconnect storms — see Realtime transport; often edge/WSS config, not database.

    Define who gets paged (operator vs developer) and what “down” means for your clone — Ring OSS does not ship PagerDuty wiring; you attach health checks to your provider.

    web_vitals
    ?scope=platform
    /api/analytics/appPOSTOptional sessionanalytics_events
    /api/analytics/errorsPOSTOptional sessionanalytics_errors
    /api/analytics/errorsGETAdminList errors
    /api/analytics/devicePOSTSession requireduser_device_telemetry
    /api/analytics/platform-statsGETAdminCounts: users, entities, opportunities

    Implementation: features/analytics/lib/analytics-db.ts. Client collector: lib/web-vitals.tsx (uses web-vitals package — INP replaces FID).

    Database tables

    Included in data/schema.sql and migration 017_ring_analytics_schema.sql:

    • analytics_events — batched client telemetry
    • web_vitals — Core Web Vitals batches
    • analytics_errors — client-side error log

    Apply on postgres-primary clones per Database migrations.

    Disable storage (privacy / load testing)

    When set, ingest routes acknowledge payloads but skip DatabaseService writes (isAnalyticsStorageDisabled()).

    Structured logging

    Env: LOG_LEVEL (debug | info | warn | error, default info in production), LOG_SILENT=true to mute. Logs are JSON to stdout — ship with your cluster log agent (not built into Ring).

    Optional external APM

    Commented/optional in env.local.template / docker.env.template:

    • SENTRY_DSN — wire via your Sentry Next.js integration (not auto-enabled in repo)
    • NEXT_PUBLIC_ANALYTICS_ID, VERCEL_ANALYTICS_ID — Vercel-hosted clones only

    Realtime probes

    RoutePurpose
    POST /api/tunnel/pingAuthenticated pong + timestamp
    POST /api/tunnel/heartbeatConnection keep-alive

    See Tunnel protocol.

    Cron / pipeline monitoring

    Cron routes (/api/cron/*) fail closed without CRON_SECRET. Example: GET /api/cron/email-analytics runs ProcessConductor pipeline email-analytics. Monitor HTTP 401 vs 200 from your scheduler.

    Optional Docker Prometheus + Grafana

    Services: ring-prometheus (:9090), ring-grafana (:3001). Config: docker/prometheus/prometheus.yml.

    Prometheus config caveat

    The bundled Prometheus job references /api/metrics, which is not implemented in this tree, and scrapes /api/health as JSON (not Prometheus exposition format). Treat the profile as a starting scaffold — add a real metrics exporter or fix scrape targets before production use.

    Admin UI entrypoint

    Server page: app/[locale]/admin/analytics/page.tsx — requires isPlatformAdmin, loads getPlatformAnalytics('7d').

    Admin API

    Additional admin endpoints (verify against live routes before relying on legacy API doc examples).

    when
    what

    Email CRM cron

    Production inboxes rely on POST /api/cron/email-processor — alert if cron stops firing.

    Typical alert scenarios

    • Health flips to degraded — missing critical env after deploy; check secrets before blaming Postgres.
    • Web Vitals poor ratings climb — CDN, image weight, or SSR regression; correlate with a release tag (BUILD_DATE / GIT_COMMIT on health JSON when set).
    • Spike in analytics_errors — broken client bundle or third-party script; admin dashboard lists recent messages.
    • Tunnel disconnect storms — see Realtime transport; often edge/WSS config, not database.

    Define who gets paged (operator vs developer) and what “down” means for your clone — Ring OSS does not ship PagerDuty wiring; you attach health checks to your provider.

    web_vitals
    ?scope=platform
    /api/analytics/appPOSTOptional sessionanalytics_events
    /api/analytics/errorsPOSTOptional sessionanalytics_errors
    /api/analytics/errorsGETAdminList errors
    /api/analytics/devicePOSTSession requireduser_device_telemetry
    /api/analytics/platform-statsGETAdminCounts: users, entities, opportunities

    Implementation: features/analytics/lib/analytics-db.ts. Client collector: lib/web-vitals.tsx (uses web-vitals package — INP replaces FID).

    Database tables

    Included in data/schema.sql and migration 017_ring_analytics_schema.sql:

    • analytics_events — batched client telemetry
    • web_vitals — Core Web Vitals batches
    • analytics_errors — client-side error log

    Apply on postgres-primary clones per Database migrations.

    Disable storage (privacy / load testing)

    When set, ingest routes acknowledge payloads but skip DatabaseService writes (isAnalyticsStorageDisabled()).

    Structured logging

    Env: LOG_LEVEL (debug | info | warn | error, default info in production), LOG_SILENT=true to mute. Logs are JSON to stdout — ship with your cluster log agent (not built into Ring).

    Optional external APM

    Commented/optional in env.local.template / docker.env.template:

    • SENTRY_DSN — wire via your Sentry Next.js integration (not auto-enabled in repo)
    • NEXT_PUBLIC_ANALYTICS_ID, VERCEL_ANALYTICS_ID — Vercel-hosted clones only

    Realtime probes

    RoutePurpose
    POST /api/tunnel/pingAuthenticated pong + timestamp
    POST /api/tunnel/heartbeatConnection keep-alive

    See Tunnel protocol.

    Cron / pipeline monitoring

    Cron routes (/api/cron/*) fail closed without CRON_SECRET. Example: GET /api/cron/email-analytics runs ProcessConductor pipeline email-analytics. Monitor HTTP 401 vs 200 from your scheduler.

    Optional Docker Prometheus + Grafana

    Services: ring-prometheus (:9090), ring-grafana (:3001). Config: docker/prometheus/prometheus.yml.

    Prometheus config caveat

    The bundled Prometheus job references /api/metrics, which is not implemented in this tree, and scrapes /api/health as JSON (not Prometheus exposition format). Treat the profile as a starting scaffold — add a real metrics exporter or fix scrape targets before production use.

    Admin UI entrypoint

    Server page: app/[locale]/admin/analytics/page.tsx — requires isPlatformAdmin, loads getPlatformAnalytics('7d').

    Admin API

    Additional admin endpoints (verify against live routes before relying on legacy API doc examples).