Reputation: 599
I have an Azure subscription with many Service Bus queues and topics. Is there an easy way of checking the active and deadletter message counts across all queues and topic subscriptions, without clicking through them one by one?
Upvotes: 1
Views: 503
Reputation: 599
This can be achieved by running a PowerShell script in the Azure Cloud Shell.
If all the queues and topics you're interesting in belong to one Service Bus namespace, you can use:
$resourceGroupName = <enter your resource group name here>
$namespaceName = <enter your namespace name here>
$queueMessageCounts = @()
$topicMessageCounts = @()
$queues = Get-AzServiceBusQueue -ResourceGroup $resourceGroupName -NamespaceName $namespaceName
foreach ($queue in $queues) {
$queueMessageCounts += [PSCustomObject]@{
Queue = $queue.Name
ActiveMessageCount = $queue.CountDetailActiveMessageCount
DeadLetterMessageCount = $queue.CountDetailDeadLetterMessageCount
}
}
$queueMessageCounts | Format-Table
$topics = Get-AzServiceBusTopic -ResourceGroup $resourceGroupName -NamespaceName $namespaceName
foreach ($topic in $topics) {
$subscriptions = Get-AzServiceBusSubscription -ResourceGroup $resourceGroupName -NamespaceName $namespaceName -TopicName $topic.Name
foreach ($subscription in $subscriptions) {
$topicMessageCounts += [PSCustomObject]@{
Topic = $topic.Name
Subscription = $subscription.Name
ActiveMessageCount = $subscription.CountDetailActiveMessageCount
DeadLetterMessageCount = $subscription.CountDetailDeadLetterMessageCount
}
}
}
$topicMessageCounts | Format-Table
If you want to get everything in your subscription, use:
$queueMessageCounts = @()
$topicMessageCounts = @()
$namespaces = Get-AzServiceBusNamespace
foreach ($namespace in $namespaces) {
$queues = Get-AzServiceBusQueue -ResourceGroup $namespace.ResourceGroupName -NamespaceName $namespace.Name
foreach ($queue in $queues) {
$queueMessageCounts += [PSCustomObject]@{
Namespace = $namespace.Name
Queue = $queue.Name
ActiveMessageCount = $queue.CountDetailActiveMessageCount
DeadLetterMessageCount = $queue.CountDetailDeadLetterMessageCount
}
}
$topics = Get-AzServiceBusTopic -ResourceGroup $namespace.ResourceGroupName -NamespaceName $namespace.Name
foreach ($topic in $topics) {
$subscriptions = Get-AzServiceBusSubscription -ResourceGroup $namespace.ResourceGroupName -NamespaceName $namespace.Name -TopicName $topic.Name
foreach ($subscription in $subscriptions) {
$topicMessageCounts += [PSCustomObject]@{
Namespace = $namespace.Name
Topic = $topic.Name
Subscription = $subscription.Name
ActiveMessageCount = $subscription.CountDetailActiveMessageCount
DeadLetterMessageCount = $subscription.CountDetailDeadLetterMessageCount
}
}
}
}
$queueMessageCounts | Format-Table
$topicMessageCounts | Format-Table
You can apply PowerShell commands to sort or filter the results; for example:
$queueMessageCounts | Where-Object {$_.DeadLetterMessageCount -gt 0} | Sort-Object -Property DeadLetterMessageCount -Descending | Format-Table
$topicMessageCounts | Where-Object {$_.DeadLetterMessageCount -gt 0} | Sort-Object -Property DeadLetterMessageCount -Descending | Format-Table
Upvotes: 1