如何获取Azure存储账户操作的容器、Blob级REST API详情?
获取Azure存储账户操作的容器/Blob详情方案
你之前调用的两个API无法获取容器、Blob关联信息的原因:
- 第一个Metrics API仅提供聚合统计数据(如操作计数、响应类型),不包含具体资源的细节;
- 第二个Operations API是列出Storage服务支持的所有操作类型,并非特定存储账户的实际操作记录。
要获取包含容器、Blob详情的操作记录,需通过Azure存储诊断日志实现,步骤如下:
1. 启用存储账户的诊断设置
在Azure门户中进入目标存储账户:
- 导航至「诊断设置」→ 点击「添加诊断设置」
- 填写设置名称,勾选要收集的日志类别(如
StorageRead、StorageWrite、StorageDelete,对应Get、Put、Delete等操作) - 选择日志存储目标:
- 存储账户:将日志保存到另一个存储账户的
insights-logs-storage*容器中 - Log Analytics工作区:将日志发送到Log Analytics,便于用KQL查询
- 存储账户:将日志保存到另一个存储账户的
2. 查询操作详情
方式一:从存储账户的日志容器读取
日志以Blob形式存储,命名格式为insights-logs-storage<operation>/resourceId=/subscriptions/.../yyyy/mm/dd/hh/<guid>.json,每个日志文件包含多条操作记录,其中关键字段:
resourceId:操作对应的容器或Blob资源路径operationName:具体操作类型(如GetBlob、PutContainer)requestUri:完整请求路径,包含容器和Blob名称statusCode:操作响应状态
可通过Azure Storage Explorer直接查看,或调用Blob REST API读取日志文件内容。
方式二:用Log Analytics查询(推荐)
若日志发送到Log Analytics工作区,可使用Kusto查询语言(KQL)快速筛选所需数据,示例查询:
StorageBlobLogs | where AccountName == "你的存储账户名称" | where TimeGenerated between (datetime(2022-12-18T02:00:00Z) .. datetime(2022-12-20T02:05:00Z)) | project TimeGenerated, OperationName, ResourceId, StatusCode, RequestUri
也可通过Azure Monitor REST API调用查询:
POST https://api.loganalytics.io/v1/workspaces/{你的工作区ID}/query Content-Type: application/json { "query": "StorageBlobLogs | where AccountName == '你的存储账户名称' | project TimeGenerated, OperationName, ResourceId, StatusCode" }
注意事项
- 诊断设置需提前启用,无法回溯获取启用前的操作记录;
- 日志生成存在几分钟延迟,需等待一段时间后才能查询到最新操作;
- 需具备对应权限:如存储账户的
Storage Blob Data Reader权限(读取日志容器)、Log Analytics工作区的Log Analytics Reader权限(查询日志)。
内容的提问来源于stack exchange,提问作者noopi
相关产品推荐
相关产品推荐

