From ed184840a7a47aef3f108cfe0cdde8eabe7935c8 Mon Sep 17 00:00:00 2001 From: Alexey Rodionov Date: Mon, 17 Nov 2025 17:26:13 -0800 Subject: [PATCH] [ServiceBus] Replacing scaling logs to WebJobs extension methods --- NuGet.Config | 1 + eng/Packages.Data.props | 4 ++-- .../src/Shared/Queues/QueueMetricsProvider.cs | 15 ++++++++++----- .../src/Shared/Queues/QueueScaleMonitor.cs | 2 +- .../src/Shared/Queues/QueueTargetScaler.cs | 5 +++-- .../tests/QueueMetricsProviderTests.cs | 4 ++-- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/NuGet.Config b/NuGet.Config index c679a5601f0e..556c1989896a 100644 --- a/NuGet.Config +++ b/NuGet.Config @@ -4,6 +4,7 @@ + diff --git a/eng/Packages.Data.props b/eng/Packages.Data.props index cd799d626eec..d22caf329547 100644 --- a/eng/Packages.Data.props +++ b/eng/Packages.Data.props @@ -249,8 +249,8 @@ - - + + diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueMetricsProvider.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueMetricsProvider.cs index bd0b4ead1136..4ef1d5b07664 100644 --- a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueMetricsProvider.cs +++ b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueMetricsProvider.cs @@ -6,6 +6,7 @@ using Azure; using Azure.Storage.Queues; using Azure.Storage.Queues.Models; +using Microsoft.Azure.WebJobs.Host.Scale; using Microsoft.Extensions.Logging; namespace Microsoft.Azure.WebJobs.Extensions.Storage.Common.Listeners @@ -15,16 +16,19 @@ namespace Microsoft.Azure.WebJobs.Extensions.Storage.Common.Listeners /// internal class QueueMetricsProvider { + private readonly string _functionId; private readonly QueueClient _queue; private readonly ILogger _logger; /// /// Instantiates a QueueMetricsProvider. /// + /// The function id to make scale decisions for. /// The QueueClient to use for metrics polling. /// Used to create an ILogger instance. - public QueueMetricsProvider(QueueClient queue, ILoggerFactory loggerFactory) + public QueueMetricsProvider(string functionId, QueueClient queue, ILoggerFactory loggerFactory) { + _functionId = functionId; _queue = queue; _logger = loggerFactory.CreateLogger(); } @@ -49,12 +53,12 @@ public async Task GetQueueLengthAsync() // ignore transient errors, and return default metrics // E.g. if the queue doesn't exist, we'll return a zero queue length // and scale in - _logger.LogWarning($"Error querying for queue scale status: {ex.ToString()}"); + _logger.LogFunctionScaleWarning("Error querying for queue scale status", _functionId, ex); } } catch (Exception ex) { - _logger.LogWarning($"Fatal error querying for queue scale status: {ex.ToString()}"); + _logger.LogFunctionScaleWarning("Fatal error querying for queue scale status", _functionId, ex); } return 0; @@ -101,12 +105,13 @@ public async Task GetMetricsAsync() // ignore transient errors, and return default metrics // E.g. if the queue doesn't exist, we'll return a zero queue length // and scale in - _logger.LogWarning($"Error querying for queue scale status: {ex.ToString()}"); + + _logger.LogFunctionScaleWarning("Error querying for queue scale status", _functionId, ex); } } catch (Exception ex) { - _logger.LogWarning($"Fatal error querying for queue scale status: {ex.ToString()}"); + _logger.LogFunctionScaleWarning("Fatal error querying for queue scale status", _functionId, ex); } return new QueueTriggerMetrics diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueScaleMonitor.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueScaleMonitor.cs index 813256a1d78b..fcf64becd091 100644 --- a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueScaleMonitor.cs +++ b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueScaleMonitor.cs @@ -41,7 +41,7 @@ public QueueScaleMonitor(string functionId, QueueClient queue, ILoggerFactory lo _queue = queue; _logger = loggerFactory.CreateLogger(); _scaleMonitorDescriptor = new ScaleMonitorDescriptor($"{functionId}-QueueTrigger-{_queue.Name}".ToLower(CultureInfo.InvariantCulture), functionId); - _queueMetricsProvider = new QueueMetricsProvider(queue, loggerFactory); + _queueMetricsProvider = new QueueMetricsProvider(functionId, queue, loggerFactory); } /// diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueTargetScaler.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueTargetScaler.cs index d89c8fab535a..df86db2b614b 100644 --- a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueTargetScaler.cs +++ b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Common/src/Shared/Queues/QueueTargetScaler.cs @@ -36,7 +36,7 @@ internal QueueTargetScaler(string functionId, QueueClient queueClient, QueuesOpt { _functionId = functionId; _queueName = queueClient.Name; - _queueMetricsProvider = new QueueMetricsProvider(queueClient, loggerFactory); + _queueMetricsProvider = new QueueMetricsProvider(_functionId, queueClient, loggerFactory); _targetScalerDescriptor = new TargetScalerDescriptor(functionId); _options = options; _logger = loggerFactory.CreateLogger(); @@ -64,7 +64,8 @@ internal TargetScalerResult GetScaleResultInternal(TargetScalerContext context, int targetWorkerCount = (int)Math.Ceiling(queueLength / (decimal)concurrency); - _logger.LogInformation($"Target worker count for function '{_functionId}' is '{targetWorkerCount}' (QueueName='{_queueName}', QueueLength ='{queueLength}', Concurrency='{concurrency}')."); + string details = $"Target worker count for function '{_functionId}' is '{targetWorkerCount}' (QueueName='{_queueName}', QueueLength ='{queueLength}', Concurrency='{concurrency}')."; + _logger.LogFunctionScaleVote(_functionId, targetWorkerCount, queueLength, concurrency, details); return new TargetScalerResult { TargetWorkerCount = targetWorkerCount diff --git a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/tests/QueueMetricsProviderTests.cs b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/tests/QueueMetricsProviderTests.cs index 1dfbf0aa1c17..1cc80f596d68 100644 --- a/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/tests/QueueMetricsProviderTests.cs +++ b/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/tests/QueueMetricsProviderTests.cs @@ -34,7 +34,7 @@ public void SetUp() _loggerFactory.AddProvider(_loggerProvider); _mockQueue = new Mock(new Uri("https://test.queue.core.windows.net/testqueue"), new QueueClientOptions()); _mockQueue.Setup(x => x.Name).Returns("testqueue"); - _metricsProvider = new QueueMetricsProvider(_mockQueue.Object, _loggerFactory); + _metricsProvider = new QueueMetricsProvider("testfunction", _mockQueue.Object, _loggerFactory); } [OneTimeSetUp] @@ -54,7 +54,7 @@ public void OneTimeTearDown() [Test] public async Task GetMetrics_ReturnsExpectedResult() { - QueueMetricsProvider _provider = new QueueMetricsProvider(Fixture.Queue, _loggerFactory); + QueueMetricsProvider _provider = new QueueMetricsProvider("testfunction", Fixture.Queue, _loggerFactory); var metrics = await _provider.GetMetricsAsync(); Assert.AreEqual(0, metrics.QueueLength);