Использование подзапросов
Применение подзапроса для поиска
Ниже представлен запрос, который осуществляет поиск событий входа и выхода в источнике данных winlog_auth, а затем выводит результаты в виде таблицы с указанием типа действия, имени пользователя и временной метки события.
source winlog_auth
| search
  [ source winlog_auth
  | search (event.action.keyword="logged-out" OR event.action.keyword="logged-in")
  | table event.action.keyword, user.name
  | format ]
| stats values(user.name) by event.action
- source winlog_auth: указывает, что мы хотим проанализировать данные из источника- winlog_auth.
- | search [source winlog_auth | search (event.action.keyword="logged-out" OR event.action.keyword="logged-in") | table event.action.keyword, user.name | format ]: это подзапрос, который фильтрует данные, чтобы оставить только события входа и выхода. Затем он выводит только два поля: действие- event.action.keywordи имя пользователя- user.name. Результаты подзапроса форматируются с помощью команды- format, чтобы их можно было использовать во внешнем запросе.- | stats values(user.name) by event.action: в этой части запроса мы используем команду stats, чтобы агрегировать данные. Мы группируем результаты по действию (вход или выход) и для каждого действия находим все соответствующие имена пользователей. Это позволяет нам увидеть, какие пользователи выполняли каждое действие.
Добавление событий с помощью append
Одним из способов использования подзапросов в Smart Monitor является добавление дополнительных событий к исходному результату с помощью команды append. Однако, помимо этого, подзапросы также могут использоваться для более сложных задач. Это особенно полезно, когда вам нужно объединить результаты двух или более запросов в одном результате. Подзапрос, используемый с командой append, выполняется отдельно от исходного запроса, и его результаты добавляются к результату основного запроса.
Давайте рассмотрим пример, чтобы лучше понять, как работает добавление событий с помощью append:
source winlog_auth
| search user.name="AllenLaura"
| append [source winlog_auth | search user.name="BakerBrian"]
- | search user.name="AllenLaura": эта часть запроса фильтрует данные так, чтобы остались только события, связанные с пользователем- AllenLaura. Это означает, что будут выбраны только те события, в которых поле "user.name" соответствует значению- AllenLaura.
- | append [source winlog_auth | search user.name="BakerBrian"]: это подзапрос, который выполняет похожий поиск, но для пользователя- BakerBrian. Результаты этого подзапроса добавляются к результатам исходного запроса с помощью команды- append.
Более подробно о том как использовать команду append можно прочитать в разделе Smart Monitor Language
Обогащение данных с помощью join
Команда join позволяет объединять результаты двух запросов на основе общих полей. Подзапрос, используемый в команде join, предназначен для того, чтобы предоставить дополнительные данные, которые могут быть добавлены к исходному результату.
Рассмотрим пример:
source winlog_auth
 | join type=inner event.action event.code [source winlog_auth | search event.action.keyword="logged-out"]
- |join type=inner event.action event.code [source winlog_auth | search event.action.keyword="logged-out"]: это операция объединения- join, которая соединяет результаты двух запросов по общим полям. Мы указываем тип объединения- inner, означает, что выбираются только совпадающие по условию объединения данные. Поэтому мы указываем поля, по которым будем объединять данные:- event.actionи- event.code.
- [source winlog_auth | search event.action.keyword="logged-out"]: это подзапрос, который фильтрует события журнала на основе действия- action, чтобы оставить только события выхода из системы- logged-out. Результаты этого подзапроса будут использоваться для объединения с исходным запросом.
Более подробно о том как использовать команду join можно прочитать в разделе Smart Monitor Language