如何解决Azure日志摄取API问题

blpfk2vs  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(97)

我已经开发了一个Python脚本,使用Azure日志接收API将JSON格式的一些日志上传到一个自定义表中。脚本至少运行了两次,数据行的显示与我想要的完全一样,但是现在,尽管每次运行时它似乎都能运行并得到一个Response [204],但自定义表中没有出现新数据。
我可以在Azure端执行哪些故障排除步骤来查看错误可能在哪里?
我遵循了this Microsoft article,并使用了两种不同形式的Python方法来发布数据

  • 带有相关参数的本机request.post命令。
  • client.upload命令显示在链接文章的Python部分。“

Python中的调试显示数据的格式显然是正确的,响应似乎也不错(取决于所使用的方法)。很难在这里提供细节,因为很多数据需要编辑,但我会努力。
第一个Python请求如下所示:

logCombined = <JSON data array>
payload = json.dumps(logCombined)
applicationId
scope = "https://monitor.azure.com//.default"
appSecret = <application (client) secret>
tenantId = <tenant ID>
dceUri= <dedicated endpoint URI>
dcrImmutableId = <DCR immutable ID>
table= "MyTable_CL"

body = f"client_id={applicationId}&scope={scope}&client_secret={appSecret}&grant_type=client_credentials"
headers = {"Content-Type": "application/x-www-form-urlencoded"}
uri = f"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token"
response = req.post(uri, data=body, headers=headers) # find a bearer token
bearerToken = respons.json().get("access_token")
headers2 = { "Authorization": f"Bearer {bearerToken}", "Content-Type": "application/json" }
uri = f"{dceUri}/dataCollectionRules/{dcrImmutableId}/streams/Custom-{table}?api-version=2021-11-01-preview"
uploadResponse = req.post(uri, data=payload, headers=headers2)
print("Response: ", uploadResponse)

字符串
此时响应总是成功的:在Azure中没有任何迹象表明发生了任何事情--没有新的表行,operation日志中也没有任何内容。
我如何在Azure中查看引擎盖下的内容,以了解为什么这一点被忽略?

vwhgwdsa

vwhgwdsa1#

您的问题可能源于正在发布的JSON数据与Azure中的数据收集规则(DCR)中定义的内容不匹配。Azure的日志摄取API要求发送的JSON数据结构与DCR中定义的数据结构匹配。如果这两个不匹配,即使您的post请求成功,您的数据也不会出现在自定义表中。
以下是如何进行故障排除:
检查您的数据收集规则(DCR):确保Azure中的DCR与您要发送的JSON数据的结构完全匹配。验证键及其关联的值类型。
检查正在发布的JSON数据:将发送的JSON保存到本地文件,并检查其内容以确保与DCR匹配。
下面是一个例子,说明如何修改现有的Python代码,将JSON数据写入本地文件:

import json

# Other parts of your code...

payload = json.dumps(logCombined)

# Save the JSON payload to a file
with open('payload.json', 'w') as outfile:
    json.dump(logCombined, outfile)

# Continue with the rest of your code...

字符串
在上面的代码片段中,json.dump(logCombined,outfile)将logCombined JSON数据写入名为payload.json的文件。您可以打开此文件并验证其内容。
尝试摄取样本数据:您可以尝试摄取一小部分数据样本,确保这些数据与DCR中定义的结构相匹配。如果样本数据被成功摄取,那么问题可能在于主数据集的JSON数据结构。
作为DCR中的示例,如果您已定义

[
 {
   "blah": "1",
   "blah2" : "2"
 }
]


但如果你发送的是

[
  "Errors": {
   "blah": "1",
   "blah2" : "2"
 },
 {
   "blah": "1",
   "blah2" : "2"
 }
]


那么这将是一个不匹配,所以我会建议保存输出您发送到一个文件和交叉检查的内容是什么期望的DCR

相关问题