Azure 存储分析日志记录
存储分析记录成功和失败的存储服务请求的详细信息。 可以使用该信息监视各个请求和诊断存储服务问题。 将最大程度地记录请求。 这意味着,大多数请求将生成日志记录,但不保证存储分析日志的完整性和及时性。
注意
建议你使用 Azure Monitor 中的 Azure 存储日志,而不是存储分析日志。 若要了解详细信息,请参阅以下任一文章:
默认未对存储帐户启用存储分析日志记录。 可以在 Azure 门户中启用它,也可以使用 PowerShell 或 Azure CLI 启用它。 有关分步指南,请参阅启用和管理 Azure 存储分析日志(经典)。
还可以通过 REST API 或客户端库以编程方式启用存储分析日志。 使用获取 Blob 服务属性、获取队列服务属性和获取表服务属性操作为每个服务启用存储分析。 若要查看使用 .NET 启用存储分析日志的示例,请参阅启用日志
仅在针对服务终结点发出请求时才会创建日志条目。 例如,如果存储帐户的 Blob 终结点中存在活动,而表或队列终结点中没有该活动,则仅创建与 Blob 服务有关的日志。
注意
存储分析日志记录现仅可用于 Blob、队列和表服务。 存储分析日志记录也可用于高性能 BlockBlobStorage 帐户。 但是,它不适用于具有高级性能的常规用途 v2 帐户。
日志记录中记录的请求
记录经过身份验证的请求
将记录以下类型的经过身份验证的请求:
成功的请求
失败的请求,包括超时、限制、网络、授权和其他错误
使用共享访问签名 (SAS) 或 OAuth 的请求,包括失败和成功的请求
分析数据请求
不会记录存储分析本身发出的请求,如创建或删除日志。 存储分析记录的操作和状态消息及存储分析日志格式主题中提供了所记录数据的完整列表。
记录匿名请求
记录以下类型的匿名请求:
成功的请求
服务器错误
客户端和服务器的超时错误
失败的 GET 请求,错误代码为 304(未修改)
不会记录所有其他失败的匿名请求。 存储分析记录的操作和状态消息及存储分析日志格式主题中提供了所记录数据的完整列表。
注意
存储分析将所有内部调用记录到数据平面。 还会记录来自 Azure 存储资源提供程序的调用。 若要标识这些请求,请在请求 URL 中查找查询字符串 <sk=system-1>
。
如何存储日志
所有日志均以块 blob 的形式存储在一个名为 $logs
的容器中,为存储帐户启用存储分析时将自动创建该容器。 $logs
容器位于存储帐户的 blob 命名空间中,例如:http://<accountname>.blob.core.chinacloudapi.cn/$logs
。 在启用存储分析后,无法删除该容器,但可以删除其内容。 如果使用存储浏览工具直接导航到容器,将看到包含日志记录数据的所有 blob。
注意
执行容器列出操作(例如列出容器操作)时,不会显示 $logs
容器。 必须直接访问该容器。 例如,可以使用列出 blob 操作访问 $logs
容器中的 blob。
在记录请求时,存储分析将中间结果作为块进行上传。 存储分析定期提交这些块,并将其作为 Blob 提供。 根据存储服务刷新日志编写器的频率,日志数据可能需要长达一小时的时间,才能显示在 $logs 容器的 blob 中。 在同一小时内创建的日志中可能存在重复的记录。 可以通过检查 RequestId 和操作编号确定记录是否为重复记录。
如果你每小时都有包含多个文件的大量日志数据,则可检查 blob 元数据字段,以便使用 blob 元数据确定日志中包含的数据。 这样做也是很有用的,因为将数据写入日志文件时,有时可能存在延迟:使用 blob 元数据与使用 blob 名称相比,可以更准确地指示 blob 内容。
你可以使用大多数存储浏览工具查看 blob 的元数据;你也可以通过 PowerShell 或编程方式读取此信息。 下面的 PowerShell 代码片段是一个示例,该示例说明了如何按名称筛选日志 blob 的列表来指定时间,以及如何按元数据进行筛选以仅标识包含“写入”操作的日志。
Get-AzStorageBlob -Container '$logs' |
Where-Object {
$_.Name -match 'blob/2014/05/21/05' -and
$_.ICloudBlob.Metadata.LogType -match 'write'
} |
ForEach-Object {
"{0} {1} {2} {3}" -f $_.Name,
$_.ICloudBlob.Metadata.StartTime,
$_.ICloudBlob.Metadata.EndTime,
$_.ICloudBlob.Metadata.LogType
}
有关以编程方式列出 blob 的信息,请参阅枚举 blob 资源以及设置并检索 blob 资源的属性和元数据。
日志命名约定
每个日志都使用以下格式写入:
<service-name>/YYYY/MM/DD/hhmm/<counter>.log
下表说明了日志名称中的每个属性:
属性 | 说明 |
---|---|
<service-name> |
存储服务的名称 例如,blob 、table 或 queue |
YYYY |
用四位数表示的日志年份。 例如: 2011 |
MM |
用两位数表示的日志月份。 例如: 07 |
DD |
用两位数表示的日志日期。 例如: 31 |
hh |
用两位数表示的日志起始小时,采用 24 小时 UTC 格式。 例如: 18 |
mm |
用两位数表示的日志起始分钟。 注意:最新版本的存储分析不支持此值,其值始终为 00 。 |
<counter> |
从零开始且具有六位数字的计数器,表示在 1 小时内为存储服务生成的日志 Blob 数。 此计数器从 000000 开始。 例如: 000001 |
下面是组合上述示例的完整示例日志名称:
blob/2011/07/31/1800/000001.log
下面是一个可用于访问上述日志的示例 URI:
https://<accountname>.blob.core.chinaloudapi.cn/$logs/blob/2011/07/31/1800/000001.log
在记录存储请求时,生成的日志名称与完成请求的操作时间(小时)关联。 例如,如果在 2011 年 7 月 31 日下午 6:30 完成 GetBlob 请求,则会写入具有以下前缀的日志:blob/2011/07/31/1800/
日志元数据
所有日志 Blob 与可用于确定 Blob 包含哪些日志记录数据的元数据一起存储。 下表说明了每个元数据属性:
属性 | 说明 |
---|---|
LogType |
描述日志是否包含与读取、写入或删除操作有关的信息。 该值可能包含一种类型,也可能包含所有三种类型的组合并用逗号隔开。 示例 1: write 示例 2: read,write 示例 3: read,write,delete |
StartTime |
日志中条目的最早时间,采用 YYYY-MM-DDThh:mm:ssZ 形式。 例如: 2011-07-31T18:21:46Z |
EndTime |
日志中条目的最晚时间,采用 YYYY-MM-DDThh:mm:ssZ 形式。 例如: 2011-07-31T18:22:09Z |
LogVersion |
日志格式的版本。 |
下表显示了使用上述示例的完整示例元数据:
LogType=write
StartTime=2011-07-31T18:21:46Z
EndTime=2011-07-31T18:22:09Z
LogVersion=1.0
日志项
以下部分显示了每个受支持的 Azure 存储服务的示例日志项。
Blob 存储的示例日志项
2.0;2022-01-03T20:34:54.4617505Z;PutBlob;SASSuccess;201;7;7;sas;;logsamples;blob;https://logsamples.blob.core.chinacloudapi.cn/container1/1.txt?se=2022-02-02T20:34:54Z&sig=XXXXX&sp=rwl&sr=c&sv=2020-04-08&timeout=901;"/logsamples/container1/1.txt";xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx;0;172.16.0.0:53371;2019-12-12;654;13;337;0;13;"xxxxxxxxxxxxxxxxxxxxx==";"xxxxxxxxxxxxxxxxxxxxx==";""0x8D9CEF88004E296"";Monday, 03-Jan-22 20:34:54 GMT;;"Microsoft Azure Storage Explorer, 1.20.1, win32, azcopy-node, 2.0.0, win32, AzCopy/10.11.0 Azure-Storage/0.13 (go1.15; Windows_NT)";;"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx";;;;;;;;
Blob 存储的示例日志条目(已启用 Data Lake Storage)
2.0;2022-01-04T22:50:56.0000775Z;RenamePathFile;Success;201;49;49;authenticated;logsamples;logsamples;blob;"https://logsamples.dfs.core.chinacloudapi.cn/my-container/myfileorig.png?mode=legacy";"/logsamples/my-container/myfilerenamed.png";xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx;0;172.16.0.0;2020-04-08;591;0;224;0;0;;;;Friday, 11-Jun-21 17:58:15 GMT;;"Microsoft Azure Storage Explorer, 1.19.1, win32 azsdk-js-storagedatalake/12.3.1 (NODE-VERSION v12.16.3; Windows_NT 10.0.22000)";;"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx";;;;;;;;
队列存储的示例日志项
2.0;2022-01-03T20:35:04.6097590Z;PeekMessages;Success;200;5;5;authenticated;logsamples;logsamples;queue;https://logsamples.queue.core.chinacloudapi.cn/queue1/messages?numofmessages=32&peekonly=true&timeout=30;"/logsamples/queue1";xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx;0;172.16.0.0:53385;2020-04-08;536;0;232;62;0;;;;;;"Microsoft Azure Storage Explorer, 1.20.1, win32 azsdk-js-storagequeue/12.3.1 (NODE-VERSION v12.16.3; Windows_NT 10.0.22000)";;"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx";;;;;;;;
表存储的示例日志项
1.0;2022-01-03T20:35:13.0719766Z;CreateTable;Success;204;30;30;authenticated;logsamples;logsamples;table;https://logsamples.table.core.chinacloudapi.cn/Tables;"/logsamples/Table1";xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx;0;172.16.0.0:53389;2018-03-28;601;22;339;0;22;;;;;;"Microsoft Azure Storage Explorer, 1.20.1, win32, Azure-Storage/2.10.3 (NODE-VERSION v12.16.3; Windows_NT 10.0.22000)";;"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"