Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняются основы построения запросов в Azure Monitor Logs, в том числе, как:
- Структура запроса.
- Сортировка результатов запроса.
- Фильтрация результатов запроса.
- Укажите диапазон времени.
- Включите или исключите столбцы в результатах запроса.
- Определение и использование настраиваемых полей.
- Статистические и групповые результаты.
Если применимо, в статье приведены примеры выполнения запросов данных с использованием как языка запросов 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
Выбранные результаты являются произвольными и отображаются без определенного порядка. Если необходимо вернуть результаты в определенном порядке, используйте операторы sort
и top
.
Сортировка результатов
В этом разделе описываются операторы sort
и top
, а также их аргументы desc
и asc
. Хотя 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
Результаты выглядят следующим образом.
Фильтрация результатов
Фильтрация — это наиболее распространенный способ ограничить результаты запроса соответствующими сведениями.
Чтобы добавить фильтр в запрос, используйте where
оператор , за которым следует одно или несколько условий. Например, следующий запрос возвращает только SecurityEvent
записи, в которых Level equals _8
:
SecurityEvent
| where Level == 8
При написании условий фильтра вы можете использовать следующие выражения.
выражение | Описание: | Пример |
---|---|---|
== | Проверка на равенство (с учетом регистра) |
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 часа. Этот диапазон времени по умолчанию применяется ко всем запросам. Чтобы получить записи только из последнего часа, выберите последний час и снова запустите запрос.
Добавление фильтра времени в запрос
Вы также можете определить ваш собственный диапазон времени, добавив фильтр времени к запросу.
Лучше всего поместить фильтр времени сразу после имени таблицы:
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
для выполнения следующих действий:
- Выберите только исходные
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)
Примечание.
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)
Чтобы сделать выходные данные более понятными, можно выбрать его для отображения в виде диаграммы времени, в которой отображается доступная память с течением времени. Чтобы сделать это, перейдите в представление диаграммы, откройте боковую панель форматирования диаграммы справа и выберите строку для типа диаграммы:
Часто задаваемые вопросы
В этом разделы приводятся ответы на часто задаваемые вопросы.
Почему в журналах Azure Monitor отображаются дубликаты записей?
Иногда можно заметить повторяющиеся записи в журналах Azure Monitor. Это дублирование обычно происходит из одного из следующих двух условий:
- Компоненты в цепочке обработки данных выполняют повторные попытки, чтобы обеспечить надежную доставку до места назначения. Иногда эта возможность может привести к дубликатам для небольших процентов элементов телеметрии.
- Если повторяющиеся записи приходят из виртуальной машины, возможно, установлен агент Log Analytics и агент Azure Monitor. Если агент Log Analytics по-прежнему нужен, настройте рабочую область Log Analytics, чтобы больше не собирать данные, собираемые правилом сбора данных, используемым агентом Azure Monitor.
Следующие шаги
- Дополнительные сведения об использовании строкового типа данных в запросе журнала см. в статье Работа со строками в запросах журнала Azure Monitor.
- Дополнительные сведения об агрегировании данных в запросе журнала см. в статье Расширенное агрегирование в запросах журнала Azure Monitor.
- Дополнительные сведения об объединении данных из нескольких таблиц см. в статье Объединения в запросах журнала Azure Monitor.
- Получите документацию по всему языку запросов Kusto в справочнике языка KQL.