Exemple #1
0
        public MetricScrapingJob(string jobName,
                                 ScrapeDefinition <IAzureResourceDefinition> metricScrapeDefinition,
                                 MetricSinkWriter metricSinkWriter,
                                 IPrometheusMetricWriter prometheusMetricWriter,
                                 MetricScraperFactory metricScraperFactory,
                                 AzureMonitorClient azureMonitorClient,
                                 ILogger <MetricScrapingJob> logger)
        {
            Guard.NotNull(metricScrapeDefinition, nameof(metricScrapeDefinition));
            Guard.NotNull(prometheusMetricWriter, nameof(prometheusMetricWriter));
            Guard.NotNull(metricScraperFactory, nameof(metricScraperFactory));
            Guard.NotNull(azureMonitorClient, nameof(azureMonitorClient));
            Guard.NotNullOrWhitespace(jobName, nameof(jobName));
            Guard.NotNull(logger, nameof(logger));

            Name = jobName;

            _metricScrapeDefinition = metricScrapeDefinition;
            _prometheusMetricWriter = prometheusMetricWriter;
            _metricSinkWriter       = metricSinkWriter;
            _logger = logger;

            _metricScraperFactory = metricScraperFactory;
            _azureMonitorClient   = azureMonitorClient;
        }
        public MetricScrapingJob(ScrapeDefinition <AzureResourceDefinition> metric,
                                 IMetricsDeclarationProvider metricsDeclarationProvider,
                                 IPrometheusMetricWriter prometheusMetricWriter,
                                 IRuntimeMetricsCollector runtimeMetricsCollector,
                                 MetricScraperFactory metricScraperFactory,
                                 ILogger logger, IExceptionTracker exceptionTracker)
        {
            Guard.NotNull(metric, nameof(metric));
            Guard.NotNull(metricsDeclarationProvider, nameof(metricsDeclarationProvider));
            Guard.NotNull(prometheusMetricWriter, nameof(prometheusMetricWriter));
            Guard.NotNull(runtimeMetricsCollector, nameof(runtimeMetricsCollector));
            Guard.NotNull(metricScraperFactory, nameof(metricScraperFactory));
            Guard.NotNull(logger, nameof(logger));
            Guard.NotNull(exceptionTracker, nameof(exceptionTracker));

            _metric = metric;
            _metricsDeclarationProvider = metricsDeclarationProvider;
            _prometheusMetricWriter     = prometheusMetricWriter;
            _runtimeMetricsCollector    = runtimeMetricsCollector;
            _exceptionTracker           = exceptionTracker;
            _logger = logger;

            _metricScraperFactory = metricScraperFactory;

            ConfigureJob();
        }
Exemple #3
0
        /// <summary>
        ///     Creates a scraper that is capable of scraping a specific resource type
        /// </summary>
        /// <param name="azureMetadata">Metadata concerning the Azure resources</param>
        /// <param name="metricDefinitionResourceType">Resource type to scrape</param>
        /// <param name="prometheusMetricWriter">Metrics collector for our Prometheus scraping endpoint</param>
        /// <param name="runtimeMetricsCollector">Metrics collector for our runtime</param>
        public IScraper <IAzureResourceDefinition> CreateScraper(ResourceType metricDefinitionResourceType, AzureMetadata azureMetadata,
                                                                 IPrometheusMetricWriter prometheusMetricWriter, IRuntimeMetricsCollector runtimeMetricsCollector)
        {
            var azureMonitorClient   = CreateAzureMonitorClient(azureMetadata, runtimeMetricsCollector);
            var scraperConfiguration = new ScraperConfiguration(azureMetadata, azureMonitorClient, prometheusMetricWriter, _logger);

            switch (metricDefinitionResourceType)
            {
            case ResourceType.ServiceBusQueue:
                return(new ServiceBusQueueScraper(scraperConfiguration));

            case ResourceType.Generic:
                return(new GenericScraper(scraperConfiguration));

            case ResourceType.StorageQueue:
                return(new StorageQueueScraper(scraperConfiguration));

            case ResourceType.ContainerInstance:
                return(new ContainerInstanceScraper(scraperConfiguration));

            case ResourceType.VirtualMachine:
                return(new VirtualMachineScraper(scraperConfiguration));

            case ResourceType.NetworkInterface:
                return(new NetworkInterfaceScraper(scraperConfiguration));

            case ResourceType.ContainerRegistry:
                return(new ContainerRegistryScraper(scraperConfiguration));

            case ResourceType.CosmosDb:
                return(new CosmosDbScraper(scraperConfiguration));

            case ResourceType.RedisCache:
                return(new RedisCacheScraper(scraperConfiguration));

            case ResourceType.PostgreSql:
                return(new PostgreSqlScraper(scraperConfiguration));

            case ResourceType.SqlDatabase:
                return(new SqlDatabaseScraper(scraperConfiguration));

            case ResourceType.SqlManagedInstance:
                return(new SqlManagedInstanceScraper(scraperConfiguration));

            case ResourceType.VirtualMachineScaleSet:
                return(new VirtualMachineScaleSetScraper(scraperConfiguration));

            case ResourceType.AppPlan:
                return(new AppPlanScraper(scraperConfiguration));

            case ResourceType.WebApp:
                return(new WebAppScraper(scraperConfiguration));

            case ResourceType.FunctionApp:
                return(new FunctionAppScraper(scraperConfiguration));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemple #4
0
        /// <summary>
        ///     Constructor
        /// </summary>
        protected Scraper(ScraperConfiguration scraperConfiguration)
        {
            Guard.NotNull(scraperConfiguration, nameof(scraperConfiguration));

            _logger                 = scraperConfiguration.Logger;
            _metricSinkWriter       = scraperConfiguration.MetricSinkWriter;
            _prometheusMetricWriter = scraperConfiguration.PrometheusMetricWriter;

            AzureMonitorClient = scraperConfiguration.AzureMonitorClient;
        }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="azureMetadata">Metadata concerning the Azure resources</param>
        /// <param name="azureMonitorClient">Client to communicate with Azure Monitor</param>
        /// <param name="prometheusMetricWriter">Metrics collector for our Prometheus scraping endpoint</param>
        /// <param name="logger">General logger</param>
        public ScraperConfiguration(AzureMetadata azureMetadata, AzureMonitorClient azureMonitorClient, IPrometheusMetricWriter prometheusMetricWriter, ILogger logger)
        {
            Guard.NotNull(azureMetadata, nameof(azureMetadata));
            Guard.NotNull(azureMonitorClient, nameof(azureMonitorClient));
            Guard.NotNull(prometheusMetricWriter, nameof(prometheusMetricWriter));
            Guard.NotNull(logger, nameof(logger));

            AzureMetadata          = azureMetadata;
            AzureMonitorClient     = azureMonitorClient;
            PrometheusMetricWriter = prometheusMetricWriter;
            Logger = logger;
        }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="azureMonitorClient">Client to communicate with Azure Monitor</param>
        /// <param name="metricSinkWriter">Writer to send metrics to all configured sinks</param>
        /// <param name="prometheusMetricWriter">Metrics collector for our Prometheus scraping endpoint</param>
        /// <param name="logger">General logger</param>
        public ScraperConfiguration(AzureMonitorClient azureMonitorClient, MetricSinkWriter metricSinkWriter, IPrometheusMetricWriter prometheusMetricWriter, ILogger logger)
        {
            Guard.NotNull(azureMonitorClient, nameof(azureMonitorClient));
            Guard.NotNull(prometheusMetricWriter, nameof(prometheusMetricWriter));
            Guard.NotNull(logger, nameof(logger));
            Guard.NotNull(metricSinkWriter, nameof(metricSinkWriter));

            AzureMonitorClient     = azureMonitorClient;
            PrometheusMetricWriter = prometheusMetricWriter;
            Logger           = logger;
            MetricSinkWriter = metricSinkWriter;
        }
Exemple #7
0
        /// <summary>
        ///     Constructor
        /// </summary>
        protected Scraper(ScraperConfiguration scraperConfiguration)
        {
            Guard.NotNull(scraperConfiguration, nameof(scraperConfiguration));

            _logger                 = scraperConfiguration.Logger;
            _exceptionTracker       = scraperConfiguration.ExceptionTracker;
            _scraperConfiguration   = scraperConfiguration;
            _prometheusMetricWriter = scraperConfiguration.PrometheusMetricWriter;

            AzureMetadata      = scraperConfiguration.AzureMetadata;
            AzureMonitorClient = scraperConfiguration.AzureMonitorClient;
        }
        public MetricScrapingJob(ScrapeDefinition <IAzureResourceDefinition> metric,
                                 IMetricsDeclarationProvider metricsDeclarationProvider,
                                 IPrometheusMetricWriter prometheusMetricWriter,
                                 MetricScraperFactory metricScraperFactory,
                                 AzureMonitorClient azureMonitorClient,
                                 ILogger <MetricScrapingJob> logger)
        {
            Guard.NotNull(metric, nameof(metric));
            Guard.NotNull(metricsDeclarationProvider, nameof(metricsDeclarationProvider));
            Guard.NotNull(prometheusMetricWriter, nameof(prometheusMetricWriter));
            Guard.NotNull(metricScraperFactory, nameof(metricScraperFactory));
            Guard.NotNull(azureMonitorClient, nameof(azureMonitorClient));
            Guard.NotNull(logger, nameof(logger));

            _metric = metric;
            _metricsDeclarationProvider = metricsDeclarationProvider;
            _prometheusMetricWriter     = prometheusMetricWriter;
            _logger = logger;

            _metricScraperFactory = metricScraperFactory;
            _azureMonitorClient   = azureMonitorClient;
            ConfigureJob();
        }
        /// <summary>
        ///     Creates a scraper that is capable of scraping a specific resource type
        /// </summary>
        /// <param name="metricDefinitionResourceType">Resource type to scrape</param>
        /// <param name="metricSinkWriter">Writer to send metrics to all sinks</param>
        /// <param name="prometheusMetricWriter">Metrics collector for our Prometheus scraping endpoint</param>
        /// <param name="azureMonitorClient">Client to interact with Azure Monitor</param>
        public IScraper <IAzureResourceDefinition> CreateScraper(ResourceType metricDefinitionResourceType, MetricSinkWriter metricSinkWriter, IPrometheusMetricWriter prometheusMetricWriter, AzureMonitorClient azureMonitorClient)
        {
            var scraperConfiguration = new ScraperConfiguration(azureMonitorClient, metricSinkWriter, prometheusMetricWriter, _logger);

            switch (metricDefinitionResourceType)
            {
            case ResourceType.ServiceBusQueue:
                return(new ServiceBusQueueScraper(scraperConfiguration));

            case ResourceType.Generic:
                return(new GenericScraper(scraperConfiguration));

            case ResourceType.StorageQueue:
                return(new StorageQueueScraper(scraperConfiguration));

            case ResourceType.ContainerInstance:
                return(new ContainerInstanceScraper(scraperConfiguration));

            case ResourceType.VirtualMachine:
                return(new VirtualMachineScraper(scraperConfiguration));

            case ResourceType.NetworkInterface:
                return(new NetworkInterfaceScraper(scraperConfiguration));

            case ResourceType.ContainerRegistry:
                return(new ContainerRegistryScraper(scraperConfiguration));

            case ResourceType.CosmosDb:
                return(new CosmosDbScraper(scraperConfiguration));

            case ResourceType.RedisCache:
                return(new RedisCacheScraper(scraperConfiguration));

            case ResourceType.PostgreSql:
                return(new PostgreSqlScraper(scraperConfiguration));

            case ResourceType.SqlDatabase:
                return(new SqlDatabaseScraper(scraperConfiguration));

            case ResourceType.SqlManagedInstance:
                return(new SqlManagedInstanceScraper(scraperConfiguration));

            case ResourceType.VirtualMachineScaleSet:
                return(new VirtualMachineScaleSetScraper(scraperConfiguration));

            case ResourceType.AppPlan:
                return(new AppPlanScraper(scraperConfiguration));

            case ResourceType.WebApp:
                return(new WebAppScraper(scraperConfiguration));

            case ResourceType.FunctionApp:
                return(new FunctionAppScraper(scraperConfiguration));

            case ResourceType.SqlServer:
                return(new SqlServerScraper(scraperConfiguration));

            case ResourceType.ApiManagement:
                return(new ApiManagementScraper(scraperConfiguration));

            case ResourceType.StorageAccount:
                return(new StorageAccountScraper(scraperConfiguration));

            case ResourceType.BlobStorage:
                return(new BlobStorageScraper(scraperConfiguration));

            case ResourceType.FileStorage:
                return(new FileStorageScraper(scraperConfiguration));

            case ResourceType.IoTHub:
                return(new IoTHubScraper(scraperConfiguration));

            case ResourceType.DeviceProvisioningService:
                return(new DeviceProvisioningServiceScraper(scraperConfiguration));

            case ResourceType.KeyVault:
                return(new KeyVaultScraper(scraperConfiguration));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }