Azure WebJob SDK使用AzureWebJobsStorage
和AzureWebJobsDashboard
应用设置中定义的存储连接字符串作为其日志记录和信息中心。
WebJob SDK在AzureWebJobsStorage
中创建以下blob容器:
azure-webjobs-hosts
WebJob SDK在AzureWebJobsDashboard
azure-jobs-host-output
azure-webjobs-hosts
随着WebJob的运行,在上面的blob容器中创建了许多blob。如果没有清理机制,容器可能膨胀或饱和。
上述blob容器的清理机制是什么?
更新
以下答案是一种解决方法。此时,没有内置机制来清理WebJobs日志。作业长期运行时,日志可能会堆积很大。开发人员必须自己创建清理机制。 Azure Functions是实现此类清理过程的好方法。以下答案中提供了一个示例。
答案 0 :(得分:2)
WebJobs SDK在AzureWebJobsDashboard连接中创建的Blob的清理机制是什么?
我还没有办法做到这一点。 GitHub上有一个与此主题相关的未解决的问题,但尚未结束。
No way to set webjob logging retention policy
在GitHub上的类似问题中,我们发现Azure WebJob SDK已经改变了一种将日志保存到Azure表存储的多表的方法。我们可以轻松删除每月的表格。对于在Azure Blob Storage中写入的日志,到目前为止还没有按月分组。
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();
}