Последнее обновление: мая 12, 2026

Редактор запросов Azure Monitor

Grafana предоставляет редактор запросов для источника данных Azure Monitor; он находится на странице Explore. Открыть редактор запросов Azure Monitor также можно из панели дашборда: нажмите меню в правом верхнем углу панели и выберите Edit.

В этом документе описаны особенности работы с запросами, характерные именно для источника данных Azure Monitor. Общую документацию по работе с запросами к источникам данных в Grafana смотрите в разделе Запрос и преобразование данных.

Источник данных Azure Monitor позволяет запрашивать данные из Azure Monitor Metrics и Logs, Azure Resource Graph, а также трассировки Application Insights. Для каждого источника предусмотрен собственный специализированный редактор запросов.

Прежде чем начать

Ключевые понятия

Если вы только начинаете работать с Azure Monitor, ниже приведены ключевые термины, используемые в этой документации:

Термин Описание
KQL (Kusto Query Language) Язык запросов, используемый для Azure Monitor Logs и Azure Resource Graph. KQL использует синтаксис с конвейерами, похожий на команды Unix, и оптимизирован для исследования данных в режиме только чтения. Если вы знаете SQL, начать поможет шпаргалка по переходу с SQL на Kusto.
Рабочая область Log Analytics Ресурс Azure, который собирает и хранит данные журналов из ваших ресурсов, приложений и служб Azure. Эти данные запрашиваются с помощью KQL.
Application Insights Служба мониторинга производительности приложений (APM) от Azure. Она собирает телеметрические данные, такие как запросы, исключения и трассировки, из ваших приложений.
Метрики и журналы Метрики — это лёгкие числовые значения, собираемые через равные интервалы (например, процент загрузки CPU). Журналы — это подробные записи о событиях с различающимися схемами (например, журналы запросов, сообщения об ошибках). Для метрик используется визуальный конструктор запросов; для журналов требуется KQL.

Выбор режима редактора запросов

Редактор запросов источника данных Azure Monitor имеет четыре режима в зависимости от того, какую службу Azure вы хотите запрашивать:

Запрос метрик Azure Monitor

Azure Monitor Metrics собирает числовые данные из поддерживаемых ресурсов, и вы можете запрашивать их, чтобы исследовать состояние и использование ресурсов и повысить их доступность и производительность.

Метрики Monitor используют облегчённый формат, который хранит только числовые данные определённой структуры и поддерживает сценарии, близкие к реальному времени, что делает их удобными для быстрого выявления проблем. В отличие от них, Azure Monitor Logs может хранить данные различных типов, каждый со своей структурой.

Пример запроса к метрикам Azure Monitor с визуализацией процента загрузки CPU во времени
Пример запроса к метрикам Azure Monitor с визуализацией процента загрузки CPU во времени

Создание запроса к метрикам

Чтобы создать запрос к метрикам:

  1. В панели Grafana выберите источник данных Azure Monitor.

  2. Выберите службу Metrics.

  3. Выберите ресурс, метрики которого нужно запросить, используя поля subscription, resource group, resource type и resource. Можно также выбрать несколько ресурсов, если они относятся к одной подписке, региону и типу ресурса. Обратите внимание, что эту возможность поддерживает лишь ограниченное число типов ресурсов.

  4. Чтобы выбрать пространство имён, отличное от используемого по умолчанию, — например, для выбора ресурсов вроде учётных записей хранения, организованных в нескольких пространствах имён, — воспользуйтесь параметром Namespace.

    Note

    Не все метрики, возвращаемые API Azure Monitor Metrics, имеют значения.

    Источник данных получает списки поддерживаемых метрик для каждой подписки и игнорирует метрики, значения которых всегда отсутствуют.

  5. Выберите метрику в поле Metric.

При необходимости можно применить дополнительные агрегации или отфильтровать данные по измерениям.

  1. Измените агрегацию со среднего значения по умолчанию на минимальное, максимальное или суммарное.
  2. Укажите собственный шаг времени. По умолчанию Grafana сама выбирает интервал шага времени исходя из выбранного диапазона времени.
  3. Для метрик с несколькими измерениями можно разделять и фильтровать возвращаемые метрики. Например, метрика зависимостей Application Insights поддерживает возврат нескольких временных рядов для успешных и неуспешных вызовов.
Снимок экрана Azure Monitor Metrics с отображением Dimensions
Снимок экрана Azure Monitor Metrics с отображением Dimensions

Набор доступных параметров меняется в зависимости от того, что относится к выбранной метрике.

Запросы также можно расширять с помощью переменных шаблона.

Форматирование псевдонимов легенды

Подпись в легенде для метрик можно изменить с помощью псевдонимов. В поле Legend Format можно комбинировать псевдонимы, определённые ниже, любым удобным способом.

Например:

  • Blob Type: {{ blobtype }} превращается в Blob Type: PageBlob, Blob Type: BlockBlob
  • {{ resourcegroup }} - {{ resourcename }} превращается в production - web_server
Шаблон псевдонима Описание
{{ subscriptionid }} Заменяется на идентификатор подписки.
{{ subscription }} Заменяется на имя подписки.
{{ resourcegroup }} Заменяется на группу ресурсов.
{{ namespace }} Заменяется на тип ресурса или пространство имён, например Microsoft.Compute/virtualMachines.
{{ resourcename }} Заменяется на имя ресурса.
{{ metric }} Заменяется на имя метрики, например «Percentage CPU».
{{ arbitraryDimensionID }} Заменяется на значение указанного измерения. Например, {{ blobtype }} превращается в BlockBlob.
{{ dimensionname }} (Устарело, сохранено для обратной совместимости) Заменяется на имя первого измерения.
{{ dimensionvalue }} (Устарело, сохранено для обратной совместимости) Заменяется на значение первого измерения.

Фильтрация по измерениям

Некоторые метрики также имеют измерения, которые связывают с ними дополнительные метаданные. Измерения представляют собой пары «ключ — значение», назначенные каждому значению метрики. Grafana может отображать и фильтровать метрики на основе значений измерений.

Источник данных поддерживает операторы equals, not equals и starts with, как описано в документации по API Monitor Metrics.

Дополнительные сведения о многомерных метриках смотрите в документации по метрикам платформы данных Azure Monitor и в документации по фильтрации Azure Monitor.

Запрос журналов Azure Monitor

Azure Monitor Logs собирает и упорядочивает данные журналов и производительности из поддерживаемых ресурсов и делает многие источники данных доступными для совместного запроса с помощью языка запросов Kusto (KQL).

Если Azure Monitor Metrics хранит только упрощённые числовые данные, то журналы могут хранить данные разных типов, каждый со своей структурой. Кроме того, с помощью KQL можно выполнять сложный анализ данных журналов.

Источник данных Azure Monitor также поддерживает запросы к таблицам Basic Logs (если они существуют в вашей рабочей области Log Analytics). Эту возможность необходимо включить в настройках источника данных.

Пример запроса к журналам Azure Monitor, сравнивающего успешные и неуспешные запросы
Пример запроса к журналам Azure Monitor, сравнивающего успешные и неуспешные запросы

Конструктор запросов журналов (публичная предварительная версия)

Note

Конструктор запросов журналов — это функция в стадии публичной предварительной версии. Она может быть недоступна не во всех средах Grafana.

Конструктор запросов журналов предоставляет визуальный интерфейс для построения запросов к журналам Azure Monitor без написания KQL. Это удобно, если вы только начинаете работать с KQL или хотите быстро собрать запрос.

Чтобы включить конструктор запросов журналов:

  1. Включите флаг функции azureMonitorLogsBuilderEditor в конфигурации Grafana.
  2. Перезапустите Grafana, чтобы изменение вступило в силу.

Чтобы переключаться между режимами Builder и Code:

Когда функция включена, в редакторе запросов журналов появляется переключатель Builder / Code:

  • Builder: используйте визуальный интерфейс для выбора таблиц, столбцов, фильтров и агрегаций. Конструктор формирует запрос KQL за вас.
  • Code: пишите запросы KQL напрямую. Используйте этот режим для сложных запросов, требующих всех возможностей KQL.

Новые запросы по умолчанию открываются в режиме Builder. Существующие запросы, созданные с помощью «сырого» KQL, остаются в режиме Code. При переключении в режим Builder настройка диапазона времени автоматически меняется на Dashboard, поскольку конструктор сам управляет фильтрацией по времени.

Note

В любой момент можно переключиться из режима Builder в режим Code, чтобы посмотреть или отредактировать сгенерированный KQL. Однако переключение из режима Code в режим Builder может не сохранить сложные запросы, которые нельзя представить в интерфейсе конструктора.

Создание запроса к журналам

Чтобы создать запрос к журналам:

  1. В панели Grafana выберите источник данных Azure Monitor.

  2. Выберите службу Logs.

  3. Выберите ресурс для запроса. Можно выбрать несколько ресурсов, если они одного типа.

    В качестве альтернативы можно динамически запрашивать все ресурсы в пределах одной группы ресурсов или подписки.

    Note

    Если в запросе указан временной интервал, используется пересечение временного интервала запроса и диапазона времени дашборда. Подробности смотрите в документации по API.

  4. Введите ваш запрос KQL.

Запросы также можно расширять с помощью переменных шаблона.

Чтобы создать запрос к Basic Logs:

  1. Убедитесь, что в настройках источника данных включён переключатель Enable Basic Logs.
  2. В панели Grafana выберите источник данных Azure Monitor.
  3. Выберите службу Logs.
  4. Выберите один ресурс для запроса. Запросы к Basic Logs поддерживают только один ресурс рабочей области.
  5. Переключите переключатель Logs с Analytics на Basic. Появится диалоговое окно с предупреждением о возможных дополнительных расходах.
  6. Введите ваш запрос KQL.

Caution

Запросы к Basic Logs тарифицируются Azure за каждый запрос. Перед использованием этой функции ознакомьтесь с документацией по ценам Azure.

Запросы к Basic Logs имеют следующие ограничения:

  • Диапазон времени: всегда используется диапазон времени дашборда. Указать диапазон времени внутри самого запроса нельзя.
  • Один ресурс: можно запросить только одну рабочую область Log Analytics. Выбор нескольких ресурсов не поддерживается.
  • Оповещения: запросы к Basic Logs недоступны при создании правил оповещений.
  • Ограничения KQL: некоторые операторы KQL не поддерживаются. Полный список ограничений смотрите в документации Azure.

Запросы также можно расширять с помощью переменных шаблона.

Примеры запросов к журналам

Запросы к журналам Azure Monitor пишутся на языке запросов Kusto (KQL) — богатом языке, похожем на SQL.

В документации Azure есть материалы, которые помогут изучить KQL:

Note

Диапазон времени: диапазон времени, используемый для запроса, можно изменить с помощью переключателя диапазона времени:

  • Выбор Query использует только диапазоны времени, указанные внутри запроса.
  • Выбор Dashboard использует только диапазон времени дашборда Grafana.
  • Если в запросе диапазон времени не указан, применяется диапазон времени Log Analytics по умолчанию.

Более подробную информацию смотрите в документации по API Azure Monitor Logs. Если вы ранее использовали параметр Intersection, он перенесён в Dashboard.

Этот пример запроса возвращает производительность CPU виртуальной машины, усреднённую по 5-минутным шагам времени:

kusto
Perf
// $__timeFilter is a special Grafana macro that filters the results to the time span of the dashboard
| where $__timeFilter(TimeGenerated)
| where CounterName == "% Processor Time"
| summarize avg(CounterValue) by bin(TimeGenerated, 5m), Computer
| order by TimeGenerated asc

Используйте запросы временных рядов для значений, которые меняются со временем, обычно для графических визуализаций, таких как панель Time series. Каждый запрос должен возвращать как минимум столбец datetime и столбец с числовым значением. Результат также должен быть отсортирован по столбцу datetime по возрастанию.

Можно также создать запрос как минимум с одним нечисловым столбцом, не являющимся datetime. Azure Monitor считает такие столбцы измерениями, и они становятся метками в ответе.

Например, этот запрос возвращает агрегированное количество с группировкой по часу, Computer и CounterName:

kusto
Perf
| where $__timeFilter(TimeGenerated)
| summarize count() by bin(TimeGenerated, 1h), Computer, CounterName
| order by TimeGenerated asc

Можно также выбрать дополнительные числовые столбцы значений — с несколькими измерениями или без них. Например, этот запрос возвращает количество и среднее значение с группировкой по часу, Computer, CounterName и InstanceName:

kusto
Perf
| where $__timeFilter(TimeGenerated)
| summarize Samples=count(), ["Avg Value"]=avg(CounterValue)
    by bin(TimeGenerated, $__interval), Computer, CounterName, InstanceName
| order by TimeGenerated asc

Используйте табличные запросы с панелью Table, чтобы получить список столбцов и строк. Этот запрос возвращает строки с шестью указанными столбцами:

kusto
AzureActivity
| where $__timeFilter()
| project TimeGenerated, ResourceGroup, Category, OperationName, ActivityStatus, Caller
| order by TimeGenerated desc

Использование макросов в запросах к журналам

Чтобы помочь вам писать запросы, в предложении where можно использовать несколько макросов Grafana:

Макрос Описание
$__timeFilter() Фильтрует результаты по диапазону времени дашборда. Пример: TimeGenerated >= datetime(2018-06-05T18:09:58.907Z) and TimeGenerated <= datetime(2018-06-05T20:09:58.907Z).
$__timeFilter(datetimeColumn) То же, что и $__timeFilter(), но позволяет указать собственное поле для фильтрации.
$__timeFrom() Возвращает начало диапазона времени дашборда. Пример: datetime(2018-06-05T18:09:58.907Z).
$__timeTo() Возвращает конец диапазона времени дашборда. Пример: datetime(2018-06-05T20:09:58.907Z).
$__escapeMulti($myVar) Экранирует недопустимые символы в многозначных переменных шаблона. Если переменная $myVar имеет строковое значение '\\grafana-vm\Network(eth0)\Total','\\hello!', используйте этот макрос, чтобы развернуть его в @'\\grafana-vm\Network(eth0)\Total', @'\\hello!'. При использовании однозначных переменных экранируйте переменную прямо в строке: @'\$myVar'.
$__contains(colName, $myVar) Разворачивает многозначные переменные шаблона. Если переменная $myVar имеет значение 'value1','value2', используйте этот макрос, чтобы развернуть его в colName in ('value1','value2'). При использовании параметра All установите флажок Include All Option и введите значение all в поле Custom all value. Если переменная $myVar имеет значение all, макрос вместо этого разворачивается в 1 == 1. Для переменных шаблона с множеством вариантов это позволяет избежать построения большого предложения «where..in», что повышает производительность.

Кроме того, в Grafana есть встроенный макрос $__interval, который вычисляет интервал в секундах.

Запрос Azure Resource Graph

Azure Resource Graph (ARG) — это служба Azure, созданная для расширения Azure Resource Management за счёт эффективного исследования ресурсов и возможности масштабных запросов по набору подписок, что позволяет более эффективно управлять средой. Запрашивая ARG, вы можете искать ресурсы со сложной фильтрацией, итеративно исследовать ресурсы в соответствии с требованиями управления и оценивать влияние применения политик в крупной облачной среде.

Пример запроса к Azure Resource Graph со списком виртуальных машин в учётной записи
Пример запроса к Azure Resource Graph со списком виртуальных машин в учётной записи

Создание запроса к Resource Graph

Запросы ARG пишутся на варианте языка запросов Kusto (KQL), но не все возможности языка Kusto доступны в ARG.

Запрос к Azure Resource Graph форматируется как табличные данные.

Если ваши учётные данные Azure дают доступ к нескольким подпискам, перед вводом запросов можно выбрать несколько подписок. Также можно выполнять запросы на уровне каталога, изменив область действия запроса.

Note

Некоторые запросы, работающие на уровне каталога, могут не работать на уровне подписки, и наоборот.

Примеры запросов к Resource Graph

В документации Azure также есть примеры запросов, которые помогут вам начать.

Сортировка результатов по свойствам ресурса:

Этот запрос возвращает все ресурсы в выбранных подписках, но только свойства name, type и location:

kusto
Resources
| project name, type, location
| order by name asc

В этом запросе order by используется для сортировки свойств по свойству name по возрастанию (asc). Вы можете изменить свойство сортировки и порядок (asc или desc). В этом запросе project используется, чтобы показать в результатах только перечисленные свойства. С его помощью можно добавлять или убирать свойства в запросах.

Запрос ресурсов со сложной фильтрацией:

Можно фильтровать ресурсы Azure по имени и значению тега.

Например, этот запрос возвращает список ресурсов со значением тега environment, равным Internal:

kusto
Resources
| where tags.environment=~'internal'
| project name

В этом запросе =~ используется в сравнении type, чтобы сделать запрос нечувствительным к регистру. Также можно использовать project с другими свойствами, добавлять или убирать их.

Группировка и агрегирование значений по свойству:

Для определения правил группировки и агрегирования значений по свойству можно использовать summarize и count.

Например, этот запрос возвращает количество ресурсов в состоянии healthy, unhealthy и not applicable по каждой рекомендации:

kusto
securityresources
| where type == 'microsoft.security/assessments'
| extend resourceId=id,
    recommendationId=name,
    resourceType=type,
    recommendationName=properties.displayName,
    source=properties.resourceDetails.Source,
    recommendationState=properties.status.code,
    description=properties.metadata.description,
    assessmentType=properties.metadata.assessmentType,
    remediationDescription=properties.metadata.remediationDescription,
    policyDefinitionId=properties.metadata.policyDefinitionId,
    implementationEffort=properties.metadata.implementationEffort,
    recommendationSeverity=properties.metadata.severity,
    category=properties.metadata.categories,
    userImpact=properties.metadata.userImpact,
    threats=properties.metadata.threats,
    portalLink=properties.links.azurePortal
| summarize numberOfResources=count(resourceId) by tostring(recommendationName), tostring(recommendationState)

В ARG многие вложенные свойства (properties.displayName) имеют тип dynamic, и для работы с ними их следует приводить к строке с помощью tostring().

Использование макросов в запросах к Resource Graph

Чтобы помочь вам писать запросы, в предложении where можно использовать несколько макросов Grafana:

Макрос Описание
$__timeFilter() Разворачивается в timestamp ≥ datetime(2018-06-05T18:09:58.907Z) and timestamp ≤ datetime(2018-06-05T20:09:58.907Z), где значения даты и времени «от» и «до» берутся из средства выбора времени Grafana.
$__timeFilter(datetimeColumn) Разворачивается в datetimeColumn ≥ datetime(2018-06-05T18:09:58.907Z) and datetimeColumn ≤ datetime(2018-06-05T20:09:58.907Z), где значения даты и времени «от» и «до» берутся из средства выбора времени Grafana.
$__timeFrom() Возвращает начало диапазона времени дашборда из средства выбора Grafana. Пример: datetime(2018-06-05T18:09:58.907Z).
$__timeTo() Возвращает конец диапазона времени дашборда из средства выбора Grafana. Пример: datetime(2018-06-05T20:09:58.907Z).
$__escapeMulti($myVar) Экранирует недопустимые символы в многозначных переменных шаблона. Если переменная $myVar имеет строковое значение '\\grafana-vm\Network(eth0)\Total','\\hello!', макрос разворачивает его в @'\\grafana-vm\Network(eth0)\Total', @'\\hello!'. При использовании однозначных переменных экранируйте переменную прямо в строке: @'\$myVar'.
$__contains(colName, $myVar) Разворачивает многозначные переменные шаблона. Если переменная $myVar имеет значение 'value1','value2', макрос разворачивает его в colName in ('value1','value2'). При использовании параметра All установите флажок Include All Option и в поле Custom all value введите следующее значение: all. Если переменная $myVar имеет значение all, макрос вместо этого разворачивается в 1 == 1. Для переменных шаблона с множеством вариантов это позволяет избежать построения большого предложения «where..in», что повышает производительность.

Запрос трассировок Application Insights

Azure Application Insights — это служба, предоставляющая возможности мониторинга производительности приложений (APM). Application Insights можно использовать для сбора метрик, телеметрии и данных трассировки.

Application Insights хранит данные трассировок в базовой рабочей области Log Analytics, а трассировки можно расширять, добавляя дополнительную сопроводительную информацию по требованию разработчика приложения.

Создание запроса к трассировкам

Чтобы создать запрос к трассировкам:

  1. В панели Grafana выберите источник данных Azure Monitor.

  2. Выберите службу Traces.

  3. Выберите ресурс для запроса. Можно выбрать несколько ресурсов, если они одного типа.

    Note

    Этот тип запроса поддерживает только ресурсы Application Insights.

  4. (Необязательно) Укажите значение Operation ID, чтобы отфильтровать трассировки.

  5. (Необязательно) Укажите event types для фильтрации.

  6. (Необязательно) Укажите event properties для фильтрации.

  7. (Необязательно) Измените Result format, чтобы переключаться между табличным форматом и форматом трассировки.

    Note

    Выбор формата трассировки фильтрует события, оставляя только события типа trace. Используйте этот формат с визуализацией Trace.

Выполнение запроса возвращает все данные трассировок в пределах временного интервала, заданного диапазоном времени панели или дашборда.

Запросы также можно расширять с помощью переменных шаблона.

Использование запросов в правилах оповещений и записи

Все типы запросов Azure Monitor (Metrics, Logs, Azure Resource Graph и Traces) можно использовать в правилах оповещений и правилах записи Grafana.

Подробную информацию о создании правил оповещений, поддерживаемых типах запросов, требованиях к аутентификации и примеры смотрите в разделе Оповещения Azure Monitor.

Работа с большими наборами данных ресурсов Azure

Если запрос превышает максимально допустимое число записей, результат разбивается на страницы и возвращается только первая страница результатов. Чтобы уменьшить объём возвращаемых записей ниже этого значения, можно использовать фильтры.

Дальнейшие шаги