Поделиться через


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

В этой статье описываются основы написания запросов журналов в журналах Azure Monitor, включая инструкции.

В этом случае в статье приведены примеры запроса данных с помощью простого режима язык запросов Kusto (KQL) и Log Analytics.

Примечание.

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

Видеоучебник

Примечание.

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


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

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

Структура запроса

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

Примечание.

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

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

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

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

SecurityEvent
| take 10

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

  • Запрос начинается с имени SecurityEventтаблицы, которая определяет область запроса.
  • Символ вертикальной черты ("|") разделяет команды, поэтому выходные данные первой команды содержатся во входных данных следующей. Можно добавить любое число элементов, разделенных этой чертой.
  • После канала используется take оператор. Запрос можно запустить даже без добавления | take 10. Команда по-прежнему будет допустимой, но она может вернуть до 30 000 результатов.

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

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

Этот запрос выполняет поиск SecurityEvent в таблице записей, содержащих фразу "Криптографика". Из этих записей возвращаются и отображаются 10 записей:

search in (SecurityEvent) "Cryptographic"
| take 10

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

Внимание

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

Ограничение результатов

take Используйте оператор для просмотра небольшого образца записей, возвращая до указанного количества записей. Например:

SecurityEvent
| take 10

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

Сортировка результатов

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

Сортировать

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

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

SecurityEvent	
| sort by TimeGenerated

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

Desc и asc

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

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

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

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

Верх

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

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

SecurityEvent
| top 10 by TimeGenerated

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

Снимок экрана: первые 10 записей, отсортированных по убыванию.

Фильтрация результатов

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

Чтобы добавить фильтр в запрос, используйте 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


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

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

Примечание.

Если в запрос включен диапазон времени, средство выбора времени автоматически изменяет значение Set в запросе. Если вы вручную измените средство выбора времени на другое значение, Log Analytics применяет меньший из двух диапазонов времени.

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

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

Снимок экрана: средство выбора времени и его список команд диапазона времени в режиме KQL.

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

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

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

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

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

Включение или исключение столбцов в результатах запроса

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

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

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

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

Можно также использовать 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)

Примечание.

extend Используйте оператор для нерегламентированных вычислений в запросах. Используйте преобразования во время приема или сводные правила для преобразования или агрегирования данных во время приема для более эффективных запросов.

вычислять и группировать результаты.

Агрегированные группы строк

Используется 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 == "DC01.na.contosohotels.com" 
| where CounterName == "Available MBytes" 
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)

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

Снимок экрана: значения памяти запроса с течением времени в режиме KQL.

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

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

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

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

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

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