format
Описание
Преобразует результаты предыдущей части поискового запроса в логическое выражение для поиска. Используется внутри подзапроса search [ ... | format ], чтобы динамически сформировать условие фильтрации на основе данных из другого источника.
Избегайте формирования слишком длинных строк поиска после форматирования запроса. Это может привести к превышению лимита maxClauseCount в Smart Monitor Data Storage и вызвать ошибку выполнения запроса.
Синтаксис
| format
Примеры запросов
Пример 1
В данном примере format преобразует список пользователей из индекса zabbix, совпадающих с паттерном Iv*, в логическое выражение. Затем это выражение применяется как условие фильтрации в active_directory - в результате остаются только те события, у которых поле user совпадает с найденными значениями.
Индекс zabbix:
| @timestamp | user |
|---|---|
| 2026-06-24T10:00:00Z | Ivanov |
| 2026-06-24T10:01:00Z | Ivanenko |
| 2026-06-24T10:02:00Z | Petrov |
| 2026-06-24T10:03:00Z | Sidorov |
Индекс active_directory:
| @timestamp | user | department | host |
|---|---|---|---|
| 2026-06-24T10:00:00Z | Ivanov | IT | pc-01 |
| 2026-06-24T10:01:00Z | Ivanenko | HR | pc-02 |
| 2026-06-24T10:02:00Z | Petrov | Finance | pc-03 |
| 2026-06-24T10:03:00Z | Sidorov | IT | pc-04 |
source active_directory | search [ source zabbix | search user="Iv*" | fields user | format]
format формирует выражение вида (user="Ivanov" OR user="Ivanenko") из результатов подзапроса. Petrov и Sidorov не попадают в результат, так как не совпадают с паттерном Iv*:
| @timestamp | user | department | host |
|---|---|---|---|
| 2026-06-24T10:00:00Z | Ivanov | IT | pc-01 |
| 2026-06-24T10:01:00Z | Ivanenko | HR | pc-02 |
Пример 2
В данном примере format формирует условие поиска на основе вычисленного значения. makeresults создает одну строку, eval вычисляет round(pi()) = 3 и записывает результат в поле id. Команда format преобразует это в выражение (id=3), по которому фильтруется индекс users.
Индекс users:
| @timestamp | id | name | role |
|---|---|---|---|
| 2026-06-24T10:00:00Z | 1 | Alice | viewer |
| 2026-06-24T10:01:00Z | 2 | Bob | editor |
| 2026-06-24T10:02:00Z | 3 | Charlie | admin |
| 2026-06-24T10:03:00Z | 4 | Dave | viewer |
source users
| search
[ | makeresults
| eval id=round(pi())
| fields id
| format ]
В результате возвращается только запись с id = 3:
| @timestamp | id | name | role |
|---|---|---|---|
| 2026-06-24T10:02:00Z | 3 | Charlie | admin |
Пример 3
В данном примере из индекса ad_computer извлекаются компоненты DC из поля distinguishedname с помощью rex, затем объединяются через точку командой eval. Результирующее значение domainUser формирует через format условие поиска, которое применяется к индексу ad_users - остаются только пользователи из домена vv.local.
Индекс ad_computer:
| @timestamp | distinguishedname |
|---|---|
| 2026-06-24T10:00:00Z | CN=Иванов Иван,OU=Сотрудники, DC=vv,DC=local |
| 2026-06-24T10:01:00Z | CN=Петров Петр,OU=Сотрудники, DC=vv,DC=local |
Индекс ad_users:
| @timestamp | domainUser | login | department |
|---|---|---|---|
| 2026-06-24T10:00:00Z | vv.local | ivanov | IT |
| 2026-06-24T10:01:00Z | vv.local | petrov | Finance |
| 2026-06-24T10:02:00Z | other.domain | smith | HR |
source ad_users
| search
[ source ad_computer
| rex field=distinguishedname "DC=(?<DC>[a-z]*)" max_match=0
| eval domainUser=mvjoin(DC, ".")
| stats count by domainUser
| fields domainUser
| format ]
rex извлекает компоненты DC (vv и local), mvjoin собирает их в строку vv.local, format формирует выражение (domainUser="vv.local"). Пользователь smith из домена other.domain в результат не попадает:
| @timestamp | domainUser | login | department |
|---|---|---|---|
| 2026-06-24T10:00:00Z | vv.local | ivanov | IT |
| 2026-06-24T10:01:00Z | vv.local | petrov | Finance |