Beispiel #1
0
        internal static object Run()
        {
            var promOptions = new PrometheusExporterOptions()
            {
                Url = "http://localhost:9184/metrics/"
            };
            Metric <long> metric       = new Metric <long>("sample");
            var           promExporter = new PrometheusExporter <long>(promOptions, metric);

            try
            {
                promExporter.Start();
                List <KeyValuePair <string, string> > label1 = new List <KeyValuePair <string, string> >();
                label1.Add(new KeyValuePair <string, string>("dim1", "value1"));
                var labelSet1 = new LabelSet(label1);
                metric.GetOrCreateMetricTimeSeries(labelSet1).Add(100);
                Task.Delay(30000).Wait();
                metric.GetOrCreateMetricTimeSeries(labelSet1).Add(200);
                Console.WriteLine("Look at metrics in Prometheus console!");
                Console.ReadLine();
            }
            finally
            {
                promExporter.Stop();
            }

            return(null);
        }
Beispiel #2
0
        public void PrometheusExporterTest1()
        {
            var promOptions = new PrometheusExporterOptions()
            {
                Url = "http://localhost:9184/metrics/"
            };
            List <Metric> metrics      = new List <Metric>();
            var           promExporter = new PrometheusExporter(promOptions);

            try
            {
                promExporter.Start();
                var label1 = new List <KeyValuePair <string, string> >();
                label1.Add(new KeyValuePair <string, string>("dim1", "value1"));
                metrics.Add(new Metric("ns", "metric1", "desc", label1, 100));
                metrics.Add(new Metric("ns", "metric1", "desc", label1, 100));
                metrics.Add(new Metric("ns", "metric1", "desc", label1, 100));

                promExporter.ExportAsync(metrics, CancellationToken.None);
            }
            finally
            {
                // Change delay to higher value to manually check Promtheus.
                // These tests are just to temporarily validate export to prometheus.
                Task.Delay(10).Wait();
                promExporter.Stop();
            }
        }
        static void Main(string[] args)
        {
            var app = ConsoleHelper.CreateApp("cv4pve-metrics-exporter", "Metrics Exporter for Proxmox VE");

            var cmd     = app.AddCommand("prometheus", "Export for Prometheus");
            var optHost = cmd.AddOption("--http-host", $"Http host (default: {PrometheusExporter.DEFAULT_HOST})");

            optHost.SetDefaultValue(PrometheusExporter.DEFAULT_HOST);

            var optPort = cmd.AddOption <int>("--http-port", $"Http port (default: {PrometheusExporter.DEFAULT_PORT})");

            optPort.SetDefaultValue(PrometheusExporter.DEFAULT_PORT);

            var optUrl = cmd.AddOption("--http-url", $"Http url (default: {PrometheusExporter.DEFAULT_URL})");

            optUrl.SetDefaultValue(PrometheusExporter.DEFAULT_URL);

            var optPrefix = cmd.AddOption("--prefix", $"Prefix export (default: {PrometheusExporter.DEFAULT_PREFIX})");

            optPrefix.SetDefaultValue(PrometheusExporter.DEFAULT_PREFIX);

            var optNodeDiskInfo = cmd.AddOption("--node-disk-info", "Export disk info (disk,wearout,smart)");

            cmd.SetHandler(() =>
            {
                var logFactory = ConsoleHelper.CreateLoggerFactory <Program>(app.GetLogLevelFromDebug());

                var exporter = new PrometheusExporter(app.GetHost().GetValue(),
                                                      app.GetUsername().GetValue(),
                                                      app.GetPasswordFromOption(),
                                                      app.GetApiToken().GetValue(),
                                                      logFactory,
                                                      optHost.GetValue(),
                                                      optPort.GetValue(),
                                                      optUrl.GetValue(),
                                                      optPrefix.GetValue(),
                                                      optNodeDiskInfo.HasValue());

                exporter.Start();

                Console.Out.WriteLine("Corsinvest for Proxmox VE");
                Console.Out.WriteLine($"Cluster: {app.GetHost().GetValue()} - User: {app.GetUsername().GetValue()}");
                Console.Out.WriteLine($"Exporter Prometheus: http://{optHost.GetValue()}:{optPort.GetValue()}/{optUrl.GetValue()} - Prefix: {optPrefix.GetValue()}");
                Console.Out.WriteLine($"Export Node Disk Info: {optNodeDiskInfo.HasValue()}");

                Console.ReadLine();

                try { exporter.Stop(); }
                catch { }

                Console.Out.WriteLine("End application");
            });

            app.ExecuteApp(args);
        }
Beispiel #4
0
        internal static object Run()
        {
            var promOptions = new PrometheusExporterOptions()
            {
                Url = "http://localhost:9184/metrics/"
            };
            var promExporter    = new PrometheusExporter(promOptions);
            var simpleProcessor = new UngroupedBatcher(promExporter, TimeSpan.FromSeconds(5));
            var meter           = MeterFactory.Create(simpleProcessor).GetMeter("library1");
            var testCounter     = meter.CreateInt64Counter("testCounter");

            var labels1 = new List <KeyValuePair <string, string> >();

            labels1.Add(new KeyValuePair <string, string>("dim1", "value1"));

            var labels2 = new List <KeyValuePair <string, string> >();

            labels2.Add(new KeyValuePair <string, string>("dim1", "value2"));

            var defaultContext = default(SpanContext);

            try
            {
                promExporter.Start();

                for (int i = 0; i < 1000; i++)
                {
                    testCounter.Add(defaultContext, 100, meter.GetLabelSet(labels1));
                    testCounter.Add(defaultContext, 10, meter.GetLabelSet(labels1));
                    testCounter.Add(defaultContext, 200, meter.GetLabelSet(labels2));
                    testCounter.Add(defaultContext, 10, meter.GetLabelSet(labels2));

                    if (i % 10 == 0)
                    {
                        // Collect is called here explicitly as there is
                        // no controller implementation yet.
                        // TODO: There should be no need to cast to MeterSdk.
                        (meter as MeterSdk).Collect();
                    }

                    Task.Delay(1000).Wait();
                }
            }
            finally
            {
                Task.Delay(3000).Wait();
                promExporter.Stop();
            }

            return(null);
        }
Beispiel #5
0
        public void E2ETest1()
        {
            var promOptions = new PrometheusExporterOptions()
            {
                Url = "http://localhost:9184/metrics/"
            };
            var promExporter    = new PrometheusExporter(promOptions);
            var simpleProcessor = new UngroupedBatcher(promExporter);
            var meter           = MeterFactory.Create(simpleProcessor).GetMeter("library1") as MeterSdk;
            var testCounter     = meter.CreateInt64Counter("testCounter");

            var labels1 = new List <KeyValuePair <string, string> >();

            labels1.Add(new KeyValuePair <string, string>("dim1", "value1"));

            var labels2 = new List <KeyValuePair <string, string> >();

            labels2.Add(new KeyValuePair <string, string>("dim1", "value2"));

            try
            {
                promExporter.Start();

                var defaultContext = default(SpanContext);

                for (int i = 0; i < 1000; i++)
                {
                    testCounter.Add(defaultContext, 100, meter.GetLabelSet(labels1));
                    testCounter.Add(defaultContext, 10, meter.GetLabelSet(labels1));
                    testCounter.Add(defaultContext, 200, meter.GetLabelSet(labels2));
                    testCounter.Add(defaultContext, 10, meter.GetLabelSet(labels2));

                    if (i % 10 == 0)
                    {
                        meter.Collect();
                    }

                    // Change delay to higher value to manually check Promtheus.
                    // These tests are just to temporarily validate export to prometheus.
                    // Task.Delay(1).Wait();
                }
            }
            finally
            {
                Task.Delay(100).Wait();
                promExporter.Stop();
            }
        }
Beispiel #6
0
        internal static object Run()
        {
            var exporter = new PrometheusExporter(
                new PrometheusExporterOptions()
            {
                Url = "http://+:9184/metrics/",      // "+" is a wildcard used to listen to all hostnames
            },
                Stats.ViewManager);

            exporter.Start();

            try
            {
                var tagContextBuilder = Tagger.CurrentBuilder.Put(FrontendKey, TagValue.Create("mobile-ios9.3.5"));

                Stats.ViewManager.RegisterView(VideoSizeView);

                var t = new Task(() =>
                {
                    var r      = new Random();
                    var values = new byte[1];

                    while (true)
                    {
                        using (var scopedTags = tagContextBuilder.BuildScoped())
                        {
                            r.NextBytes(values);
                            StatsRecorder.NewMeasureMap().Put(VideoSize, values[0] * MiB).Record();
                            Thread.Sleep(TimeSpan.FromSeconds(1));
                        }
                    }
                });
                t.Start();

                Console.WriteLine("Look at metrics in Prometetheus console!");
                Console.ReadLine();
            }
            finally
            {
                exporter.Stop();
            }

            return(null);
        }
Beispiel #7
0
        public void PrometheusExporterTest1()
        {
            var promOptions = new PrometheusExporterOptions()
            {
                Url = "http://localhost:9184/metrics/"
            };
            Metric <long> metric       = new Metric <long>("sample");
            var           promExporter = new PrometheusExporter <long>(promOptions, metric);

            try
            {
                promExporter.Start();
                List <KeyValuePair <string, string> > label1 = new List <KeyValuePair <string, string> >();
                label1.Add(new KeyValuePair <string, string>("dim1", "value1"));
                var labelSet1 = new LabelSet(label1);
                metric.GetOrCreateMetricTimeSeries(labelSet1).Add(100);
                metric.GetOrCreateMetricTimeSeries(labelSet1).Add(200);
            }
            finally
            {
                Task.Delay(10000).Wait();
                promExporter.Stop();
            }
        }
 public Task StopAsync(CancellationToken cancellationToken)
 {
     exporter.Stop();
     timer.Dispose();
     return(Task.CompletedTask);
 }