Запрос от PowerBI к AI неожиданно завершается с (502): Bad Gateway
В Power BI (Desktop) мы используем Power BI Query (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&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
Кто-нибудь знает как это решить?
2 ответа
Сообщение 502 Bad Gateway обычно происходит из-за того, что запрос AA возвращает слишком много данных. Шлюз ограничен 8 МБ данных, период.
пример
Вы создали информационную панель, которая работала в декабре 2016 года и давала вам все запросы с начала месяца. Сейчас январь 2017 года и он терпит неудачу. Вы используете PowerBI Dashboard для вычисления некоторых метрик из необработанных результатов, используя запрос, подобный приведенному ниже.
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
Больше примеров
Возможно, вам понадобится содержательный график, чтобы вы могли разделить агрегаты по периодам времени. Это даст вам много взамен данных, но значительно меньше, чем вы получили бы, если бы запросили исходные данные.
Днем
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
Я привел только несколько примеров, и вы должны убедиться, что они соответствуют цели вашей панели.
Как предложил Джеймс, рекомендуется ограничить размер результата, но если вам все еще нужно возвращать больший набор данных, вы можете работать напрямую с AI API вместо ARM.
1) Вам необходимо создать ключ API, см. https://dev.applicationinsights.io/documentation/Authorization/API-key-and-App-ID
2) Затем вам нужно обновить скрипт Power BI M, который вы экспортировали из Analytics, заменив URL ARM на 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 "=" запросы ",#"x-ms-app"="AAPBI"], время ожидания =# длительность (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 "=" запросы ",#"x-ms-app"="AAPBI"], время ожидания =# длительность (0,0, 4,0)])),
.....
3) Наконец, обновите учетные данные до базового и используйте свой ключ API