2

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

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

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

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

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

我是否遗漏了什么,或者我需要通过调用在https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-supported-上公开的 REST API 来使用 Azure 函数/逻辑应用程序构建自定义监控指标?redirectedfrom=MSDN#microsoftservicebusnamespaces

https://www.servicebus360.com/正在销售上述功能,但我的要求非常初级。

4

2 回答 2

1

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

于 2018-06-21T03:55:17.270 回答
0

是的,可以获得有关 Azure 服务总线队列空间使用情况的详细信息。在下面找到一个计算给定队列中可用空间的示例控制台应用程序 (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>

只要满足您的要求,就可以使用 Timer 自动执行此操作。在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 获取这些详细信息。

于 2018-06-02T01:16:17.820 回答