我正在开发一个将在Azure中托管的web api . 我想使用Azure诊断程序将错误记录到Azure表存储 . 在Classic门户中,我可以将日志配置为Azure表存储 .
Classic Portal Diagnostic Settings
但是在新的Azure门户中,我唯一的存储选项是使用Blob存储:
似乎如果我要使用Web角色,我可以配置数据存储以进行诊断,但是当我正在开发web api时,我不想为每个api创建一个单独的Web角色,这样我就可以登录到天蓝色的 table .
有没有办法以编程方式配置azure诊断,以便在不使用Web角色的情况下将日志消息传播到特定数据存储?有没有理由为什么新的Azure门户只有blob存储的诊断设置而不是表存储?
我现在可以通过使用经典门户解决该问题,但我担心诊断的表存储最终会被弃用,因为它尚未包含在新门户的诊断设置中 .
2 回答
(我会对这个问题做一些暗示,因为这是我在搜索解决方案时发现的最相关的StackOverflow问题,因为它不再可能通过经典门户网站执行此操作)
免责声明:微软似乎已经删除了在Azure门户中记录到Table的支持,因此我不知道这是否已被弃用或将很快被弃用,但我现在有一个解决方案(31.03.2017):
有确定日志记录的特定设置,我首先从Azure Powershell github中的问题中找到有关此问题的信息:https://github.com/Azure/azure-powershell/issues/317
我们需要的具体设置是(来自github):
使用(GUI导航)下的优秀资源浏览器(https://resources.azure.com):
我能够在属性中找到设置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命令设置属性,具有以下设置:
$ PropertiesObject看起来像这样:
级别对应于“错误”,“警告”,“信息”,“详细”和“关闭” .
也可以在ARM模板中执行此操作(重要位在站点中日志资源的属性中):
在ARM中执行此操作的问题是我还没有找到生成正确SAS的方法,可以获取Azure存储帐户密钥(来自:ARM - How can I get the access key from a storage account to use in AppSettings later in the template?):
还有一些使用链接模板生成它们的聪明方法(来自:http://wp.sjkp.dk/service-bus-arm-templates/) .
我目前使用的解决方案(时间限制)是一个自定义的Powershell脚本,看起来像这样:
这是一个非常难看的解决方案,因为除了ARM模板之外,它还需要维护一些额外的东西 - 但它很容易,快速,并且在我们等待ARM模板更新时(或者比我更聪明的人)更新并启发我们) .
我们不能有效地为Table Storage工作 . 请参阅本指南Table Design Guide中的日志数据反模式 . 通常我们会看到即使人们认为日志数据是结构化的 - 他们通常会查询它使Blob更有效率 .
摘自设计指南: