我通过 API 在 Power BI 和 Zabbix 之间建立了连接,以获取主机 CPU 和 RAM 使用情况及其历史记录。 这是获取当前 CPU 利用率的电源查询代码。
let
CPU_Body =
"{
""jsonrpc"": ""2.0"",
""method"": ""item.get"",
""params"": {
""output"": ""extend"",
""search"": {
""name"": ""CPU utilization""
}
},
""auth"": """ & ZabbixToken & """,
""id"": 1
}",
CPU_Source = Json.Document(
Web.Contents(
ZabbixURL,
[
Headers=[
#"Content-Type"="application/json"
],
Content = Text.ToBinary(CPU_Body)
]
)
),
CPU_result = CPU_Source[result],
#"CPU Converted to Table" = Table.FromList(CPU_result, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"CPU Expanded Column1" = Table.ExpandRecordColumn(#"CPU Converted to Table", "Column1", {"itemid", "hostid", "description", "lastclock", "lastvalue", "lastns", "prevvalue"}),
#"CPU Changed Type" = Table.TransformColumnTypes(#"CPU Expanded Column1", {{"itemid", Int64.Type}, {"hostid", Int64.Type}, {"description", type text}, {"lastclock", type text}, {"lastvalue", Number.Type}, {"lastns", Number.Type}, {"prevvalue", Number.Type}})
in
#"CPU Changed Type"
...这是一个用于检索给定日期之间任何项目 id 的历史记录的函数
let
GetItemHist = (itemid as number, start as datetime, end as datetime) as table =>
let
Body =
"{
""jsonrpc"": ""2.0"",
""method"": ""history.get"",
""params"": {
""output"": ""extend"",
""history"": 0,
""itemids"": """ & Text.From(itemid) & """,
""sortfield"": ""clock"",
""sortorder"": ""DESC"",
""time_from"": """ & Number.ToText(date_to_epoc(start)) & """,
""time_till"": """ & Number.ToText(date_to_epoc(end)) & """
},
""auth"": """ & ZabbixToken & """,
""id"": 1
}",
Source = Json.Document(
Web.Contents(
ZabbixURL,
[
Headers=[
#"Content-Type"="application/json"
],
Content = Text.ToBinary(Body)
]
)
),
result = Source[result],
#"Converted to Table" = Table.FromList(result, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"clock", "value", "ns"}, {"Clock", "Value", "ns"}),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Column1", {{"Clock", Int64.Type}, {"Value", type number}, {"ns", Int64.Type}}),
#"Change Value type to percentage" = Table.TransformColumns(#"Changed Type", {{"Value", each _ / 100, Percentage.Type}})
in
#"Change Value type to percentage"
in
GetItemHist
我认为在我的仪表板中收集所有项目的所有历史值是不明智的。 这使得仪表板非常慢并且可能会损坏。 我的问题是:
收集所有时间的所有历史值会让您的仪表板(报告?)变慢吗?
不,不使用 Web API。对于使用 DirectQuery 的某些数据源,可能会出现此行为。但是,DirectQuery 模型本质上比导入模型慢得多,除非数据量很大。