服务总线 Topic/Queue 监视大小是否接近其限制

Service Bus Topic/Queue Monitoring for size getting closer to it's limit

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

当一个主题达到其大小限制时,我们有不止一次中断,因为我们有未使用的订阅。 我们正在寻找

的基础监控
  1. 如果主题大小 > MAX SIZE 的 X%,我们会收到一封电子邮件 / 通知。
  2. 生产命名空间中的任何主题都应自动添加到 监控。开发者有可能忘记添加监控
    向命名空间添加新主题时。

虽然 2. 很好,但只有 1. 也应该没问题。

Azure 服务总线目前有 "Metrics" 预览版,我们可以设置大量指标以获得警报。看起来它处于非常早期的阶段,甚至无法满足上述要求。

我是不是遗漏了什么,或者我需要通过调用在 - https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-supported-metrics?redirectedfrom=MSDN#microsoftservicebusnamespaces

处公开的 REST API,使用 Azure 函数/逻辑应用程序构建自定义监控

https://www.servicebus360.com/卖的是以上功能,但我的要求很初级。

是的,可以获得有关 Azure 服务总线队列 space 用法的详细信息。 在下面找到一个示例控制台应用程序 (C# + .NET Framework 4.7 + WindowsAzure.ServiceBus 4.1.10),它计算给定队列中的空闲 space。对主题使用 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 获取这些详细信息。

Queue/Topic 的大小现已在 Azure Monitor Metrics. As it is in preview stage, the values may not reflect instantaneously. But it is possible to monitor those metrics using Azure Monitor 中可用,该 Azure Monitor Metrics. As it is in preview stage, the values may not reflect instantaneously. But it is possible to monitor those metrics using Azure Monitor 也处于预览阶段。