Перейти к основному содержимому
Версия: 5.1

lookup

Описание

Позволяет получить данные из предопределенного справочника (lookup). Команда выполняет сравнение заданных полей в событии и справочнике. При полном соответствии событие будет обогащено указанными полями из справочника.

Синтаксис

lookup [dedup=<boolean>] [<execution-type>] [system=<boolean>] <lookup-name>  ( <lookup-field> [AS <event-field>] )... [ OUTPUT | OUTPUTNEW (<lookup-destfield> [AS <event-destfield>] )... ]

Обязательные аргументы

ПараметрСинтаксисОписание
lookup-name<lookup-name>Имя предопределенного lookup.

Опциональные аргументы

ПараметрСинтаксисПо умолчаниюОписание
dedupdedup=<boolean>falseУказывает, нужно ли убирать дубликаты из данных, которые сравниваются с лукапом.
<execution-type>type=SOURCE [packsize=<integer>] | FAST | ERGODEFAULTСм. Режимы выполнения
systemsystem=<boolean>falseПри значении true запрашивается системный лукап, в противном случае пользовательский.
lookup-field<string>Название поля для сравнения. Могут быть указаны несколько полей. Разделитель между полями запятая.
event-field<string>Имя поля в основном результате для сравнения с lookup-field. Используется в случае если названия lookup-field и event-field не совпадают.
lookup-destfield<string>Имя результирующего поля с полученными из справочника данными.
OUTPUT | OUTPUTNEWOUTPUT | OUTPUTNEWOUTPUTИндикатор OUTPUT указывает, на то что, существующие данные в поле исходного запроса будут перезаписаны данными из lookup. Индикатор OUTPUTNEW указывает на то, что данные в поле исходного запроса будут перезаписаны, если поле не заполнено, но есть данные для этого поля в lookup.

Режимы выполнения

  • DEFAULT - режим по умолчанию. Рекомендуется использовать только для небольшого потока входящих событий и маленьких лукапов.
  • FAST - оптимизированная по скорости версия стандартного алгоритма. Рекомендуется использовать в большинстве случаев.
  • ERGO - оптимизированная по использованию оперативной памяти версия стандартного алгоритма. Рекомендуется использовать при сравнении по нескольким полям.
  • SOURCE - выполняет сопоставление средствами хранилища. Дополнительно можно указать значение packsize, который определяет размер пачки запросов к хранилищу.
Лимиты при загрузке лукапов

При загрузке в оперативную память лукапов в режимах FAST и ERGO применяется пользовательский лимит Количество запрашиваемых данных. Если размер лукапа превышает этот лимит, его можно повысить или использовать режим SOURCE.

Рекомендации по настройке режима SOURCE

Для типа выполнения SOURCE рекомендуется не ставить большой max_initial_query_len. Параметр packsize указывает на то, по сколько событий будет за один запрос обрабатываться движком в каждой итерации. То есть если max_initial_query_len = 10.000, а packsize = 5.000, то за одну итерацию в 10 тысяч событий будет отправлено два запроса (max_initial_query_len/packsize). Если max_initial_query_len больше 20 тысяч, то рекомендуется выполнять команду с параметром packsize в два или три раза меньше max_initial_query_len.

Работа с multivalue

к сведению

Multivalue - это возможность для атрибута иметь несколько значений, вместо одного. Multivalue можно представить в виде списка значений. Примерами multivalue может выступать список ролей пользователя.

При работе команды lookup тип значения multivalue могут принимать как поля из результатов поиска (multivalue слева), так и поля из справочников (multivalue справа). Таким образом, существует три случая, когда команда lookup содержит в себе multivalue:

  • multivalue слева
  • multivalue справа
  • multivalue и слева, и справа

Multivalue-значение слева

Значение из справочника сопоставляется с результатом поиска в случае, если значение из справочника содержится в multivalue-значении результата поиска.

Значение слеваЗначение справаПересечение значенийСопоставление
[1, 2, 3, 4, 5]33Да
[1, 2, 3, 4, 5]6-Нет

Multivalue-значение справа

Значение из справочника сопоставляется с результатом поиска в случае, если результат поиска содержится в multivalue-значении из справочника.

Значение слеваЗначение справаПересечение значенийСопоставление
3[1, 2, 3, 4, 5]3Да
6[1, 2, 3, 4, 5]-Нет

Multivalue-значение и слева, и справа

Значение из справочника с результатом поиска в случае, если пересечение multivalue-значений слева и справа не является пустым

Значение слеваЗначение справаПересечение значенийСопоставление
[1, 2, 3, 4, 5][3][3]Да
[1, 2, 3, 4, 5][1, 2, 5][1, 2, 5]Да
[1, 2, 3, 4, 5][1, 2, 6][1, 2]Да
[1, 2, 3][4, 5, 6]-Нет
[1, 2, 3][4]-Нет

Примеры запросов

Пример 1

В первом примере для каждого входящего события выполняется сопоставление поля database из события и поля name в каждой строчке справочника. Если эти значения совпали, в событие будет добавлено поле engine, значение которого будет взято из соответствующей строчки справочника. Если в событие уже было поле engine, оно будет перезаписано новым значением.

Пример входных данных tables-*:

_timedatabasetable_nameengine
2025-06-05 14:30:00hremployees
2025-06-05 14:31:00hrdepartmentsMyISAM
2025-06-05 14:32:00salesordersInnoDB

Справочник my_click_db:

nametable_nameenginedescriptionversionrowssize.mb
hremployeesInnoDBEmployee data8.0.301001.2
hrdepartmentsInnoDBDepartment data8.0.30100.5
salesordersMyISAMOrders data5.7.4225000045.7
financetransactionsInnoDBFinancial transactions8.0.30500008.1
Использование опции OUTPUT

Опция OUTPUT перезаписывает поле engine в событиях значениями из справочника, даже если engine уже заполнено.

Пример №1
source tables
| search database = "hr"
| lookup my_click_db name as database OUTPUT engine

Результатом запроса может быть следующая таблица:

_timedatabasetable_nameenginedescriptionversionrowssize.mb
2025-06-05 14:30:00hremployeesInnoDBEmployee data8.0.301001.2
2025-06-05 14:31:00hrdepartmentsInnoDBDepartment data8.0.30100.5
Использование опции OUTPUTNEW и режима выполнения SOURCE

В данном примере выполняется аналогичное сопоставление в режиме SOURCE. Это значит, что сопоставление будет выполнено средствами хранилища. Параметр packsize=5000 указывает, что запросы к хранилищу будут отправляться пачками по 5000. Опция OUTPUTNEW указывает, что поле engine не будет перезаписано, если оно уже есть в событии.

Пример №1
source tables
| search database = "hr"
| lookup type=SOURCE packsize=5000 my_click_db name as database OUTPUTNEW engine

Результатом запроса может быть следующая таблица:

_timedatabasetable_nameenginedescriptionversionrowssize.mb
2025-06-05 14:30:00hremployeesInnoDBEmployee data8.0.301001.2
2025-06-05 14:31:00hrdepartmentsMyISAMDepartment data8.0.30100.5

Пример 2

Пример №2
source security_incidents-*
| search vulnerabilities="CVE-*"
| lookup type=ERGO vulnerabilities_info cve_id AS vulnerabilities OUTPUT description, severity

Вщ втором примере выполняется сопоставление поля vulnerabilities из события и многозначного поля cve_id в каждой строчке справочника. Команда выполняется в режиме ERGO. Это значит, что сопоставление оптимизировано для экономии оперативной памяти. Опция OUTPUT указывает, что поля description и severity из справочника перезаписывают или добавляются в события, обогащая их информацией об уязвимостях.

Пример входных данных security_incidents-*:

_timehostvulnerabilitiesaffected_system
2025-06-05 14:30:00VLG-01CVE-2023-1234
CVE-2023-5678
WebServer
2025-06-05 14:32:00VLG-02CVE-2023-5678
CVE-2024-9012
Database

Справочник vulnerabilities_info:

cve_iddescriptionseverity
CVE-2023-1234SQL Injection VulnerabilityHigh
CVE-2023-5678Cross-Site Scripting (XSS)Medium
CVE-2024-9012Remote Code ExecutionCritical

Результатом запроса может быть следующая таблица:

hostaffected_systemdescriptionseverity
VLG-01WebServerSQL Injection VulnerabilityHigh
VLG-01WebServerCross-Site Scripting (XSS)Medium
VLG-02DatabaseCross-Site Scripting (XSS)Medium
VLG-02DatabaseRemote Code ExecutionCritical
Использование аргумента dedup

Команда lookup обогащает события информацией об уязвимостях description и severity, исключая дубликаты в поле vulnerabilities перед сопоставлением благодаря опции dedup=true.

Пример №2 с dedup
source security_incidents-*
| search vulnerabilities="CVE-*"
| lookup type=ERGO vulnerabilities_info cve_id AS vulnerabilities OUTPUT description, severity

Пример входных данных security_incidents-* с повторяющимися значениями CVE-2023-5678 в первой записи, где affected_system="WebServer", и во второй записи, где affected_system="Database":

_timehostvulnerabilitiesaffected_system
2025-06-05 14:30:00VLG-01CVE-2023-1234
CVE-2023-5678
CVE-2023-5678
WebServer
2025-06-05 14:32:00VLG-02CVE-2023-5678
CVE-2024-9012
CVE-2023-5678
Database

В данном случае в результате запроса будут исключены дубликаты CVE, как в начале примера 2:

hostaffected_systemdescriptionseverity
VLG-01WebServerSQL Injection VulnerabilityHigh
VLG-01WebServerCross-Site Scripting (XSS)Medium
VLG-02DatabaseCross-Site Scripting (XSS)Medium
VLG-02DatabaseRemote Code ExecutionCritical

Пример 3

В третьем примере выполняется сопоставление многозначного поля malware_description из события и многозначного поля description в каждой строке справочника. Команда lookup обогащает события информацией о типе вредоносного ПО malware_type на основе частичного или полного пересечения списков сигнатур.

Пример входных данных security_alerts-*:

_timehostmalware_descriptionfilemalware_type
2025-06-05 14:30:00VLG-01W32.File.Mal
W32.2C2D
W32.Auto.A
mssecsvc.exe
2025-06-05 14:30:00VLG-02W32.ED01
W32.Overdrive
OLD.exeVirus
2025-06-05 14:30:00VLG-03W32.ED01
W32.Generic
Fax.exeWorm

Справочник malware_info:

descriptiontype
W32.File.Mal
W32.2C2D
W32.Auto.A
Ransomware
W32.ED01
W32.44D7
Worm
Использование опции OUTPUT

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

Пример №3 с опцией OUTPUT
source security_alerts-*
| search malware_info="W32*"
| lookup malware_info description AS malware_description OUTPUT type as malware_type

Результатом запроса может быть следующая таблица:

_timehostmalware_descriptionfilemalware_type
2025-06-05 14:30:00VLG-01W32.File.Mal
W32.2C2D
W32.Auto.A
mssecsvc.exeRansomware
2025-06-05 14:30:00VLG-02W32.ED01
W32.Overdrive
OLD.exeWorm
2025-06-05 14:30:00VLG-03W32.ED01
W32.Generic
Fax.exeWorm
Использование опции OUTPUTNEW

OUTPUTNEW добавляет значения type из справочника только для событий, где поле malware_type отсутствует или пустое. Если malware_type уже заполнено, оно сохраняется.

Пример №3 с опцией OUTPUTNEW
source security_alerts-*
| search malware_info="W32*"
| lookup malware_info malware AS malware_description AS malware_description OUTPUTNEW type AS malware_type

Результатом запроса может быть следующая таблица:

_timehostmalware_descriptionfilemalware_type
2025-06-05 14:30:00VLG-01W32.File.Mal
W32.2C2D
W32.Auto.A
mssecsvc.exeRansomware
2025-06-05 14:30:00VLG-02W32.ED01
W32.Overdrive
OLD.exeVirus
2025-06-05 14:30:00VLG-03W32.ED01
W32.Generic
Fax.exeWorm