WebJobs SDK在AzureWebJobsDashboard连接中创建的blob清理机制是什么?

时间:2017-04-06 15:22:25

标签: azure azure-webjobs azure-webjobssdk

Azure WebJob SDK使用AzureWebJobsStorageAzureWebJobsDashboard应用设置中定义的存储连接字符串作为其日志记录和信息中心。

WebJob SDK在AzureWebJobsStorage中创建以下blob容器:

  • azure-webjobs-hosts

WebJob SDK在AzureWebJobsDashboard

中创建以下blob容器
  • azure-jobs-host-output
  • azure-webjobs-hosts

随着WebJob的运行,在上面的blob容器中创建了许多blob。如果没有清理机制,容器可能膨胀或饱和。

上述blob容器的清理机制是什么?

更新

以下答案是一种解决方法。此时,没有内置机制来清理WebJobs日志。作业长期运行时,日志可能会堆积很大。开发人员必须自己创建清理机制。 Azure Functions是实现此类清理过程的好方法。以下答案中提供了一个示例。

1 个答案:

答案 0 :(得分:2)

  

WebJobs SDK在AzureWebJobsDashboard连接中创建的Blob的清理机制是什么?

我还没有办法做到这一点。 GitHub上有一个与此主题相关的未解决的问题,但尚未结束。

No way to set webjob logging retention policy

在GitHub上的类似问题中,我们发现Azure WebJob SDK已经改变了一种将日志保存到Azure表存储的多表的方法。我们可以轻松删除每月的表格。对于在Azure Blob Storage中写入的日志,到目前为止还没有按月分组。

enter image description here

WebJobs.Logging needs to support log purge / retention policies

要删除旧的WebJob日志,我建议您创建一个时间触发的WebJob来删除您想要的日志。

  

是否有任何AzureFunction代码示例显示如何进行blob清理?

以下代码供您参考。

// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);

// Create the table client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve a reference to a container.
var container = blobClient.GetContainerReference("azure-webjobs-hosts");
// Query out all the blobs which created after 30 days
var blobs = container.GetDirectoryReference("output-logs").ListBlobs().OfType<CloudBlob>()
    .Where(b => b.Properties.LastModified < new DateTimeOffset(DateTime.Now.AddDays(-30)));
// Delete these blobs
foreach (var item in blobs)
{
    item.DeleteIfExists();
}