【问题标题】:How to access Azure Storage Logs via http?如何通过 http 访问 Azure 存储日志?
【发布时间】:2015-09-02 22:20:12
【问题描述】:

我看到文献表明您应该能够使用以下 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 容器,在那里我可能能够授予公共访问权限或其他东西。

我发现的参考文献有误吗? http-browser 访问日志是不可能的,还是我忽略了什么?

【问题讨论】:

    标签: azure azure-storage azure-blob-storage


    【解决方案1】:

    您收到此错误的原因是因为 $logs 容器的 ACL 设置为 Private,因此未经身份验证的请求因 404(未找到)错误而失败。 请将此容器的ACL从Private更改为Blob(或Container),然后您应该可以直接访问日志了。

    更新

    由于$logs 是系统生成的容器,您无法更改它的 ACL(这就是您在尝试执行此操作时收到此 403 错误的原因)。您需要做的是在此容器上创建一个具有 ReadList 权限的 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-001T18%3A3%Z -09T18%3A30%3A00Z&sp=rl

    在浏览器的地址栏中粘贴此 URL 后,您应该能够看到日志。

    【讨论】:

    • 我是这么想的,但是我该如何更改ACL呢?是否只有 API 解决方案?
    • 我已经有一段时间没有使用 Azure 存储资源管理器了,但是您应该可以更改 ACL。除此之外,还有许多支持此功能的存储浏览器。 HTH。
    • 它具有该功能,但我得到“设置 blob 容器权限时出错:远程服务器返回错误:(403)禁止。”这当然是我的问题。我已经走到这一步了。
    • 您是仅在此操作或其他操作中收到 403 错误吗?
    • 对不起...我的错 :(。$logs 是一个特殊的容器,你不能更改它的 ACL。我们需要用另一种方式来做。让我更新我的答案过一会儿。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2018-06-25
    • 2020-10-10
    • 2016-12-10
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多