如何找到 Azure 存储帐户上的热 LRS 写入操作的来源?

How can I find the source of my Hot LRS Write Operations on Azure Storage Account?

我们正在使用 Azure 存储帐户来存储一些文件,这些文件应由我们的应用程序根据用户需求下载。

即使不应该有写入操作(至少 none 我能想到),我们在计费周期的几天内超出了包含的写入操作(见图)。

关于价格,还是在限制范围内,但我还是想知道这是否正常,如何分析。除了我们使用的存储

但其中 none 应该会导致那么多写入操作。我检查了我们函数的日志,none 那些访问队列或 blob 的日志最近一直处于活动状态。有一些功能 运行 偶尔会出现,但每隔几分钟才出现一次,而且这些功能根本不访问存储。

我不知道这是否相关,但我们的 blob 存储有一种周期性的侵入(见下图)。周期为 1 小时左右,但基线为每 5 分钟 100 kB。

进一步分析存储帐户的指标,我发现 blob 每小时有 1.90k 个事务,队列每小时有 1.3k 个事务,这对我来说似乎很特别。 (请注意,此图的分辨率为1小时,而前者的分辨率为5分钟)

我还能做些什么来分析写操作来自哪里?这有点困扰我,因为它似乎不应该是那样的。

查找有关存储使用情况的信息的最佳位置是使用 Storage Analytics especially Storage Analytics Logging

同一存储帐户中有一个名为 $logs 的特殊 blob 容器,其中包含针对该存储帐户执行的每个操作的详细信息。您可以查看该 blob 容器中的 blob 并查找信息。

如果您在存储帐户中没有看到此 blob 容器,则需要在存储帐户上启用存储分析。但是考虑到您可以看到指标数据,我猜它已经启用了。

关于这些写入操作的来源,您是否为您的功能和应用服务启用了诊断?这些将诊断日志写入 blob 存储。此外,存储分析也在写入同一个帐户,这也会导致这些写入操作。

我遇到了完全相同的问题;在启用存储分析并检查 $logs 容器后,我发现许多日志条目表明,在对我的 Azure Functions 发出每个请求时,这些写入操作针对以下容器对象发生:

https://[function-name].blob.core.windows.net:443/azure-webjobs-hosts/locks/linkfunctions/host?comp=lease

在我的 Azure Functions 代码中,我没有明确写入任何容器或文件,但我配置了以下两个应用程序设置:

  • AzureWebJobsDashboard
  • AzureWebJobsStorage

所以我在 Azure 中填写了一个支持代码,其中包含以下问题:

  1. 写入操作是由这些应用程序设置触发的吗?我 相信是这样,但请您确认一下。
  2. 如果删除这些应用程序设置,写操作会停止吗?
  3. 您能否概括地描述这些操作在什么上下文中发生(例如日志记录?资源锁定,其他?)

我分别从 Azure 支持团队得到以下答复:

  1. 是的,你是对的。根据日志信息,我们可以看到“https://[function-name].blob.core.windows.net:443/azure-webjobs-hosts/locks/linkfunctions/host?comp=lease”。 这个 azure-webjobs-hosts 文件夹与函数应用相关联,它是默认创建的,也是创建函数应用的。当function app为运行时,它会将这些日志记录在配置为AzureWebJobsStorage.
  2. 的存储账户中
  3. 无法停止写入操作,因为这些操作会将必要的日志记录到 Azure Functions 运行时使用的存储帐户中。请不要删除应用程序设置 AzureWebJobsStorage。 Azure Functions 运行时将此存储帐户连接字符串用于除 HTTP 触发函数之外的所有函数。删除此应用程序设置将导致您的函数应用程序无法启动。顺便说一句,您可以删除 AzureWebJobsDashboard 它将停止 Monitor 而不是上面的操作。
  4. 这些操作是为了记录函数应用的运行日志。这些操作将在我们的后端为 运行 函数 app.
  5. 分配实例时发生

就我而言,我有一个 Azure App Insight,它每分钟在其存储中为功能和应用程序服务处理 10K 个事务,即使其中只有很少的 https 请求。我不确定是什么触发了它们,但是一旦我删除了应用洞察,一切都变得正常了。