Начало работы с запросами к журналам 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
их desc
asc
аргументы. Хотя 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
Выходные данные выглядят следующим образом.
Оператор 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 часа. Этот диапазон времени по умолчанию применяется ко всем запросам. Чтобы получить записи только из последнего часа, выберите последний час и снова запустите запрос.
Добавление фильтра времени в запрос
Вы также можете определить ваш собственный диапазон времени, добавив фильтр времени к запросу. Добавление фильтра времени переопределяет диапазон времени, выбранный в средство выбора времени.
Лучше всего поместить фильтр времени сразу после имени таблицы:
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
Приведенный выше пример формирует следующие выходные данные:
Можно также использовать project
для переименования столбцов и определения новых. Следующий пример используется project
для выполнения следующих действий:
- Выберите только исходные
Computer
TimeGenerated
столбцы. - Отображение столбца
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)
Чтобы сделать выходные данные более понятными, можно выбрать его для отображения в виде диаграммы времени, в которой отображается доступная память с течением времени.
Часто задаваемые вопросы
В этом разделы приводятся ответы на часто задаваемые вопросы.
Почему в журналах Azure Monitor отображаются дубликаты записей?
Иногда можно заметить повторяющиеся записи в журналах Azure Monitor. Это дублирование обычно происходит из одного из следующих двух условий:
- Компоненты в конвейере выполнять несколько попыток доставки в место назначения. Иногда эта возможность может привести к дубликатам для небольших процентов элементов телеметрии.
- Если повторяющиеся записи приходят из виртуальной машины, возможно, установлен агент Log Analytics и агент Azure Monitor. Если агент Log Analytics по-прежнему нужен, настройте рабочую область Log Analytics, чтобы больше не собирать данные, собираемые правилом сбора данных, используемым агентом Azure Monitor.
Следующие шаги
- Дополнительные сведения об использовании строкового типа данных в запросе журнала см. в статье Работа со строками в запросах журнала Azure Monitor.
- Дополнительные сведения об агрегировании данных в запросе журнала см. в статье Расширенное агрегирование в запросах журнала Azure Monitor.
- Дополнительные сведения об объединении данных из нескольких таблиц см. в статье Объединения в запросах журнала Azure Monitor.
- Получите документацию по всему язык запросов Kusto в справочнике по языку KQL.