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

format

Описание

Преобразует результаты предыдущей части поискового запроса в логическое выражение для поиска. Используется внутри подзапроса search [ ... | format ], чтобы динамически сформировать условие фильтрации на основе данных из другого источника.

Обратите внимание!

Избегайте формирования слишком длинных строк поиска после форматирования запроса. Это может привести к превышению лимита maxClauseCount в Smart Monitor Data Storage и вызвать ошибку выполнения запроса.

Синтаксис

| format

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

Пример 1

В данном примере format преобразует список пользователей из индекса zabbix, совпадающих с паттерном Iv*, в логическое выражение. Затем это выражение применяется как условие фильтрации в active_directory - в результате остаются только те события, у которых поле user совпадает с найденными значениями.

Индекс zabbix:

@timestampuser
2026-06-24T10:00:00ZIvanov
2026-06-24T10:01:00ZIvanenko
2026-06-24T10:02:00ZPetrov
2026-06-24T10:03:00ZSidorov

Индекс active_directory:

@timestampuserdepartmenthost
2026-06-24T10:00:00ZIvanovITpc-01
2026-06-24T10:01:00ZIvanenkoHRpc-02
2026-06-24T10:02:00ZPetrovFinancepc-03
2026-06-24T10:03:00ZSidorovITpc-04
source active_directory | search [ source zabbix | search user="Iv*" | fields user | format]

format формирует выражение вида (user="Ivanov" OR user="Ivanenko") из результатов подзапроса. Petrov и Sidorov не попадают в результат, так как не совпадают с паттерном Iv*:

@timestampuserdepartmenthost
2026-06-24T10:00:00ZIvanovITpc-01
2026-06-24T10:01:00ZIvanenkoHRpc-02

Пример 2

В данном примере format формирует условие поиска на основе вычисленного значения. makeresults создает одну строку, eval вычисляет round(pi()) = 3 и записывает результат в поле id. Команда format преобразует это в выражение (id=3), по которому фильтруется индекс users.

Индекс users:

@timestampidnamerole
2026-06-24T10:00:00Z1Aliceviewer
2026-06-24T10:01:00Z2Bobeditor
2026-06-24T10:02:00Z3Charlieadmin
2026-06-24T10:03:00Z4Daveviewer
source users
| search
[ | makeresults
| eval id=round(pi())
| fields id
| format ]

В результате возвращается только запись с id = 3:

@timestampidnamerole
2026-06-24T10:02:00Z3Charlieadmin

Пример 3

В данном примере из индекса ad_computer извлекаются компоненты DC из поля distinguishedname с помощью rex, затем объединяются через точку командой eval. Результирующее значение domainUser формирует через format условие поиска, которое применяется к индексу ad_users - остаются только пользователи из домена vv.local.

Индекс ad_computer:

@timestampdistinguishedname
2026-06-24T10:00:00ZCN=Иванов Иван,OU=Сотрудники, DC=vv,DC=local
2026-06-24T10:01:00ZCN=Петров Петр,OU=Сотрудники, DC=vv,DC=local

Индекс ad_users:

@timestampdomainUserlogindepartment
2026-06-24T10:00:00Zvv.localivanovIT
2026-06-24T10:01:00Zvv.localpetrovFinance
2026-06-24T10:02:00Zother.domainsmithHR
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 в результат не попадает:

@timestampdomainUserlogindepartment
2026-06-24T10:00:00Zvv.localivanovIT
2026-06-24T10:01:00Zvv.localpetrovFinance