我正在尝试使用Azure数据工厂将自定义日志吸收到Azure日志分析中。HTTP数据收集器是Microsoft提供的API,用于将自定义日志摄入Azure日志分析。我在Azure数据工厂中创建了一个具有Web活动的管道,以发布一些示例日志到日志分析。以下是Web活动的设置。
网址:https://xxloganalyticsworkspaceIDxx.ods.opinsights.azure.com/api/logs?api-版本=2016-04-01方法:POST标头:授权-共享密钥xx对数分析工作空间IDxx:日志类型-ADFRecord内容类型-application/jsonx-ms-date-<使用PowerShell RFC 1123格式创建的签名>正文-{"StringValue":"MyString1","NumberValue":42,"BooleanValue":true,"DateValue":2019-09-12TT2:00:00.625Z,"GUIDValue":9909ED01-A74C-4874-8ABF-D2678E3AE23D
我知道Authorization和x-ms-date标头应该是动态提供的,但是为了进行测试,我使用Microsoft在文章中提供的PowerShell代码创建了这些标头https://learn.microsoft.com/en-us/azure/azure-monitor/logs/data-collector-api#request-headers,并在web活动中使用了相同的headers。管道失败,错误如下:
{"错误":"无效授权","消息":"在授权标头中指定了无效签名"}
我曾尝试使用poster推送具有相同标头的相同数据,REST调用成功,这意味着使用PowerShell生成的标头签名可以工作。我可以看到海关日志被推送到日志分析。
如果能在这方面提供任何帮助来解决问题,我将不胜感激,也请告诉我如何在Web活动中动态提供授权标头。
数据工厂的web活动似乎在发送自定义日志到日志分析工作区方面存在一些问题,经过一番尝试和错误,我找到了成功的方法。
-
请确保尝试其他方法,例如python/C#等,并使请求正常工作。(例如,我使用了pythonhttps://learn.microsoft.com/en-us/azure/azure-monitor/logs/data-collector-api#python-样品(
-
在数据工厂web活动主体部分,用[]包装请求,使其成为一个数组,即{"A":6}将变成{"B":6}](不确定确切原因,但似乎有效,可能有一些过程围绕着他们如何处理主体(
-
删除所有多余的空间,因为azure在发送之前似乎会压缩你的身体,即[{"A":6,"B":7}]应该变成[{"A":6,"B":7}]
-
现在,使用处理后的正文字符串的content_length来构建签名,您可以先使用python对其进行测试,然后将Authorization(signature(和x-ms-date的值复制(硬编码(到数据工厂web活动中进行测试,它现在应该可以工作了。
请分享是否有合适的解决方案,谢谢:(
这对于动态获取授权头也很有用如何使用Azure数据工厂服务的Web活动将实体插入Azure存储表
目前,最好创建一个功能应用程序来发送日志到日志的分析,并在adf中提出请求。