public static async Task Main(string[] args) { using var meterProvider = Sdk.CreateMeterProviderBuilder() .AddSource("TestMeter") .AddConsoleExporter() .Build(); ObservableGauge <long> gauge = MyMeter.CreateObservableGauge <long>( "Gauge", () => { var tag1 = new KeyValuePair <string, object>("tag1", "value1"); var tag2 = new KeyValuePair <string, object>("tag2", "value2"); return(new List <Measurement <long> >() { new Measurement <long>(RandomGenerator.Next(1, 1000), tag1, tag2), }); }); await Task.Delay(10000); }
internal static object Run(int port, int totalDurationInMins) { /* * Following is sample prometheus.yml config. Adjust port,interval as needed. * * scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. # - job_name: 'OpenTelemetryTest' # # metrics_path defaults to '/metrics' # scheme defaults to 'http'. # # static_configs: # - targets: ['localhost:9184'] */ using var meterProvider = Sdk.CreateMeterProviderBuilder() .AddSource("TestMeter") .AddPrometheusExporter(opt => opt.Url = $"http://localhost:{port}/metrics/") .Build(); ObservableGauge <long> gauge = MyMeter.CreateObservableGauge <long>( "Gauge", () => { var tag1 = new KeyValuePair <string, object>("tag1", "value1"); var tag2 = new KeyValuePair <string, object>("tag2", "value2"); return(new List <Measurement <long> >() { new Measurement <long>(RandomGenerator.Next(1, 1000), tag1, tag2), }); }); using var token = new CancellationTokenSource(); Task writeMetricTask = new Task(() => { while (!token.IsCancellationRequested) { Counter.Add( 10, new KeyValuePair <string, object>("tag1", "value1"), new KeyValuePair <string, object>("tag2", "value2")); Counter.Add( 100, new KeyValuePair <string, object>("tag1", "anothervalue"), new KeyValuePair <string, object>("tag2", "somethingelse")); MyHistogram.Record( RandomGenerator.Next(1, 1500), new KeyValuePair <string, object>("tag1", "value1"), new KeyValuePair <string, object>("tag2", "value2")); Task.Delay(10).Wait(); } }); writeMetricTask.Start(); token.CancelAfter(totalDurationInMins * 60 * 1000); System.Console.WriteLine($"OpenTelemetry Prometheus Exporter is making metrics available at http://localhost:{port}/metrics/"); System.Console.WriteLine($"Press Enter key to exit now or will exit automatically after {totalDurationInMins} minutes."); System.Console.ReadLine(); token.Cancel(); System.Console.WriteLine("Exiting..."); return(null); }