监控Azure Blob容器文件:配置未及时处理文件的邮件告警方法
最简实现方案:Azure Monitor 日志告警
当然可以实现这个需求,而且用Azure原生服务就能搞定,最简方案就是利用Azure Monitor + Log Analytics来构建告警规则,不用额外写复杂代码,下面一步步给你讲:
一、先确保存储日志能被Azure Monitor采集
首先得让你的存储账户把Blob操作日志发送到Log Analytics工作区,这样我们才能查询到哪些Blob没被处理:
- 打开你的Azure存储账户,找到左侧菜单的「诊断设置」,点击「添加诊断设置」
- 给诊断设置起个名字,勾选「StorageBlobLogs」(Blob相关的操作日志)
- 目标选择「发送到Log Analytics工作区」,选择你已有的工作区,或者新建一个(新建的话按提示走就行)
- 保存设置,等10-15分钟让日志开始同步。
二、编写Kusto查询找出未处理的Blob
进入你刚才选的Log Analytics工作区,打开「日志」页面,粘贴下面的Kusto查询(记得替换成你的存储账户名和容器名):
StorageBlobLogs | where OperationName in ("PutBlob", "PutBlockList") // 匹配Blob创建的操作 | where AccountName == "your-storage-account-name" | where ContainerName == "your-container-name" | extend BlobCreatedTime = TimeGenerated // 左反连接删除操作的日志,筛选出从未被删除的Blob | join kind=leftanti ( StorageBlobLogs | where OperationName == "DeleteBlob" | where AccountName == "your-storage-account-name" | where ContainerName == "your-container-name" | project BlobName ) on BlobName // 筛选出创建超过24小时的Blob | where now() - BlobCreatedTime > 24h // 提取需要的字段:文件名、创建时间、大小 | project BlobName, BlobCreatedTime, BlobSize = tolong(Properties_s.BlobSize)
运行查询测试一下,看看能不能正确找出留存超过24小时的Blob。
三、基于查询创建邮件告警规则
接下来把这个查询变成告警规则,触发时自动发邮件:
- 在Log Analytics工作区的「警报」菜单里,点击「创建 > 警报规则」
- 信号逻辑部分:
- 信号类型选「自定义日志搜索」,然后选择你刚才写的查询
- 触发条件设为「结果计数 > 0」——也就是只要有未处理的Blob就触发告警
- 评估频率:
- 设置「评估频率」(比如每1小时评估一次),「查找数据范围」设为24小时,确保能覆盖到所有超过24小时的Blob
- 操作组:
- 点击「添加操作组」,新建一个操作组(或者用已有的)
- 在操作组里添加「电子邮件/短信/推送/语音」操作,填写接收告警的邮箱地址
- 告警内容自定义:
- 在「通知」标签里,你可以自定义邮件主题,比如「⚠️ Blob容器存在未处理文件告警」
- 要在邮件里显示文件名和大小的话,在「自定义有效负载」里可以引用查询结果的字段,比如用
@alertContext.searchResults来包含所有查询到的Blob信息,这样邮件里会列出每个未处理文件的名称、创建时间和大小
- 最后保存告警规则就大功告成了!
备选方案:Azure Logic Apps(无代码流程)
如果你不想用Log Analytics,也可以用Logic Apps来实现:
- 用「 recurrence 触发器」设置每24小时运行一次
- 添加「列出Blob」操作,指定你的存储账户和容器
- 添加「筛选数组」操作,筛选出「创建时间」小于当前时间减24小时的Blob
- 添加「条件判断」,如果筛选后的数组不为空,就触发「发送电子邮件」操作,把Blob的名称和大小作为邮件内容插入进去
这个方案也是无代码,但相比Monitor的方案,需要手动搭建流程,适合对Logic Apps更熟悉的场景。
总结一下,Azure Monitor + Log Analytics是最简的方案,因为完全利用Azure原生服务集成,配置完成后自动运行,不用维护额外的代码或流程。
内容的提问来源于stack exchange,提问作者AskMe
相关产品推荐
相关产品推荐

