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(); }
/// <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(); } }
/// <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; }
/// <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(); } }