0

我在使用 azure kusto 查询显示特定资源时遇到问题。

我想要的是编写一个 kusto 查询,它只显示 azure 中的数据库资源和服务器资源。

我写了以下关于数据库的查询:

resources
| where type in ("microsoft.sql/servers/databases","microsoft.dbforpostgresql/servers","microsoft.azuredata/postgresinstances","microsoft.dbformariadb/servers","microsoft.dbformysql/flexibleservers","microsoft.dbformysql/servers","microsoft.dbforpostgresql/flexibleservers","microsoft.dbforpostgresql/servergroups","microsoft.kusto/clusters/databases","microsoft.sql/managedinstances/databases","microsoft.synapse/workspaces/sqldatabases","ravenhq.db/databases","microsoft.documentdb/databaseaccounts")
| summarize Amount=count() by type

但是当我执行查询时,即使我只创建了一个,它也会向我显示两个数据库,额外的一个是“主”,不应该包括在内,因为资源组中只有一个资源

我也尝试过以下查询:

resources
| where type contains "database" | distinct type
| summarize Amount=count() by type

但问题是它不包括类型名称中没有“数据库”一词的所有数据库,例如“microsoft.azuredata/postgresinstances”

所以问题是,我如何编写一个在我的仪表板上显示所有数据库的查询。

与前面的数据库类似的问题的第二部分是我如何显示所有服务器。我尝试过以下查询:

resources
| where split(type,"/")[array_length(split(type,"/"))] contains "servers"

即使我有服务器,它也没有给我任何结果。然后我尝试了:

resources
| where type contains "/server" | distinct type
| summarize Amount=count() by type

那没有用,因为它还返回了包含工作“服务器”的所有数据库资源

我试图查看微软的文档,但不知道该怎么做。

4

1 回答 1

0

如果您不想要主数据库(即在 SQL 数据库中存储系统级数据的数据库,您可以简单地将它们过滤掉:

resources
| where type in ("microsoft.sql/servers/databases","microsoft.dbforpostgresql/servers","microsoft.azuredata/postgresinstances","microsoft.dbformariadb/servers","microsoft.dbformysql/flexibleservers","microsoft.dbformysql/servers","microsoft.dbforpostgresql/flexibleservers","microsoft.dbforpostgresql/servergroups","microsoft.kusto/clusters/databases","microsoft.sql/managedinstances/databases","microsoft.synapse/workspaces/sqldatabases","ravenhq.db/databases","microsoft.documentdb/databaseaccounts")
| where name type != "microsoft.sql/servers/databases" or name != "master"
| summarize Amount=count() by type

关于第二个问题,这应该有效,因为has运算符将只匹配整个标记(并且斜线分隔标记):

resources | where type has "servers"
于 2020-11-23T20:29:05.073 回答