Azure Application Insights 查询自定义维度

Azure Application Insights Query customDimensions

我有一个 Java 应用程序可以将 log4j2 日志发送到 App Insights。记录异常时,我基本上传递了字符串格式的 JSON 和类似这样的异常

JSONObject json=new JSONObject();
json.put(...)
....
log.error(json.toString(), exception)

在 App Insights 方面;该消息存储在 customDimensions 下,键为 JSON 格式的 Logger Message。

从这个存储的信息中,我想进行一个查询,以获取所有状态代码 > 200 和状态代码 < 300 的异常消息。我已经尝试了几个查询,但我无法提取那些特定的异常消息。

我正在尝试的查询之一是

exceptions 
| limit 50 
| where toint(customDimensions["Logger Message"].statusCode) > 200 
  and toint(customDimensions["Logger Message"].statusCode) < 300

如有任何帮助,我们将不胜感激

更新:我运行查询

exceptions
| limit 50 
| project s1 = customDimensions["Logger Message"]
| extend  s2 = s1.statusCode
| extend  s3 = toint(s2)
| extend  s4 = s3 >= 200 and s3 < 300

从查询语言的角度来看,您做的是正确的(假设您确实想要 > 200 而不是 >= 200,那么您示例中的查询实际上会 return您粘贴快照的记录)

print customDimensions = dynamic({
    "Logger Message":{
        "message":"Test 1 and Test 2",
        "statusCode": 200
    }
})
| project toint(customDimensions['Logger Message'].statusCode)

这 return 是一个 table,单行,单列,值为 200

根据快照很难完全理解您案例中的实际数据是什么样的 - 您可以尝试 'debugging' 一步一步(下面的 s1,...,s4)并查看它的位置 'breaks'.

  • (只是猜测)您可能需要在字符串负载上调用 parse_json(),以便您可以实际访问其中的动态属性。
exceptions
| limit 50 
| project s1 = customDimensions["Logger Message"]
| extend  s2 = s1.statusCode
| extend  s3 = toint(s2)
| extend  s4 = s3 > 200 and s3 < 300

更新:

按照之前 'guess' 的建议尝试使用 parse_json()

(另外,请参阅此处的 注释 部分:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/parsejsonfunction

exceptions
| limit 50 
| project s1 = parse_json(tostring(customDimensions["Logger Message"]))
| extend  s2 = s1.statusCode
| extend  s3 = toint(s2)
| extend  s4 = s3 > 200 and s3 < 300