按需从 Power BI 仪表板中的 Zabbix API 加载数据

问题描述 投票:0回答:1

我通过 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

我认为在我的仪表板中收集所有项目的所有历史值是不明智的。 这使得仪表板非常慢并且可能会损坏。 我的问题是:

  1. 我最初不加载所有数据的说法正确吗?
  2. 如果是,有没有办法在我的仪表板中进行可视化,根据用户的选择按需加载数据?
powerbi powerbi-desktop dashboard zabbix zabbix-api
1个回答
0
投票
  1. 收集所有时间的所有历史值会让您的仪表板(报告?)变慢吗?

    • 答案是“也许”。这取决于数据量、您的数据模型以及您要部署来显示数据的聚合类型。
    • 如果您接近实际数据限制,一个更及时的问题是调查您当前的数据粒度是否合适,或者是否可以预先聚合 API 结果并显示“每 5 分钟”而不是“每秒”例如 - 这将大大减少您加载的数据量。
  2. 不,不使用 Web API。对于使用 DirectQuery 的某些数据源,可能会出现此行为。但是,DirectQuery 模型本质上比导入模型慢得多,除非数据量很大。

© www.soinside.com 2019 - 2024. All rights reserved.