日志查询 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×pan=$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 请求格式 部分。