在 Azure 服务总线中获取消息统计信息
Getting Message Stats in Azure Service Bus
我正在编写一个实用程序来监视我们的 Azure 服务总线主题和订阅。
我可以获取主题详细信息,例如名称、排队消息数和死信消息数,但我想获取已处理的消息数。
这是我使用的代码:
var sub = namespaceManager.GetSubscription(topicPath, subscriptionName);
var name = sub.Name;
var pending= sub.MessageCountDetails.ActiveMessageCount;
var deadletter = sub.MessageCountDetails.DeadLetterMessageCount
似乎 GetSubscription
不包含任何属性来获取处理的消息数。
以前有人试过吗?
自创建实体以来处理的消息数?还是从某个日期开始?以及由于客户端未能按时完成或其他一些原因而被多次处理(传递计数 > 1)的消息怎么办?这个计数不是直接的,这就是为什么不能开箱即用的原因。
为了从 Azure Servicebus 实体获取消息统计信息,我使用 Visual Studio App Insights. This is a tool to monitor apps. Basically, your app sends events to App Insights and from the Azure Portal, you can create dashboards 为您提供应用程序的实时信息。
为了监控 Azure 服务总线实体,我从我的应用程序发送自定义事件:
- 您可以看看 pricing,有一个免费计划允许您每月发送多达 500 万个自定义事件。如果您需要发送超过 500 万个事件,您可以在将事件发送到 App Insights 之前为每个 Servicebus 实体或聚合计数创建一个 App Insights。
您可以访问 7 天的原始数据和 90 天的汇总数据。
如果你使用Power BI,你可以配置一个continuous export你的数据(不要认为它在免费计划中可用)。
其他很酷的事情,您可以发送异常,并且 create alert from App Insigths 会在 App Insigths 收到异常时随时向您发送电子邮件。
如果您处理来自 webjob/worker role/console app/windows 服务的服务总线消息,这篇文章可能是一个很好的起点:
因此,从 Azure 门户创建 App Insights 后,您将获得一个 InstrumentationKey。
您可以从 nuget 安装 ApplicationInsights。
要将事件发送到 App Insights,您需要实例化一个 TelemetryClient
。 Microsoft 建议每个应用只有一次遥测客户端实例,并在应用停止或重新启动时刷新 TelemetryClient:
var telemetryClient = new TelemetryClient()
{ InstrumentationKey = "MyInstrumentationKey" };
这是一个非常基本的示例,但您会明白要点的:
// Get the message
BrokeredMessage message = ...
try
{
// Process you message
...
// Delete the message from the queue when it is ok.
message.Complete();
// Create and send an event to app insights
var eventTelemetry = new EventTelemetry { Name = "MyQueueName" };
eventTelemetry.Metrics["MessageCount"] = 1;
telemetryClient.TrackEvent(eventTelemetry);
}
catch (Exception ex)
{
// Send back the message to the queue ??? depends if you'd like to re-process it
message.Abandon();
// Send the exception to app insights
telemetryClient.TrackException(ex);
}
使用此代码,您将在 App Insights 中拥有一个名为 MyQueueName 的新事件。您可以针对此事件创建仪表板和过滤器并显示
MessageCount 指标。我使用指标是因为在更复杂的情况下,您可以每 x 分钟发送一个事件并将 MessageCount 设置为在此时间间隔内处理的消息数。
我在这里使用的是 App insights,但我很确定您可以使用其他工具来做同样的事情,例如:
希望对您有所帮助!
借助最新 Azure Monitor Metrics 可以获取主题中的消息总数、传入消息、传出消息。在您的情况下,传出消息的计数将是已处理消息的数量。
我正在编写一个实用程序来监视我们的 Azure 服务总线主题和订阅。
我可以获取主题详细信息,例如名称、排队消息数和死信消息数,但我想获取已处理的消息数。
这是我使用的代码:
var sub = namespaceManager.GetSubscription(topicPath, subscriptionName);
var name = sub.Name;
var pending= sub.MessageCountDetails.ActiveMessageCount;
var deadletter = sub.MessageCountDetails.DeadLetterMessageCount
似乎 GetSubscription
不包含任何属性来获取处理的消息数。
以前有人试过吗?
自创建实体以来处理的消息数?还是从某个日期开始?以及由于客户端未能按时完成或其他一些原因而被多次处理(传递计数 > 1)的消息怎么办?这个计数不是直接的,这就是为什么不能开箱即用的原因。
为了从 Azure Servicebus 实体获取消息统计信息,我使用 Visual Studio App Insights. This is a tool to monitor apps. Basically, your app sends events to App Insights and from the Azure Portal, you can create dashboards 为您提供应用程序的实时信息。
为了监控 Azure 服务总线实体,我从我的应用程序发送自定义事件:
- 您可以看看 pricing,有一个免费计划允许您每月发送多达 500 万个自定义事件。如果您需要发送超过 500 万个事件,您可以在将事件发送到 App Insights 之前为每个 Servicebus 实体或聚合计数创建一个 App Insights。
您可以访问 7 天的原始数据和 90 天的汇总数据。
如果你使用Power BI,你可以配置一个continuous export你的数据(不要认为它在免费计划中可用)。
其他很酷的事情,您可以发送异常,并且 create alert from App Insigths 会在 App Insigths 收到异常时随时向您发送电子邮件。
如果您处理来自 webjob/worker role/console app/windows 服务的服务总线消息,这篇文章可能是一个很好的起点:
因此,从 Azure 门户创建 App Insights 后,您将获得一个 InstrumentationKey。
您可以从 nuget 安装 ApplicationInsights。
要将事件发送到 App Insights,您需要实例化一个 TelemetryClient
。 Microsoft 建议每个应用只有一次遥测客户端实例,并在应用停止或重新启动时刷新 TelemetryClient:
var telemetryClient = new TelemetryClient()
{ InstrumentationKey = "MyInstrumentationKey" };
这是一个非常基本的示例,但您会明白要点的:
// Get the message
BrokeredMessage message = ...
try
{
// Process you message
...
// Delete the message from the queue when it is ok.
message.Complete();
// Create and send an event to app insights
var eventTelemetry = new EventTelemetry { Name = "MyQueueName" };
eventTelemetry.Metrics["MessageCount"] = 1;
telemetryClient.TrackEvent(eventTelemetry);
}
catch (Exception ex)
{
// Send back the message to the queue ??? depends if you'd like to re-process it
message.Abandon();
// Send the exception to app insights
telemetryClient.TrackException(ex);
}
使用此代码,您将在 App Insights 中拥有一个名为 MyQueueName 的新事件。您可以针对此事件创建仪表板和过滤器并显示 MessageCount 指标。我使用指标是因为在更复杂的情况下,您可以每 x 分钟发送一个事件并将 MessageCount 设置为在此时间间隔内处理的消息数。
我在这里使用的是 App insights,但我很确定您可以使用其他工具来做同样的事情,例如:
希望对您有所帮助!
借助最新 Azure Monitor Metrics 可以获取主题中的消息总数、传入消息、传出消息。在您的情况下,传出消息的计数将是已处理消息的数量。