/// <inheritdoc /> protected override async Task <ScrapeResult> ScrapeResourceAsync(string subscriptionId, ScrapeDefinition <IAzureResourceDefinition> scrapeDefinition, TResourceDefinition resourceDefinition, AggregationType aggregationType, TimeSpan aggregationInterval) { Guard.NotNull(scrapeDefinition, nameof(scrapeDefinition)); Guard.NotNull(scrapeDefinition.AzureMetricConfiguration, nameof(scrapeDefinition.AzureMetricConfiguration)); var metricName = scrapeDefinition.AzureMetricConfiguration.MetricName; // Compose URI of the resource to measure var resourceUri = BuildResourceUri(subscriptionId, scrapeDefinition, resourceDefinition); // Determine the metric filter to use, if any var metricFilter = DetermineMetricFilter(resourceDefinition); // Determine the metric dimension to use, if any var dimensionName = DetermineMetricDimension(resourceDefinition, scrapeDefinition.AzureMetricConfiguration?.Dimension); // Query Azure Monitor for metrics var foundMetricValue = await AzureMonitorClient.QueryMetricAsync(metricName, dimensionName, aggregationType, aggregationInterval, resourceUri, metricFilter); // Provide more metric labels, if we need to var metricLabels = DetermineMetricLabels(resourceDefinition); // Enrich measured metrics, in case we need to var finalMetricValues = EnrichMeasuredMetrics(resourceDefinition, dimensionName, foundMetricValue); // We're done! return(new ScrapeResult(subscriptionId, scrapeDefinition.ResourceGroupName, resourceDefinition.ResourceName, resourceUri, finalMetricValues, metricLabels)); }
protected override async Task <double> ScrapeResourceAsync(GenericAzureMetricDefinition metricDefinition, AggregationType aggregationType, TimeSpan aggregationInterval) { var resourceUri = string.Format(ResourceUriTemplate, AzureMetadata.SubscriptionId, AzureMetadata.ResourceGroupName, metricDefinition.ResourceUri); var metricName = metricDefinition.AzureMetricConfiguration.MetricName; var foundMetricValue = await AzureMonitorClient.QueryMetricAsync(metricName, aggregationType, aggregationInterval, resourceUri, metricDefinition.Filter); return(foundMetricValue); }
protected override async Task <ScrapeResult> ScrapeResourceAsync(string subscriptionId, ScrapeDefinition <AzureResourceDefinition> scrapeDefinition, GenericAzureResourceDefinition resource, AggregationType aggregationType, TimeSpan aggregationInterval) { var resourceUri = string.Format(ResourceUriTemplate, subscriptionId, scrapeDefinition.ResourceGroupName, resource.ResourceUri); var metricName = scrapeDefinition.AzureMetricConfiguration.MetricName; var foundMetricValue = await AzureMonitorClient.QueryMetricAsync(metricName, aggregationType, aggregationInterval, resourceUri, resource.Filter); return(new ScrapeResult(subscriptionId, scrapeDefinition.ResourceGroupName, resourceUri, foundMetricValue)); }
protected override async Task <ScrapeResult> ScrapeResourceAsync(string subscriptionId, string resourceGroupName, VirtualMachineMetricDefinition metricDefinition, AggregationType aggregationType, TimeSpan aggregationInterval) { var resourceUri = string.Format(ResourceUriTemplate, AzureMetadata.SubscriptionId, AzureMetadata.ResourceGroupName, metricDefinition.VirtualMachineName); var metricName = metricDefinition.AzureMetricConfiguration.MetricName; var foundMetricValue = await AzureMonitorClient.QueryMetricAsync(metricName, aggregationType, aggregationInterval, resourceUri); return(new ScrapeResult(resourceUri, foundMetricValue)); }
protected override async Task <double> ScrapeResourceAsync(AzureMonitorClient azureMonitorClient, ServiceBusQueueMetricDefinition metricDefinition) { var resourceUri = string.Format(ResourceUriTemplate, AzureMetadata.SubscriptionId, AzureMetadata.ResourceGroupName, metricDefinition.Namespace); var filter = $"EntityName eq '{metricDefinition.QueueName}'"; var metricName = metricDefinition.AzureMetricConfiguration.MetricName; var foundMetricValue = await azureMonitorClient.QueryMetricAsync(metricName, metricDefinition.AzureMetricConfiguration.Aggregation, resourceUri, filter); return(foundMetricValue); }
protected override async Task <double> ScrapeResourceAsync(string subscriptionId, string resourceGroupName, ServiceBusQueueMetricDefinition metricDefinition, AggregationType aggregationType, TimeSpan aggregationInterval) { var resourceUri = string.Format(ResourceUriTemplate, subscriptionId, resourceGroupName, metricDefinition.Namespace); var filter = $"EntityName eq '{metricDefinition.QueueName}'"; var metricName = metricDefinition.AzureMetricConfiguration.MetricName; var foundMetricValue = await AzureMonitorClient.QueryMetricAsync(metricName, aggregationType, aggregationInterval, resourceUri, filter); return(foundMetricValue); }
/// <inheritdoc /> protected override async Task <ScrapeResult> ScrapeResourceAsync(string subscriptionId, ScrapeDefinition <IAzureResourceDefinition> scrapeDefinition, TResourceDefinition resourceDefinition, AggregationType aggregationType, TimeSpan aggregationInterval) { var resourceUri = BuildResourceUri(subscriptionId, scrapeDefinition, resourceDefinition); var metricFilter = DetermineMetricFilter(resourceDefinition); var metricName = scrapeDefinition.AzureMetricConfiguration.MetricName; var dimensionName = scrapeDefinition.AzureMetricConfiguration.Dimension?.Name; var foundMetricValue = await AzureMonitorClient.QueryMetricAsync(metricName, dimensionName, aggregationType, aggregationInterval, resourceUri, metricFilter); var metricLabels = DetermineMetricLabels(resourceDefinition); return(new ScrapeResult(subscriptionId, scrapeDefinition.ResourceGroupName, resourceDefinition.ResourceName, resourceUri, foundMetricValue, metricLabels)); }
protected override async Task <ScrapeResult> ScrapeResourceAsync(string subscriptionId, ScrapeDefinition <AzureResourceDefinition> scrapeDefinition, ServiceBusQueueResourceDefinition resource, AggregationType aggregationType, TimeSpan aggregationInterval) { var resourceUri = string.Format(ResourceUriTemplate, subscriptionId, scrapeDefinition.ResourceGroupName, resource.Namespace); var filter = $"EntityName eq '{resource.QueueName}'"; var metricName = scrapeDefinition.AzureMetricConfiguration.MetricName; var foundMetricValue = await AzureMonitorClient.QueryMetricAsync(metricName, aggregationType, aggregationInterval, resourceUri, filter); var labels = new Dictionary <string, string> { { "entity_name", resource.QueueName } }; return(new ScrapeResult(subscriptionId, scrapeDefinition.ResourceGroupName, resource.Namespace, resourceUri, foundMetricValue, labels)); }
/// <inheritdoc /> protected override async Task <ScrapeResult> ScrapeResourceAsync(string subscriptionId, ScrapeDefinition <IAzureResourceDefinition> scrapeDefinition, TResourceDefinition resourceDefinition, AggregationType aggregationType, TimeSpan aggregationInterval) { Guard.NotNull(scrapeDefinition, nameof(scrapeDefinition)); Guard.NotNull(scrapeDefinition.AzureMetricConfiguration, nameof(scrapeDefinition.AzureMetricConfiguration)); var metricName = scrapeDefinition.AzureMetricConfiguration.MetricName; // Compose URI of the resource to measure var resourceUri = BuildResourceUri(subscriptionId, scrapeDefinition, resourceDefinition); // Determine the metric filter to use, if any var metricFilter = DetermineMetricFilter(metricName, resourceDefinition); // Determine the metric limit to use, if any var metricLimit = DetermineMetricLimit(scrapeDefinition); // Determine the metric dimension to use, if any var dimensionName = DetermineMetricDimension(metricName, resourceDefinition, scrapeDefinition.AzureMetricConfiguration?.Dimension); List <MeasuredMetric> measuredMetrics = new List <MeasuredMetric>(); try { // Query Azure Monitor for metrics measuredMetrics = await AzureMonitorClient.QueryMetricAsync(metricName, dimensionName, aggregationType, aggregationInterval, resourceUri, metricFilter, metricLimit); } catch (MetricInformationNotFoundException metricsNotFoundException) { Logger.LogWarning("No metric information found for metric {MetricName} with dimension {MetricDimension}. Details: {Details}", metricsNotFoundException.Name, metricsNotFoundException.Dimension, metricsNotFoundException.Details); var measuredMetric = string.IsNullOrWhiteSpace(dimensionName) ? MeasuredMetric.CreateWithoutDimension(null) : MeasuredMetric.CreateForDimension(null, dimensionName, "unknown"); measuredMetrics.Add(measuredMetric); } // Provide more metric labels, if we need to var metricLabels = DetermineMetricLabels(resourceDefinition); // Enrich measured metrics, in case we need to var finalMetricValues = EnrichMeasuredMetrics(resourceDefinition, dimensionName, measuredMetrics); // We're done! return(new ScrapeResult(subscriptionId, scrapeDefinition.ResourceGroupName, resourceDefinition.ResourceName, resourceUri, finalMetricValues, metricLabels)); }
protected override async Task <ScrapeResult> ScrapeResourceAsync(string subscriptionId, ScrapeDefinition <AzureResourceDefinition> scrapeDefinition, AzureSqlDatabaseResourceDefinition resource, AggregationType aggregationType, TimeSpan aggregationInterval) { var resourceUri = string.Format( ResourceUriTemplate, AzureMetadata.SubscriptionId, scrapeDefinition.ResourceGroupName, resource.ServerName, resource.DatabaseName); var metricName = scrapeDefinition.AzureMetricConfiguration.MetricName; var foundMetricValue = await AzureMonitorClient.QueryMetricAsync(metricName, aggregationType, aggregationInterval, resourceUri); var labels = new Dictionary <string, string> { { "server", resource.ServerName }, { "database", resource.DatabaseName } }; return(new ScrapeResult(subscriptionId, scrapeDefinition.ResourceGroupName, null, resourceUri, foundMetricValue, labels)); }