where
Описание
Выполняет уточняющий поиск по полученным данным.
Синтаксис
where <boolean-condition> | <boolean-function> [AND | OR | NOT <boolean-condition> | <boolean-function>]
Обязательные аргументы
Параметр | Синтаксис | Описание |
---|---|---|
boolean-condition | <field> > | >= | == | < | <= | != <field> |<value> | Определяет условие сравнения. Сравнение может быть определено как поле <-> значение , так и поле <-> поле . |
boolean-function | см. функции | Функции, возвращающие boolean . |
Список доступных функций:
При сравнении с null
результат всегда false
. null == null
(false
).
Примеры запросов
Пример 1
Фильтрация событий, где имя пользователя user
точно соответствует значению Aleksey
.
... | where user == "Aleksey"
Пример 2
Фильтрация событий, где объем переданных данных bytes
превышает или равен 8749
байт.
... | where bytes >= 8749
Пример 3
Фильтрация событий, где объем переданных данных bytes
превышает или равен 8749
байт или IP-адрес ipaddr
равен 104.182.234.109
.
... | where bytes >= 8749 or ipaddr == "104.182.234.109"
Пример 4
Создание булевого флага myVal
для проверки типа соединения conn_type
и фильтрация событий, где соединение не является vpn
.
... | eval myVal=if(conn_type == "vpn", true(), false())
| where myVal == false()
Пример 5
... | where (winlog.computer_name == "VLG-WEB01" or source.host != "WS-IVANOV") and isnotnull(event.type)
Пример входных данных:
winlog.computer_name | source.host | event.type |
---|---|---|
VLG-WEB01 | WS-PETROV | start |
SRV-DB01 | WS-IVANOV | change |
VLG-WEB01 | SRV-APP01 | null |
SRV-WEB02 | WS-SIDOROV | end |
Результатом выполнения запроса может быть следующая таблица:
winlog.computer_name | source.host | event.type |
---|---|---|
VLG-WEB01 | WS-PETROV | start |
SRV-WEB02 | WS-SIDOROV | end |
Пример 6
Фильтрация событий, где HTTP-ответ response
имеет клиентские или серверные коды ошибок и адрес назначения находится в подсети 192.168.12.0/24
. Функция like
использует шаблон с символом %
для поиска строк, начинающихся с указанной цифры. Функция cidrmatch
проверяет соответствие IP-адреса destination
заданной подсети в формате CIDR.
... | where like(response, "4%") OR like(response, "5%") AND cidrmatch("190.100.10.0/24", destination)
Пример входных данных:
destination | response |
---|---|
190.100.10.10 | 200 |
190.100.10.2 | 404 |
190.100.10.22 | 500 |
10.0.0.5 | 403 |
190.100.10.25 | 503 |
Результатом выполнения запроса может быть следующая таблица:
destination | response |
---|---|
190.100.10.2 | 404 |
190.100.10.22 | 500 |
190.100.10.25 | 503 |
Пример 7
Развертывание multivalue-полей с последующим поиском и подсчетом событий для каждого значения из развернутых полей.
В данном примере система выполняет последовательную обработку данных для анализа товаров в заказах. Сначала команда stats
агрегирует уникальные значения товаров в заказах в multivalue поле order_items
для каждого события.
source orders-*
| stats values(order.items) as order_items
Затем mvexpand
разворачивает multivalue поле, создавая отдельное событие для каждого товара.
| mvexpand order_items
Далее команда map
с параметром maxsearches=30
выполняет подзапрос, фильтруя результат по имени товара item.name
, совпадающему с текущим значением order_items
.
| map maxsearches = 30 [source items-* qsize=1000 | where item.name == $order_items$]
В конце система агрегирует данные, подсчитывая количество вхождений каждого товара по полю item.name
. Полный код представлен ниже:
source orders-*
| stats values(order.items) as order_items
| mvexpand order_items
| map maxsearches = 30 [source items-* qsize=1000 | where item.name == $order_items$]
| stats count by item.name
Пример входных данных в источнике orders-*
:
order.id | user | order.items |
---|---|---|
1 | ivanov | ["iFruit", "Binco T-Shirt"] |
2 | petrov | ["Binco T-Shirt", "Crowlex"] |
3 | andreev | ["iFruit"] |
Пример входных данных в источнике items-*
:
item.id | item.name | item.category |
---|---|---|
1 | iFruit | electronics |
2 | Binco T-Shirt | clothing |
3 | Crowlex | accessories |
Результатом выполнения запроса может быть следующая таблица:
item.name | count |
---|---|
iFruit | 2 |
Binco T-Shirt | 2 |
Crowlex | 1 |