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

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

本文介绍如何设置日志查询 API 终结点的 GETPOST 请求的格式,包括直接 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] 是查询字符串值,例如 querytimespanworkspaces

查询参数

在请求的查询字符串 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标头。
  • querytimespanworkspaces 等请求值放入 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 请求格式,并且适用于 GETPOST 这两种查询场景。 有关命令示例,请参阅 GET 请求格式 部分。