Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
        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);
        }