服务总线主题/队列监控大小越来越接近它的限制

时间:2018-05-26 22:19:01

标签: azure azureservicebus azure-servicebus-topics azure-monitoring

我们在生产中有很多Azure服务总线主题/队列。任何给定的主题都有一个MAX SIZE,并且由于与load viz无关的各种原因,它可能达到该限制。附加于该主题的未命名订阅等。

当一个主题达到其大小限制时,我们有多次中断,因为我们订阅了未注册的订阅。 我们正在寻找基础监控的地方

  1. 如果主题的大小> Max SIZE的X%我们收到一封电子邮件/ 通知。
  2. 应自动添加生产命名空间中的任何主题     监控。开发人员可能忘记添加监控     将新主题添加到命名空间时。
  3. 虽然2.很好,但只有1.也应该没问题。

    Azure服务总线目前在预览中有“Metrics”,我们可以设置一系列指标以获得警报。看起来它处于非常早期的阶段,即使是上述要求也无法实现。

    我是否遗漏了某些内容,或者我需要通过调用在[{3}}

    中公开的REST API来使用Azure功能/逻辑应用程序构建自定义监控

    https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-supported-metrics?redirectedfrom=MSDN#microsoftservicebusnamespaces正在销售上述功能,但我的要求非常简陋。

2 个答案:

答案 0 :(得分:1)

队列/主题的大小现在在Azure Monitor Metrics中可用。由于处于预览阶段,因此这些值可能不会立即反映出来。但是可以使用Azure Monitor来监视这些指标,这也处于“预览”阶段。

答案 1 :(得分:0)

是的,可以获取有关Azure Service Bus Queues空间使用情况的使用情况详细信息。 在下面找到计算给定队列中可用空间的示例控制台应用程序(C#+ .NET Framework 4.7 + WindowsAzure.ServiceBus 4.1.10)。使用TopicDescription主题。

private static async Task GetFreeSpace(string connectionString, string queueName)
{
    if (string.IsNullOrWhiteSpace(connectionString))
    {
        throw new ArgumentException("Service bus connection string cannot be null, empty or whitespace.");
    }

    if (string.IsNullOrWhiteSpace(queueName))
    {
        throw new ArgumentException("Service bus queue name cannot be null, empty or whitespace.");
    }

    NamespaceManager nm = NamespaceManager.CreateFromConnectionString(connectionString);
    QueueDescription queueDescription = await nm.GetQueueAsync(queueName);

    double spaceUsedInMB = 0;
    double freeSpaceInMB = 0;
    double percentageFreeSpace = 100;

    if (queueDescription.SizeInBytes > 0)
    {
        spaceUsedInMB = (queueDescription.SizeInBytes / 1024.0 / 1024.0);
        freeSpaceInMB = queueDescription.MaxSizeInMegabytes - spaceUsedInMB;
        percentageFreeSpace = 100 * freeSpaceInMB / queueDescription.MaxSizeInMegabytes;
    }

    Console.WriteLine($"Max Size (MB) = {queueDescription.MaxSizeInMegabytes:0.00000}");
    Console.WriteLine($"Used Space (MB) = {spaceUsedInMB:0.00000}");
    Console.WriteLine($"Free Space (MB) = {freeSpaceInMB:0.00000}");
    Console.WriteLine($"Free Space (%) = {percentageFreeSpace:0.00000}");
}

这是packages.config文件内容:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="WindowsAzure.ServiceBus" version="4.1.10" targetFramework="net47" />
</packages>

只要符合您的要求,就可以使用定时器自动完成。在https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer了解更多详情。

此外,根据文档https://docs.microsoft.com/en-us/powershell/module/azurerm.servicebus/get-azurermservicebusqueue?view=azurermps-6.1.0,还可以使用PowerShell获取这些详细信息。