Начало работы с запросами к журналам Azure Monitor

Примечание.

Вы можете выполнить это упражнение в своей среде, если собираете данные хотя бы с одной виртуальной машины. Если нет, используйте нашу демонстрационную среду, которая содержит большое количество образцов данных.

Если вы уже знаете, как выполнять запросы в язык запросов Kusto (KQL), но необходимо быстро создавать полезные запросы на основе типов ресурсов, см. область сохраненных примеров запросов в разделе "Использование запросов" в Azure Monitor Log Analytics.

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

  • понимать структуру запросов;
  • сортировать результаты запроса;
  • фильтровать результаты запроса;
  • указывать диапазон времени;
  • выбирать поля для включения в результаты;
  • определять и использовать настраиваемые поля;
  • вычислять и группировать результаты.

Руководство по использованию Log Analytics на портале Azure см. в разделе Начало работы со службой Log Analytics в Azure Monitor.

Дополнительные сведения о запросах журналов в Azure Monitor см. в разделе Общие сведения о запросах журналов в Azure Monitor.

Просмотрите видеоверсию этого учебника:

Требуемые разрешения

У вас должны быть Microsoft.OperationalInsights/workspaces/query/*/read разрешения на запрашиваемые рабочие области Log Analytics, как указано встроенной ролью Log Analytics Reader, например.

Написание запроса

Запросы могут начинаться с имени таблицы или search команды. Рекомендуется начать с имени таблицы, так как он определяет четкий область для запроса. Он также повышает производительность запросов и релевантность результатов.

Примечание.

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

Запросы на основе таблиц

Azure Monitor упорядочивает данные журнала в таблицы, каждая из которых состоит из нескольких столбцов. На портале Analytics в области схемы в Log Analytics отображаются все таблицы и столбцы. Определите интересующую вас таблицу, а затем взгляните на часть данных:

SecurityEvent
| take 10

Предыдущий запрос возвращает 10 результатов из таблицы без определенного SecurityEvent порядка. Это общий способ получить взгляд на таблицу помогает понять ее структуру и содержимое. Давайте рассмотрим структуру запроса:

  • Запрос начинается с имени SecurityEventтаблицы, которая определяет область запроса.

  • Символ вертикальной черты ("|") разделяет команды, поэтому выходные данные первой команды содержатся во входных данных следующей. Можно добавить любое число элементов, разделенных этой чертой.

  • После канала используется take оператор.

    Запрос можно запустить даже без добавления | take 10. Команда по-прежнему будет допустимой, но она может вернуть до 30 000 результатов.

Take

take Используйте оператор для просмотра небольшого образца записей, возвращая до указанного количества записей. Выбранные результаты являются произвольными и отображаются без определенного порядка. Если необходимо вернуть результаты в определенном порядке, используйте операторы и операторыsort.top

Искать запросы

Поисковые запросы менее структурированы. Они лучше подходят для поиска записей, которые включают определенное значение в любом из их столбцов:

search in (SecurityEvent) "Cryptographic"
| take 10

Этот запрос выполняет поиск SecurityEvent в таблице записей, содержащих фразу "Криптографика". Из этих записей возвращаются и отображаются 10 записей. Если опустить in (SecurityEvent) часть и запустить только search "Cryptographic"ее, поиск проходит по всем таблицам. Затем процесс займет больше времени и будет менее эффективным.

Важно!

Поисковые запросы обычно выполняются медленнее, чем запросы на основе таблиц, поскольку они обрабатывают больше данных.

Операторы sort и top

В этом разделе описываются sort операторы и top их descasc аргументы. Хотя take это полезно для получения нескольких записей, вы не можете выбрать или отсортировать результаты в определенном порядке. Чтобы получить упорядоченное представление, используйте sort и top.

Desc и asc

Desc

desc Используйте аргумент для сортировки записей в порядке убывания. Убывание — это порядок sort сортировки по умолчанию, поэтому topобычно можно опустить desc аргумент.

Например, данные, возвращаемые обеими из следующих запросов, сортируются по столбцу TimeGenerated в порядке убывания:

  • SecurityEvent	
    | sort by TimeGenerated desc
    
  • SecurityEvent	
    | sort by TimeGenerated
    

Asc

Чтобы отсортировать по возрастанию, укажите asc.

Сортировать

Оператор можно использоватьsort. sort сортирует результаты запроса по указанному столбцу. sort Однако не ограничивает количество записей, возвращаемых запросом.

Например, следующий запрос возвращает все доступные записи для SecurityEvent таблицы, которая составляет не более 30 000 записей и сортирует их по столбцу TimeGenerated.

SecurityEvent	
| sort by TimeGenerated

Предыдущий запрос может возвращать слишком много результатов. Кроме того, может потребоваться некоторое время, чтобы вернуть результаты. Запрос сортирует всю SecurityEvent таблицу по столбцу TimeGenerated . Затем портал Аналитики ограничивает отображение только 30 000 записей. Такой подход не является оптимальным. Лучший способ получить только последние записи — использовать top оператор.

Верх

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

Например, следующий запрос возвращает последние 10 записей:

SecurityEvent
| top 10 by TimeGenerated

Выходные данные выглядят следующим образом.

Screenshot that shows the top 10 records sorted in descending order.

Оператор where: Filter on a condition

Фильтры, как очевидно из названия, фильтруют данные по указанному условию. Фильтрация — это наиболее распространенный способ ограничить результаты запроса соответствующими сведениями.

Чтобы добавить фильтр в запрос, используйте where оператор , за которым следует одно или несколько условий. Например, следующий запрос возвращает только SecurityEvent записи, в которых Level equals _8:

SecurityEvent
| where Level == 8

При написании условий фильтра вы можете использовать следующие выражения.

Expression Описание: Пример
== Проверка на равенство
(с учетом регистра)
Level == 8
=~ Проверка на равенство
(без учета регистра)
EventSourceName =~ "microsoft-windows-security-auditing"
!=, <> Проверка на неравенство
(оба выражения идентичны)
Level != 4
and, or Требуются между условиями Level == 16 or CommandLine != ""

Для фильтрации по нескольким условиям можно использовать любой из следующих подходов.

Используйте and, как показано здесь:

SecurityEvent
| where Level == 8 and EventID == 4672

Канал нескольких where элементов, один за другим, как показано здесь:

SecurityEvent
| where Level == 8 
| where EventID == 4672

Примечание.

Значения могут иметь разные типы, поэтому может потребоваться привести их в правильный тип для выполнения сравнения. Например, SecurityEvent Level столбец имеет тип String, поэтому необходимо привести его к числовой типу, например int или long, прежде чем использовать числовые операторы на нем, как показано ниже: SecurityEvent | where toint(Level) >= 10

Указание диапазона времени

Можно указать диапазон времени с помощью средства выбора времени или фильтра времени.

Использование элемента выбора времени

Средство выбора времени отображается рядом с кнопкой "Запуск " и указывает, что вы запрашиваете записи только за последние 24 часа. Этот диапазон времени по умолчанию применяется ко всем запросам. Чтобы получить записи только из последнего часа, выберите последний час и снова запустите запрос.

Screenshot that shows the time picker and its list of time-range commands.

Добавление фильтра времени в запрос

Вы также можете определить ваш собственный диапазон времени, добавив фильтр времени к запросу. Добавление фильтра времени переопределяет диапазон времени, выбранный в средство выбора времени.

Лучше всего поместить фильтр времени сразу после имени таблицы:

SecurityEvent
| where TimeGenerated > ago(30m) 
| where toint(Level) >= 10

В предыдущем фильтре ago(30m) времени означает "30 минут назад". Этот запрос возвращает записи только за последние 30 минут, которые выражаются, например, 30 млн. Можно использовать и другие единицы времени, например дни (2d) и секунды (10s).

Использование операторов project и extend для выбора и вычисления столбцов

Используется project для выбора определенных столбцов для включения в результаты:

SecurityEvent 
| top 10 by TimeGenerated 
| project TimeGenerated, Computer, Activity

Приведенный выше пример формирует следующие выходные данные:

Screenshot that shows the query 'project' results list.

Можно также использовать project для переименования столбцов и определения новых. Следующий пример используется project для выполнения следующих действий:

  • Выберите только исходные ComputerTimeGenerated столбцы.
  • Отображение столбца Activity как EventDetails.
  • Создайте новый столбец с именем EventCode. Функция substring() используется для получения только первых четырех символов из Activity поля.
SecurityEvent
| top 10 by TimeGenerated 
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)

Вы можете использовать extend для хранения всех исходных столбцов в результирующем наборе и определения других. Следующий запрос используется extend для добавления столбца EventCode . Этот столбец может не отображаться в конце результатов таблицы. Вам потребуется развернуть сведения о записи, чтобы просмотреть ее.

SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)

Использование оператора summarize для агрегирования групп строк

Используется summarize для идентификации групп записей в соответствии с одним или несколькими столбцами и применения агрегатов к ним. Наиболее распространенное использование summarize заключается countв том, что возвращается количество результатов в каждой группе.

Следующий запрос проверяет все Perf записи из последнего часа, группирует их по ObjectNameи подсчитывает записи в каждой группе:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName

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

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName

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

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer

К сожалению, результаты этого запроса бессмысленны, так как мы смешали разные счетчики производительности. Чтобы сделать результаты более значимыми, вычислите среднее значение по каждому сочетанию CounterName и Computer:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName

Суммирование по столбцу времени

Результаты группировки также могут быть основаны на столбце времени или другом непрерывном значении. Просто сводные данные by TimeGenerated, однако, будут создавать группы для каждого отдельного миллисекунда в диапазоне времени, так как эти значения уникальны.

Чтобы создать группы на основе непрерывных значений, рекомендуется разбить диапазон на управляемые единицы с помощью bin. Следующий запрос анализирует записи, которые измеряют Perf свободную память (Available MBytes) на определенном компьютере. Он рассчитывает среднее значение каждого периода в 1 час за последние 7 дней:

Perf 
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2" 
| where CounterName == "Available MBytes" 
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)

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

Screenshot that shows the values of a query memory over time.

Часто задаваемые вопросы

В этом разделы приводятся ответы на часто задаваемые вопросы.

Почему в журналах Azure Monitor отображаются дубликаты записей?

Иногда можно заметить повторяющиеся записи в журналах Azure Monitor. Это дублирование обычно происходит из одного из следующих двух условий:

  • Компоненты в конвейере выполнять несколько попыток доставки в место назначения. Иногда эта возможность может привести к дубликатам для небольших процентов элементов телеметрии.
  • Если повторяющиеся записи приходят из виртуальной машины, возможно, установлен агент Log Analytics и агент Azure Monitor. Если агент Log Analytics по-прежнему нужен, настройте рабочую область Log Analytics, чтобы больше не собирать данные, собираемые правилом сбора данных, используемым агентом Azure Monitor.

Следующие шаги