从 PowerBI 到 AI 的查询突然失败并显示 (502):Bad Gateway

Query from PowerBI to AI suddenly fails with (502): Bad Gateway

在 Power BI(桌面)中,我们使用 Power BI 查询 (M) 从 Application Insights Analytics 获取数据。我们将 Power BI 报告在线发布到配置了每日刷新的 Power BI。在 25-1-2017 (UTC) 停止工作之前它一直运行良好。

我们得到的错误是:

DataSource.Error: Web.Contents failed to get contents from '.....' (502): Bad Gateway

这是完整的错误:

DataSource.Error: Web.Contents failed to get contents from 'https://management.azure.com/subscriptions/<subscriptionId>/resourcegroups/fps.fsa/providers/microsoft.insights/components/4PS%20Field%20Service%20iOS%20-%20iOS/api/query?api-version=2014-12-01-preview&csl=customEvents%0A%7C%20where%20timestamp%20%3E%20ago%2830d%29%0A%7C%20order%20by%20timestamp%20desc%0A%7C%20extend%20dimensionUserId%20%3D%20tostring%28customDimensions.%5B%27userId%27%5D%29%0A%7C%20extend%20dimensionHost%20%3D%20tostring%28customDimensions.%5B%27url%27%5D%29%0A%7C%20extend%20measurementQuantity%20%3D%20iff%28%20isnotempty%28customMeasurements.%5B%27value%27%5D%29%2C%20todouble%28customMeasurements.%5B%27value%27%5D%29%2C%200.0%29%0A%7C%20extend%20measurementKey%20%3D%20tostring%28customDimensions.%5B%27key%27%5D%29%0A%7C%20extend%20platform%20%3D%20%27iOS%27%0A&x-ms-app=AAPBI' (502): Bad Gateway
Details:
    DataSourceKind=Web
    DataSourcePath=https://management.azure.com/subscriptions/<subscriptionId>/resourcegroups/fps.fsa/providers/microsoft.insights/components/4PS%20Field%20Service%20iOS%20-%20iOS/api/query
    Url=https://management.azure.com/subscriptions/<subscriptionId>/resourcegroups/fps.fsa/providers/microsoft.insights/components/4PS%20Field%20Service%20iOS%20-%20iOS/api/query?api-version=2014-12-01-preview&amp;csl=customEvents%0A%7C%20where%20timestamp%20%3E%20ago%2830d%29%0A%7C%20order%20by%20timestamp%20desc%0A%7C%20extend%20dimensionUserId%20%3D%20tostring%28customDimensions.%5B%27userId%27%5D%29%0A%7C%20extend%20dimensionHost%20%3D%20tostring%28customDimensions.%5B%27url%27%5D%29%0A%7C%20extend%20measurementQuantity%20%3D%20iff%28%20isnotempty%28customMeasurements.%5B%27value%27%5D%29%2C%20todouble%28customMeasurements.%5B%27value%27%5D%29%2C%200.0%29%0A%7C%20extend%20measurementKey%20%3D%20tostring%28customDimensions.%5B%27key%27%5D%29%0A%7C%20extend%20platform%20%3D%20%27iOS%27%0A&amp;x-ms-app=AAPBI

有人知道怎么解决吗?

502 Bad Gateway Message 通常是由于 AA 查询 returning 的数据过多。网关限制为 8MB 数据,期间。

例子

您创建了一个在 2016 年 12 月运行的仪表板,并为您提供了从月初开始的所有请求。现在是 2017 年 1 月,它正在失败。您使用 PowerBI 仪表板使用如下查询从原始结果计算一些指标。

requests | where timestamp > datetime(2016-12-01)

修复

确定您真正关心的天数。如果您打算从本月的第一天开始获取所有请求和时间,您可以通过将时间范围限制在本月并仅投影您需要的列来减少大量额外数据

requests | where timestamp > startofmonth(now()) | project name, duration

另一个修复

假设您正在计算诸如平均值和百分位数之类的东西,您也可以让 Analytics 为您执行此操作,而 PowerBI 只显示结果。

requests | where timestamp > startofmonth(now()) | summarize count(), avg(duration), min(duration), max(duration), stdev(duration), percentiles(duration, 50, 75, 90, 95, 99) by name

更多示例

您可能需要一个有意义的图表,以便您可以按时间段拆分聚合。这会在 return 中为您提供大量数据,但比您查询原始数据点时获得的数据要少得多。

按天

requests | where timestamp > startofmonth(now()) | summarize count(), avg(duration), min(duration), max(duration), stdev(duration), percentiles(duration, 50, 75, 90, 95, 99) by bin(timestamp, 1d), name

按小时

requests | where timestamp > startofmonth(now()) | summarize count(), avg(duration), min(duration), max(duration), stdev(duration), percentiles(duration, 50, 75, 90, 95, 99) by bin(timestamp, 1h), name

我只给出了几个示例,您必须确保它们符合您仪表板的意图。

James 建议的建议是限制结果大小,但如果您仍然需要 return 更大的数据集,您可以直接使用 AI API 而不是 ARM。

1) 您需要创建一个 API 密钥,请参阅 https://dev.applicationinsights.io/documentation/Authorization/API-key-and-App-ID

2) 接下来,您需要更新从 Analytics 导出的 Power BI M 脚本,方法是将 ARM URL 替换为 AI API:

替换ARM调用:

.....
Source = Json.Document(Web.Contents("https://management.azure.com/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/<RESOURCE GROUP>/providers/microsoft.insights/components/<APP NAME>/api/query?api-version=2014-12-01-preview", [Query=[#"csl"="requests",#"x-ms-app"="AAPBI"],Timeout=#duration(0,0,4,0)])),
.....

使用 AI API 调用:

....
Source = Json.Document(Web.Contents("https://api.applicationinsights.io/beta/apps/<APPLICATION_ID>/query?api-version=2014-12-01-preview", [Query=[#"csl"="requests",#"x-ms-app"="AAPBI"],Timeout=#duration(0,0,4,0)])),
.....

3) 最后,将凭据更新为基本,并使用您的 API 密钥

enter image description here