transaction
Описание
Команда transaction объединяет последовательные события в одну транзакцию, если значения указанных полей для сравнения полностью совпадают. Условия начала и конца транзакции определяются в опциональных аргументах.
Синтаксис
transaction <field-list> [timefield=<timefield>] [maxspan=<span>] [maxpause=<span>] [maxevents=<int>] [startswith=<search-expression>] [endwith=<search-expression>] [<rawfield>=<field>] [keepevicted=<boolean>]
Обязательные аргументы
| Параметр | Синтаксис | Описание |
|---|---|---|
<field-list> | <field> [, <field>] | Список полей для сравнения. |
Опциональные аргументы
| Параметр | Синтаксис | По умолчанию | Описание |
|---|---|---|---|
timefield | timefield=<field> | @timestamp | Имя поля в котором хранится временная метка. |
rawevent | rawevent=<field> | Указывает имя поля, значения которого будут объединены в одну строку в том порядке, в котором события вошли в транзакцию. Полученная строка перезаписывает указанное поле. | |
maxspan | maxspan=<span> | без ограничений | Ограничивает максимальную длительность транзакции. Если разница между временем первого и последнего события превышает указанное значение, начинается новая транзакция. |
maxpause | maxpause=<span> | без ограничений | Ограничивает максимальный разрыв между соседними событиями внутри транзакции. Если пауза между событиями превышает порог, новое событие начинает новую транзакцию. |
maxevents | maxevents=<int> | без ограничений | Максимальное количество событий в транзакции. |
startswith | startswith=<search-expression> | отсутствует | Определяет условие, которому должно соответствовать событие, чтобы оно считалось началом транзакции. Транзакция создается только после появления подходящего события. Каждое такое событие начинает новую транзакцию. |
endswith | endwith=<search-expression> | отсутствует | Определяет условие, которому должно соответствовать событие, чтобы оно считалось завершением транзакции. После добавления такого события транзакция закрывается. |
keepevicted | keepevicted=<boolean> | false | Определяет, нужно ли выводить отброшенные транзакции. Таковыми считаются транзакции, которые были начаты по условию startswith, но не завершены по условию endswith. |
Допустим следующий формат временных параметров: (+|-)<int>(s|m|h|d|w|month):
- s/sec/secs/second/seconds - секунды
- m/min/mins/minute/minutes - минуты
- h/hr/hrs/hour/hours - часы
- d/day/days - дни
- w/week/weeks - недели
- mon/month/months - месяцы
Если в исходных событиях присутствуют поля duration, eventcount, closed_txn, они будут перезаписаны статистическими результатами transaction. Если в исходных событиях присутствуют поле rawevent и в команде указана опция rawevent, в результатах поле будет перезаписано.
Примеры запросов
Пример 1
Поиск медленных задач.
... | transaction job_id
| where duration > 120
В транзакцию объединяются события с одинаковыми job_id. Далее проводится фильтрация по долго выполняющимся задачам.
Пример 2
Трекинг пользовательской сессии с ограничениями по времени.
... | transaction session_id maxspan=10m maxpause=30s
В транзакцию объединяются события с одинаковым session_id. Транзакция заканчивается если последовательность событий занимает больше 10 минут или интервал между событиями составляет больше 30 секунд.
Пример 3
Успешная покупка в интернет магазине.
... | transaction JSESSIONID, clientip startswith=(action="view") endswith="purchase" rawevent=action
В транзакцию объединяются события с одинаковыми JSESSIONID и clientip. Транзакция должна начинаться с события, у которого поле action равно view, а заканчиваться событием, у которого любое поле равно purchase. Если транзакция началась, но дальше встретилось новое событие со значением view, транзакция завершится со статусом evicted и начнется новая транзакция. В результате вернутся только успешные транзакции. Все действия пользователя в успешных транзакциях объединятся в строку и запишутся в поле action.
Пример 4
Все действия в интернет магазине.
... | transaction JSESSIONID, clientip startswith=(action="view") endswith="purchase" maxspan=5m keepevicted=true
В этом запросе, помимо условий startswith и endswith, определены максимальное время транзакции и параметр keepevicted. Как и в предыдущем примере, в успешную транзакцию объединяются только цепочки событий, которые начинаются с view и заканчиваются purchase. Дополнительно проверяется, что длительность транзакции должна быть не более 5 минут. Транзакции, которые начались, но прервались из-за ограничения по времени или нового события view, считаются отброшенными. Они попадут в результат запроса, так как параметр keepevicted равен true.