我正在尝试使用 Log Analytics 从 Azure 存储帐户获取特定队列中的消息计数,以便最终在仪表板上发布。
预先感谢您的帮助
最佳答案
我们已在本地环境中对此进行了测试,以下陈述基于我们的分析。
- 在日志分析中使用一些
kql 查询
,您只能提取在存储帐户上执行的以下操作的日志
- 存储读取
- 存储写入
- 存储删除
Azure Monitor 提供了多种与指标交互的方法,包括在 Azure 门户中绘制图表、通过 REST API 访问它们或使用 PowerShell 或 Azure CLI 查询它们。自动收集的所有平台指标均可通过整合的指标管道获得。
- 使用 Azure 门户中的
平台指标
,我们可以获取帐户级别的所有指标(QueueCapacity、QueueCount、QueueMessageCount
),如下所示。
- 如果您想使用日志分析来提取每个队列的消息计数,这是不可能的。
或者,您可以创建一个计时器触发器
函数来监控队列的长度,如 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"
}
}
以下是供引用的示例输出:
关于azure - 如何获取 Azure Log Analytics 中特定 Azure 存储队列中的消息计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70551808/