【问题标题】:How do I get the count of messages in a particular Azure Storage queue in Azure Log Analytics如何在 Azure Log Analytics 中获取特定 Azure 存储队列中的消息计数
【发布时间】:2022-01-01 20:54:50
【问题描述】:

我正在尝试使用 Log Analytics 从 Azure 存储帐户获取特定队列中的消息计数,以最终在仪表板上发布。

提前感谢您的帮助

【问题讨论】:

  • 我针对类似问题的解决方法是在我的函数应用程序中添加自定义日志条目,因此每次触发函数应用程序时,我都会将队列(服务总线)中的活动消息数记录为应用程序日志。然后,我有一个自定义 kql 查询,用于查找这些日志条目并将它们呈现在 Azure DevOps 仪表板中

标签: azure azure-storage azure-log-analytics azure-queues


【解决方案1】:

我们已在本地环境中对此进行了测试,以下陈述基于我们的分析。

  • 在日志分析中使用一些 kql queries,您只能提取对存储帐户执行的以下操作的日志
  1. 存储读取
  2. 存储写入
  3. 存储删除

Azure Monitor 提供了多种与指标交互的方法,包括在 Azure 门户中绘制图表、通过 REST API 访问它们,或者使用 PowerShell 或 Azure CLI 查询它们。自动收集的所有平台指标都可用于整合指标管道。

  • 在 Azure 门户中使用 platform metrics,我们可以获得帐户级别的所有指标 (QueueCapacity,QueueCount,QueueMessageCount),如下所示。

  • 如果您想使用 Log Analytics 提取每个队列的消息计数,这是不可能的。

或者,您可以创建一个Timer trigger 函数来监控队列的长度,如this 博客文章中所述。

  • 我们已经在本地环境中对此进行了测试,效果很好。

这是function.cs文件中的代码

using System;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    using Azure.Storage.Queues;
    
    namespace FunctionApp3
    {
        public static class Function1
        {
            [FunctionName("Function1")]
            public static void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log)
            {
                log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
                var value = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
                var queueNames = "<queueName>";
                var queueClient = new QueueClient(value, queueNames);
                int count = 0;
                foreach (var message in queueClient.ReceiveMessages(maxMessages:32).Value)
                {
                    count=count+1;
                }
                log.LogInformation($"current queueLength :{count}");
            }
        }
    }
 

这是我们的 local.setting.json 文件中的设置

    {
        "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "StrgAccountConnectionString"
        "FUNCTIONS_WORKER_RUNTIME": "dotnet"
      }
    }

这是供参考的示例输出:

【讨论】:

    猜你喜欢
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多