如何通过 http 访问 Azure 存储日志?
How to access Azure Storage Logs via http?
我看到的文献表明您应该能够使用 url 访问 Azure 存储容器 (somectr
) 中的日志文件,例如:
http://somectr.blob.core.windows.net/$logs?restype=container&comp=list&prefix=blob/2015/08/28/0900/000000.log
并获取该日期的日志文件目录:
http://somectr.blob.core.windows.net/$logs?restype=container&comp=list&prefix=blob/2015/08/
但是我在执行此操作时收到 404 错误。我认为这表明该对象没有访问权限。
我可以在 Azure 存储资源管理器中看到日志文件,甚至可以查看它,但存储资源管理器不允许我编辑对此容器的访问权限(尽管我可以在其他(非系统)容器上编辑)。列出了实际的日志文件,并且存在(我什至可以使用资源管理器查看它,但我想要通过 http 访问它。
我什至在 Azure 门户或 Azure Preveiw 门户中也看不到 $log 容器,我可以在其中授予 public 访问权限或其他内容。
是不是我找的引用有误?是无法通过 http 浏览器访问日志,还是我忽略了什么?
您收到此错误的原因是因为 $logs
容器的 ACL 设置为 Private
因此未经身份验证的请求失败并显示 404(未找到)错误。 请将此容器的 ACL 从 Private
更改为 Blob
(或 Container
),然后您应该可以直接访问日志。
更新
由于 $logs
是系统生成的容器,您无法更改它的 ACL(这就是为什么您在尝试执行此操作时会收到此 403 错误)。您需要做的是在此容器上创建一个具有 Read
和 List
权限的 Shared Access Signature
。您只能为此使用 Azure 存储资源管理器(请参见下面的屏幕截图)。
要列出该容器中的 blob,只需将 comp=list&restype=container
添加到 SAS URL。当您将 URL 放入浏览器的地址栏时,您应该能够看到 blob 列表。
<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ServiceEndpoint="http://account.blob.core.windows.net/" ContainerName="$logs">
<Blobs>
<Blob>
<Name>blob/2015/01/16/1300/000000.log</Name>
<Properties>
<Last-Modified>Fri, 16 Jan 2015 13:50:16 GMT</Last-Modified><Etag>0x8D1FFAA7E1ECE77</Etag>
<Content-Length>1819</Content-Length>
<Content-Type>application/octet-stream</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-MD5 />
<Cache-Control />
<Content-Disposition />
<BlobType>BlockBlob</BlobType>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
</Properties>
</Blob>
</Blobs>
</EnumartionResults>
...
要查看 blob,只需在 SAS URL 中 container name
之后和 ?
之前插入 blob 名称,如下所示:
http://accountname.blob.core.windows.net/$logs/blob/2015/01/16/1300/000000.log?sv=2014-02-14&sr=c&sig=sAmaOtRqXqyedQEfmDGsoCPxGXUUcMO43GhimoPjbxA%3D&st=2015-09-01T18%3A30%3A00Z&se=2015-09-09T18%3A30%3A00Z&sp=rl
将此 URL 粘贴到浏览器的地址栏后,您应该能够看到日志。
我看到的文献表明您应该能够使用 url 访问 Azure 存储容器 (somectr
) 中的日志文件,例如:
http://somectr.blob.core.windows.net/$logs?restype=container&comp=list&prefix=blob/2015/08/28/0900/000000.log
并获取该日期的日志文件目录:
http://somectr.blob.core.windows.net/$logs?restype=container&comp=list&prefix=blob/2015/08/
但是我在执行此操作时收到 404 错误。我认为这表明该对象没有访问权限。
我可以在 Azure 存储资源管理器中看到日志文件,甚至可以查看它,但存储资源管理器不允许我编辑对此容器的访问权限(尽管我可以在其他(非系统)容器上编辑)。列出了实际的日志文件,并且存在(我什至可以使用资源管理器查看它,但我想要通过 http 访问它。
我什至在 Azure 门户或 Azure Preveiw 门户中也看不到 $log 容器,我可以在其中授予 public 访问权限或其他内容。
是不是我找的引用有误?是无法通过 http 浏览器访问日志,还是我忽略了什么?
您收到此错误的原因是因为 $logs
容器的 ACL 设置为 Private
因此未经身份验证的请求失败并显示 404(未找到)错误。 请将此容器的 ACL 从 Private
更改为 Blob
(或 Container
),然后您应该可以直接访问日志。
更新
由于 $logs
是系统生成的容器,您无法更改它的 ACL(这就是为什么您在尝试执行此操作时会收到此 403 错误)。您需要做的是在此容器上创建一个具有 Read
和 List
权限的 Shared Access Signature
。您只能为此使用 Azure 存储资源管理器(请参见下面的屏幕截图)。
要列出该容器中的 blob,只需将 comp=list&restype=container
添加到 SAS URL。当您将 URL 放入浏览器的地址栏时,您应该能够看到 blob 列表。
<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ServiceEndpoint="http://account.blob.core.windows.net/" ContainerName="$logs">
<Blobs>
<Blob>
<Name>blob/2015/01/16/1300/000000.log</Name>
<Properties>
<Last-Modified>Fri, 16 Jan 2015 13:50:16 GMT</Last-Modified><Etag>0x8D1FFAA7E1ECE77</Etag>
<Content-Length>1819</Content-Length>
<Content-Type>application/octet-stream</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-MD5 />
<Cache-Control />
<Content-Disposition />
<BlobType>BlockBlob</BlobType>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
</Properties>
</Blob>
</Blobs>
</EnumartionResults>
...
要查看 blob,只需在 SAS URL 中 container name
之后和 ?
之前插入 blob 名称,如下所示:
http://accountname.blob.core.windows.net/$logs/blob/2015/01/16/1300/000000.log?sv=2014-02-14&sr=c&sig=sAmaOtRqXqyedQEfmDGsoCPxGXUUcMO43GhimoPjbxA%3D&st=2015-09-01T18%3A30%3A00Z&se=2015-09-09T18%3A30%3A00Z&sp=rl
将此 URL 粘贴到浏览器的地址栏后,您应该能够看到日志。