以编程方式列出每个自定义日志的 Log Analytics 的自定义类型计数

Programmatically List Custom Type Count for Log Analytics per Custom Log

在 Azure Log Analytics 中,每个自定义日志只能有 500 个自定义字段。

我想要一种方法来以编程方式监视工作区中的哪些自定义日志接近或已经达到该限制。

如何使用 PowerShell 查找此信息?

我能够使用 Azure CLI 获取此信息。这不是最高效的方法,但至少是一个开始。

az cloud set --name AzureUSGovernment
# Login using your OMS creds (AAD)
az login
az account set --subscription 2000000d-4000-000f-a000-00000000000f
$resourceGroupName = "myResourceGroup"
$workspaceName = "myWorkspaceName"
$WORKSPACE_ID = "d0000000-6000-4000-8000-000000000002"

我登录到我的 LA 工作区所在的 Azure 政府 AAD,并设置了一些要使用的变量。

$schema = az monitor log-analytics workspace get-schema -g $resourceGroupName -n $workspaceName | ConvertFrom-Json

我通过请求工作区架构检索了整个工作区的所有自定义字段。或者,我可以简单地请求自定义日志 (tables),但我使用的 CLI 和 API 命令返回 HTTP 500 错误(稍后会详细介绍)。

$customTables = $schema.value.ownerType | Select-Object -Unique | Where-Object { $_ -match "_CL" }

我通过过滤到 table 以“CL”结尾的日志来收集自定义日志列表。公平地说,这仅适用于至少使用一个自定义字段的自定义日志,但在我的用例中这很好。

$customTables | ForEach-Object { Write-Host "$(((az monitor log-analytics query -w $WORKSPACE_ID --analytics-query "$_ | getschema | summarize count()" -o json -t PT1M) | ConvertFrom-Json).count_) | $_" }

对于每个自定义日志,我 运行 一个 Log Analytics 查询 myTable_CL | getschema | summarize count() 以获取该 table 使用的自定义字段的计数。如果需要,您可以调整此查询以获取其他信息,因为您可以使用此方法 运行 针对您拥有的每个自定义 table / 自定义日志进行查询。上面的命令打印出集合中每个 table 的计数。


我之前提到过您可以以更简洁的方式获取自定义日志,但此时我遇到了以下两种方法的错误:

# Retrieves workspace table list, can return resource provider error, even though Microsoft.OperationalInsights is registered.
az monitor log-analytics workspace table list --resource-group "myResourceGroup" --workspace-name "myWorkspaceName"

上面是抱怨缺少资源提供者,即使我已经注册了合适的资源提供者。它还抱怨 API 版本,我不确定如何在请求中覆盖它。我正在 运行ning Azure CLI 2.32.0.

# Retrieves workspace table list, can return HTTP 500 error for no reason.
az rest --method get --url "https://management.usgovcloudapi.net/subscriptions/$subscriptionId/resourcegroups/$resourceGroupName/providers/Microsoft.OperationalInsights/workspaces/$workspaceName/tables?api-version=2020-08-01"

上述方法只是返回“HTTP 500 内部服务器错误”。不知道为什么,所以我不得不改用整个工作区模式。