Azure Monitor日志查询 API 的请求格式

日志查询 API 允许你通过公共 REST 终结点对 Log Analytics 工作区运行 Kusto 查询语言 (KQL) 查询。 以编程方式检索或分析日志数据,以便实现自动化、自定义报告或与其他工具的集成。

本文介绍如何设置日志查询 API 终结点的 GET 和 POST 请求的格式,包括直接 REST 示例和等效的Azure CLI命令和Azure PowerShell cmdlet。

有关更广泛的Azure Monitor API 图面,请参阅 Azure Monitor REST API 索引。

公共查询终结点格式

公共日志查询 API 终结点采用以下格式:

https://api.loganalytics.azure.cn/{apiVersion}/workspaces/{workspaceId}/query?[parameters]

  • apiVersion 是公共查询 API 版本。 使用 v1。
  • workspaceId 是要查询的 Log Analytics 工作区的 GUID。
  • [parameters] 是查询字符串值,例如 query, timespan和 workspaces。

查询参数

在请求的查询字符串 GET 中或请求的 POST JSON 正文中传递这些参数。

参数 必需 Description
query 是的 要运行的 KQL 查询。
timespan No 查询的时间范围。 使用 ISO 8601 持续时间(例如, PT12H 12 小时)或以 / (例如, 2024-01-01/2024-01-02)分隔的开始/结束对。 如果省略,查询将在所有可用数据上运行。
workspaces No 要包含在跨工作区查询中的其他工作区 ID。

GET 请求格式

对于 GET 请求,请在查询字符串中包含请求参数。 例如,若要统计过去 12 小时内按 AzureActivity 划分的 Category 事件数量,请使用以下请求:

使用 az rest 直接调用日志查询 API。

subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
workspaceId="myWorkspaceId"
query="AzureActivity | summarize count() by Category"
timespan="PT12H"
logsQueryApiEndpoint="https://api.loganalytics.io"
resourceId="$logsQueryApiEndpoint/v1/workspaces/$workspaceId/query"

az account set --subscription "$subscriptionId"

az rest \
  --method get \
  --uri "$resourceId?query=$query&timespan=$timespan" \
  --resource "$logsQueryApiEndpoint"

或者,也可以使用 Azure CLI 的 az monitor log-analytics query 命令执行此操作。 它是正式版 log-analytics 扩展的一部分,Azure CLI自动安装。

subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
workspaceId="myWorkspaceId"
query="AzureActivity | summarize count() by Category"
timespan="PT12H"

az account set --subscription "$subscriptionId"

az monitor log-analytics query \
  --workspace "$workspaceId" \
  --analytics-query "$query" \
  --timespan "$timespan"

POST 请求格式

对于 POST 请求,请在 JSON 正文中发送请求参数。

  • 请求正文必须是有效的 JSON。
  • 包含Content-Type: application/json标头。
  • 将 query、timespan 和 workspaces 等请求值放入 JSON 正文中。
  • 如果在查询字符串和正文中指定 timespan ,服务将使用两个值的交集。

使用 az rest 直接调用日志查询 API。

subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
workspaceId="myWorkspaceId"
logsQueryApiEndpoint="https://api.loganalytics.io"
resourceId="$logsQueryApiEndpoint/v1/workspaces/$workspaceId/query"
payloadFile="./query-payload.json"

az account set --subscription "$subscriptionId"

az rest \
  --method post \
  --uri "$resourceId" \
  --resource "$logsQueryApiEndpoint" \
  --headers Content-Type=application/json \
  --body @"$payloadFile"

有效负载文件(query-payload.json):

{
  "query": "AzureActivity | summarize count() by Category",
  "timespan": "PT12H"
}

或者,使用 az monitor log-analytics query 命令,该命令封装了 HTTP 请求格式,并且适用于 GET 和 POST 这两种查询场景。 有关命令示例,请参阅 GET 请求格式 部分。