为什么无法通过新的 Azure 门户配置 Azure 诊断以使用 Azure 表存储?

2023-11-24

我正在开发一个将托管在 Azure 中的 Web api。我想使用 Azure 诊断将错误记录到 Azure 表存储中。 在经典门户中,我可以将日志配置为转到 Azure 表存储。

经典门户诊断设置

然而,在新的 Azure 门户中,我唯一的存储选项是使用 Blob 存储:

新的 Azure 门户设置

看来,如果我要使用 Web 角色,我可以配置用于诊断的数据存储,但是当我开发 Web api 时,我不想为每个 api 创建单独的 Web 角色,这样我就可以登录到天蓝色的表。

有没有一种方法可以以编程方式配置 azure 诊断以将日志消息传播到特定数据存储,而无需使用 Web 角色?新的 Azure 门户仅具有 Blob 存储的诊断设置,而没有表存储的诊断设置,是否有任何原因?

我目前可以通过使用经典门户来解决该问题,但我担心用于诊断的表存储最终将被弃用,因为它尚未包含在新门户的诊断设置中。


(我将对这个问题做一些死灵术,因为这是我在寻找解决方案时发现的最相关的 StackOverflow 问题,因为不再可能通过经典门户来做到这一点)

免责声明:微软似乎已经删除了对登录到 Azure 门户中的表的支持,所以我不知道这是否已被弃用或即将被弃用,但我有一个现在可以使用的解决方案(2017 年 3 月 31 日):

有一些特定的设置决定日志记录,我首先从 Azure Powershell github 中的一个问题中找到了这方面的信息:https://github.com/Azure/azure-powershell/issues/317

我们需要的具体设置是(来自github):

AzureTableTrace Enabled = True,在 AppSettings 中有:诊断 AZURETABLESASURL

使用优秀的资源浏览器(https://resources.azure.com)在(GUI 导航)下:

/subscriptions/{subscriptionName}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/config/logs

我能够在属性中找到设置 AzureTableTraceEnabled。

属性 AzureTableTraceEnabled 具有 Level 和 sasURL。根据我的经验,更新这两个值(Level =“Verbose”,sasUrl =“someSASurl”)将起作用,因为更新 sasURL 在 appsettings 中设置 DIAGNOSTICS_AZURETABLESASURL 。

我们如何改变这一点?我是在 Powershell 中完成的。我第一次尝试了 cmdlet Get-AzureRmWebApp,但找不到我想要的东西 - 旧的 Get-AzureWebSite 确实显示 AzureTableTraceEnabled,但我无法更新它(也许具有更多 powershell\azure 经验的人可以输入有关如何使用 ASM cmdlet 来执行此操作)。

对我有用的解决方案是通过 Set-AzureRmResource 命令设置属性,并进行以下设置:

Set-AzureRmResource -PropertyObject $PropertiesObject -ResourceGroupName "$ResourceGroupName" -ResourceType Microsoft.Web/sites/config -ResourceName "$ResourceName/logs" -ApiVersion 2015-08-01 -Force

其中 $PropertiesObject 如下所示:

$PropertiesObject = @{applicationLogs=@{azureTableStorage=@{level="$Level";sasUrl="$SASUrl"}}}

级别对应于“错误”、“警告”、“信息”、“详细”和“关闭”。

也可以在 ARM 模板中执行此操作(重要位位于站点中日志资源的属性中):

        {
            "apiVersion": "2015-08-01",
            "name": "[variables('webSiteName')]",
            "type": "Microsoft.Web/sites",
            "location": "[resourceGroup().location]",
            "tags": {
                "displayName": "WebApp"
            },
            "dependsOn": [
                "[resourceId('Microsoft.Web/serverfarms/', variables('hostingPlanName'))]"
            ],
            "properties": {
                "name": "[variables('webSiteName')]",
                "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]"
            },
            "resources": [
            {
                "name": "logs",
                "type": "config",
                "apiVersion": "2015-08-01",
                "dependsOn": [
                    "[resourceId('Microsoft.Web/sites/', variables('webSiteName'))]"
                ],
                "tags": {
                    "displayName": "LogSettings"
                },
                "properties": {
                    "azureTableStorage": {
                        "level": "Verbose",
                        "sasUrl": "SASURL"
                    }
                }
            }
        }

在 ARM 中执行此操作的问题是我还没有找到生成正确 SAS 的方法,它is可以提取 Azure 存储帐户密钥(来自:ARM - 如何从存储帐户获取访问密钥以在模板后面的 AppSettings 中使用?):

"properties": {
    "type": "AzureStorage",
        "typeProperties": {
            "connectionString": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]"
    }
}

还有一些使用链接模板生成它们的巧妙方法(来自:http://wp.sjkp.dk/service-bus-arm-templates/).

我当前寻求的解决方案(时间限制)是一个自定义的 Powershell 脚本,如下所示:

...
$SASUrl = New-AzureStorageTableSASToken -Name $LogTable -Permission $Permissions -Context $StorageContext -StartTime $StartTime -ExpiryTime $ExpiryTime -FullUri
$PropertiesObject = @{applicationLogs=@{azureTableStorage=@{level="$Level";sasUrl="$SASUrl"}}}
Set-AzureRmResource -PropertyObject $PropertiesObject -ResourceGroupName "$ResourceGroupName" -ResourceType Microsoft.Web/sites/config -ResourceName "$ResourceName/logs" -ApiVersion 2015-08-01 -Force
...

这是一个相当丑陋的解决方案,因为除了 ARM 模板之外,您还需要维护一些额外的东西 - 但它很简单、快速,并且在我们等待 ARM 模板更新时(或者比我更聪明的人来)它可以工作并启发我们)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么无法通过新的 Azure 门户配置 Azure 诊断以使用 Azure 表存储? 的相关文章

随机推荐

  • 获取字符串中某个索引之后第一个检测到的空格的索引

    在要格式化的字符串中 主要是用不同的符号替换字符以在 UI 上进行渲染测试 我必须检测 然后跳过此 字符中的第一个空格的所有字符 并且必须对字符串中的所有实例重复该操作 E g abcd 1 s efgh 2 d ijkl在这个字符串中 我
  • 为什么 memcpy() 和 memmove() 比指针增量更快?

    我正在复制 N 个字节pSrc to pDest 这可以在单个循环中完成 for int i 0 i lt N i pDest pSrc 为什么这比memcpy or memmove 他们使用什么技巧来加快速度 因为 memcpy 使用字指
  • 假执行Powershell脚本

    在 Fake 构建自动化工具中执行 Powershell 脚本的最佳方法是什么 我觉得这个问题应该有一个明显的答案 但一直没能通过搜索找到任何东西 正如您在评论中提到的 使用PowerShell类使这变得非常容易 r FakeLib dll
  • 如何在反序列化期间以编程方式选择构造函数?

    我想反序列化System Security Claims Claim对象按以下方式序列化 Issuer LOCAL AUTHORITY OriginalIssuer LOCAL AUTHORITY Type http my org ws 2
  • 如何标准化 Lucene 分数?

    我需要将 Lucene 分数标准化为 0 到 1 之间 例如 随机查询返回以下分数 8 864665 2 792687 2 792687 2 792687 2 792687 0 49009037 0 33730242 0 33730242
  • JavaScript 中的“变量 = 变量 || {}”是什么意思 [重复]

    这个问题在这里已经有答案了 变量的初始化代表什么 var variable variable 应该如何以及何时使用 该行代码执行以下操作 IF variable未定义 或具有错误值 THEN将其设置为空对象 ELSE什么都不做 从技术上讲
  • java.lang.AbstractMethodError:javax.ws.rs.core.UriBuilder.uri

    我尝试启动应用程序但使用Tomcat 7我有一个这样的例外 我认为这可能是Maven dependency 但我确定 如果有人知道发生了什么事 请回答 例外 message Servlet execution threw an except
  • C++ 按常量引用传递并按常量引用返回

    我想了解退货是否有任何好处const参考 我有一个阶乘函数 通常如下所示 unsigned long factorial unsigned long n return n 0 1 n factorial n 1 我假设当我们经过时性能会有所
  • swift/ios 在后台刷新应用程序数据

    我正在编写一个 iOS Swift 应用程序 它每 X 分钟从 REST 服务读取数据并相应地更新 UI 现在我希望当应用程序置于后台时 会以 X 分钟的间隔调用一个任务 从 REST 服务读取数据 并且如果刚刚读取的数据满足给定条件 则显
  • 我应该将实体框架视为非托管资源吗?

    我正在使用一个在其构造函数中使用 EF 引用的类 我已经实施了IDisposable 但我不确定是否需要析构函数 因为我不确定是否可以将 EF 分类为非托管资源 如果 EF 是托管资源 那么我不需要析构函数 所以我认为这是一个合适的示例 p
  • 动画过渡在横向方向上无法正常工作

    我的应用程序仅支持横向右方向 我正在尝试转换到视图控制器的视图 但是当它执行过渡动画 例如卷曲 时 视图旋转 90 度 因此 模拟器仍处于横向右方向 但视图显示为旋转 90 度 过渡完成后 它会旋转到正确的方向 我的代码如下 IBActio
  • MATLAB 中的广义特征向量?

    有没有一种方法可以在特征值多重性高的情况下使用单个或至少很少的命令来获取广义特征向量 如果每个特征值的重数为 1 我可以使用 V D eig A 但此命令不适用于多个特征值 根据 Matlab 文档 V D eig A B 生成广义特征值的
  • 为什么使用 RelayCommand 或 DelegateCommand 而不是仅仅实现 ICommand?

    我刚刚学习 WPF 中的 MVVM 我对 WPF 和 MVVM 都是全新的 我了解它是如何工作的 但从未使用过它 我在网上找到的每一篇教程 文章都使用 RelayCommand 或 DelegateCommand 在我看来 这些模式迫使虚拟
  • Fstream 无法创建新文件

    我在一个项目中使用文件管理器 这样读写对我来说就不那么麻烦了 或者说 如果我没有花这么多时间调试它的话 所以 这个舒适舱实际上给我带来了压力和时间 惊人的 问题似乎是fstream 在继续之前 先介绍一下 FileManager 类的结构
  • 检测android webview

    我有一个html javascript页面 我需要检测它何时在网络视图上打开 例如在 facebook webview twitter webview 等内部 以及如果它是一个 webview 显示另一个内容 Note 我不控制第三方 An
  • 错误:pandoc 文档转换失败,错误 43 Windows 7 R studio

    我在论坛中搜索了答案 但似乎不起作用 我正在 Rstudio 中使用 knit 包编织一个 pdf 文档 我使用的是 Windows 7 和 Rstudio pandoc exe Error producing PDF from TeX s
  • 整数除法大量用于什么?

    分析https ridiculousfish com blog posts benchmarking libdivide m1 avx512 html发现新的 Apple CPU 花费了大量资源来使整数除法速度大大加快 这是一件令人惊讶的事
  • 如何以编程方式向 UILabel 添加约束

    有没有一种方法可以快速获得标签并以编程方式对其进行约束 例如 在所有设备上 固定到顶部 或 固定到右侧 以便在所有设备上它只固定到正在使用的任何设备 这是因为我以编程方式创建了一个标签 所以我想对其进行约束 如果您需要更多信息 请告诉我 谢
  • d3 - 查看特定 x,y 位置有什么

    我正在尝试在 d3 树中实现一些拖放功能 其中当拖动节点时 如果它直接到节点左侧 50 像素 我想绘制一个虚线连接器来指示如果释放该节点应该是小时候搬到这里 为了做到这一点 我的想法是检查左侧 50 像素的元素 有没有办法查看 d3 中特定
  • 为什么无法通过新的 Azure 门户配置 Azure 诊断以使用 Azure 表存储?

    我正在开发一个将托管在 Azure 中的 Web api 我想使用 Azure 诊断将错误记录到 Azure 表存储中 在经典门户中 我可以将日志配置为转到 Azure 表存储 经典门户诊断设置 然而 在新的 Azure 门户中 我唯一的存