/* using Svrnty.CQRS.Events.Subscriptions; using Svrnty.CQRS.Events.Abstractions.Models; * EXAMPLE: OpenTelemetry Integration with Prometheus Exporter * * This file demonstrates how to integrate Svrnty.CQRS.Events metrics * with OpenTelemetry and expose them via Prometheus endpoint. * * INSTALLATION: * * dotnet add package OpenTelemetry.Extensions.Hosting * dotnet add package OpenTelemetry.Instrumentation.AspNetCore * dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore --prerelease * * USAGE in Program.cs: */ #if FALSE // This is example code, not compiled using OpenTelemetry.Metrics; var builder = WebApplication.CreateBuilder(args); // Register event streaming with metrics builder.Services.AddSvrntyEvents(); builder.Services.AddEventStreamMetrics(); // Phase 6: Add metrics collection // Configure OpenTelemetry with Prometheus exporter builder.Services.AddOpenTelemetry() .WithMetrics(metrics => metrics // Add ASP.NET Core instrumentation .AddAspNetCoreInstrumentation() // Add Svrnty.CQRS.Events metrics .AddMeter("Svrnty.CQRS.Events") // Export to Prometheus (scraping endpoint) .AddPrometheusExporter()); var app = builder.Build(); // Map Prometheus scraping endpoint at /metrics app.MapPrometheusScrapingEndpoint(); // ... rest of your configuration app.Run(); /* * PROMETHEUS CONFIGURATION (prometheus.yml): * * scrape_configs: * - job_name: 'svrnty-cqrs-events' * scrape_interval: 5s * static_configs: * - targets: ['localhost:6001'] * * AVAILABLE METRICS: * * Counters (cumulative): * - svrnty_cqrs_events_published_total{stream="UserWorkflow",event_type="UserAddedEvent"} * - svrnty_cqrs_events_consumed_total{stream="UserWorkflow",subscription="user-analytics",event_type="UserAddedEvent"} * - svrnty_cqrs_events_errors_total{stream="UserWorkflow",subscription="...",error_type="ValidationError"} * - svrnty_cqrs_events_retries_total{stream="UserWorkflow",subscription="...",attempt="1"} * * Histograms (distributions): * - svrnty_cqrs_events_processing_latency_milliseconds{stream="UserWorkflow",subscription="..."} * - _bucket{le="10"} * - _bucket{le="50"} * - _bucket{le="100"} * - _bucket{le="500"} * - _bucket{le="1000"} * - _bucket{le="+Inf"} * - _sum * - _count * * Gauges (current values): * - svrnty_cqrs_events_consumer_lag{stream="UserWorkflow",subscription="user-analytics"} * - svrnty_cqrs_events_stream_length{stream="UserWorkflow"} * - svrnty_cqrs_events_active_consumers{stream="UserWorkflow",subscription="user-analytics"} * * GRAFANA DASHBOARD EXAMPLE QUERIES: * * Event Publish Rate (events/sec): * rate(svrnty_cqrs_events_published_total[5m]) * * Event Consumption Rate by Subscription: * rate(svrnty_cqrs_events_consumed_total{subscription="user-analytics"}[5m]) * * Consumer Lag (current): * svrnty_cqrs_events_consumer_lag * * P95 Processing Latency: * histogram_quantile(0.95, * rate(svrnty_cqrs_events_processing_latency_milliseconds_bucket[5m])) * * Error Rate: * rate(svrnty_cqrs_events_errors_total[5m]) * * Active Consumers: * svrnty_cqrs_events_active_consumers */ #endif