Azure 存储队列监控:追踪单个队列长度
简而言之:Azure 存储队列缺乏内置的单个队列长度指标。但是,您可以使用 Azure SDK 查询 approximate_message_count
并追踪每个队列的长度。使用 OpenTelemetry 将此数据作为自定义指标发出。一个示例项目可用于通过 Azure 函数自动化此过程,实现可靠且可扩展的监控。
如果您使用 Azure 存储队列,并且需要(或者只是想要)单独监控每个队列的长度,那么我有一些坏消息。?
Azure 只通过其内置指标功能提供整个存储帐户的总消息数指标。不幸的是,如果您需要追踪单个队列的消息数,这使得这些内置指标不太有用。
上图显示了内置指标的示例。在任何给定时间都有两个队列,但我们无法识别各个队列中有多少消息。筛选功能被禁用,并且没有针对队列消息计数的特定指标,如下所示。
为什么监控单个队列长度很重要?
监控单个队列长度可能很重要,原因如下。例如,如果您管理多个队列,您可能希望:
无论您是在调试还是缩放,了解每个队列的消息计数都有助于保持系统的健康。
好消息?
虽然 Azure 没有提供开箱即用的此功能,但有一个简单的解决方法,本博文将引导您完成此过程。
如前所述,Azure 没有将单个存储队列长度作为内置指标提供。鉴于人们在过去五年中一直在要求此功能,对于 Microsoft 来说,将其作为标准指标实现可能并非一项简单的任务。因此,找到一种解决方法可能是您的最佳选择。
自然地,这导致了这样一个问题:如果标准指标没有提供此功能,还有其他方法可以获取它吗? ?
仔细查看 Azure 存储帐户 SDK 会发现队列属性 approximate_message_count
,它可以让您访问所需的信息——只是通过不同的方法。
知道了这一点,如果您能够使用此数据将队列长度作为指标进行追踪,岂不是很好?
这是一个想法:如果您这样做呢??
您可以查询每个队列的长度,创建指标量规并定期更新值。
让我们逐步分解它。
使用 Python SDK,您可以轻松检索队列的单个长度。请参见下面的代码片段:
<code class="language-python">from azure.identity import DefaultAzureCredential from azure.storage.queue import QueueClient STORAGE_ACCOUNT_URL = "<storage-account-url>" QUEUE_NAME = "<queue-name>" STORAGE_ACCOUNT_KEY = "<key>" credentials = STORAGE_ACCOUNT_KEY or DefaultAzureCredential() client = QueueClient( STORAGE_ACCOUNT_URL, queue_name=QUEUE_NAME, credential=credentials, ) try: properties = client.get_queue_properties() message_count = properties.approximate_message_count print(message_count) except Exception as e: logger.exception(e)</code>
由于 SDK 建立在 REST API 之上,因此其他 SDK 中也提供了类似的功能。以下是其他语言中 REST API 和 SDK 的参考:
接下来,您创建一个量规指标来追踪队列长度。
量规 是一种测量特定时间点值的指标类型,使其非常适合追踪不断变化的队列长度。
为此,我们将使用 OpenTelemetry,这是一个开源可观察性框架,因其在收集指标、追踪和日志方面的多功能性而越来越受欢迎。 以下是使用 OpenTelemetry 发出队列长度作为量规的示例:
<code class="language-python">from opentelemetry.metrics import Meter, get_meter_provider meter = get_meter_provider().get_meter(METER_NAME) gauge = meter.create_gauge( name=gauge_name, description=gauge_description, unit="messages" ) new_length = None ⋮ # 获取 approximate_message_count 并将其设置为 new_length 的代码 gauge.set(new_length)</code>
OpenTelemetry 的另一个优点是它与各种可观察性工具(如 Prometheus、Azure Application Insights、Grafana 等)的集成非常好。
虽然上述方法非常适合实验,但您可能需要一个更强大的解决方案来适应生产环境。这就是弹性和可扩展性发挥作用的地方。
在生产环境中,持续监控队列不仅仅是提取指标。您需要确保系统可靠、能够根据需求进行扩展,并能够处理潜在的故障(例如网络问题或大量数据)。例如,您不希望失败的查询会停止您的监控过程。
如果您有兴趣了解如何使其适应生产环境,我已经创建了一个示例项目:azure-storage-queue-monitor。此项目将我们讨论的所有内容包装到一个在计时器触发器上运行的 Azure 函数中。它处理弹性、并发性和可扩展性,确保您可以可靠地监控队列。
现在您已经掌握了追踪单个队列长度并将其作为自定义指标发出的步骤,您可以为自己的环境设置此功能。如果您尝试一下,请随时分享您的经验或改进——我很乐意听到您的想法,并在您遇到任何问题时提供帮助!
祝您队列监控愉快!?
以上是如何监视各个 Azure 存储队列的长度的详细内容。更多信息请关注PHP中文网其他相关文章!