Приветствую,
уважаемый читатель!
Сегодня, я
бы хотел поделиться с тобой знаниями об операторе преобразования значений - eval. По
мере усложнения запросов на SPL, потребность в данном операторе сильно
возрастает. Предназначен
он для изменения значения в произвольном поле (field) в соответствии с условиями,
которые мы установим. Описание работы и примеры ниже.
Итак, у нас
есть источник событий, с помощью оператора eval мы может для
каждого события (строки) отформатировать/отредактировать/распарсить значение
любого поля и дать ему новое произвольное имя. Также, мы может просто добавить в
результаты запроса поле с нужными нам значениями.
Оператор
eval умеет выполнять математические, логические операции над значениями полей,
а также подключать различные функции для манипуляций со значениями. Далее проиллюстрирую работу оператора на
примерах Apache access.
Математические
преобразования
sourcetype=Apache_access
| eval kbytes = bytes/1024
| table
_time,clientip,bytes,kbytes
Использование
условного оператора if.
Общий синтаксис - if("условие", "если
TRUE", "если False")
sourcetype=Apache_access
| eval
new_field=if(status="200","OK","NO")
| table
clientip,status,new_field
sourcetype=Apache_access
| eval proto=if(like(_raw,
"%https%"), "https", "not_https")
| table
clientip,_raw,uri,proto
Форматирование регистра текста
sourcetype=Apache_access
| eval min = lower(useragent)
| eval max = upper(useragent)
| table
clientip,useragent,min,max
Регулярные выражения
sourcetype=Apache_access
| eval
is_ip=if(match(clientip, "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"),
"IP", "not_ip")
| table
clientip,is_ip
Считаю
оператор eval одним из самых полезных, и настоятельно рекомендую изучить все
его возможности. Помимо основной сферы применения, т.е. преобразования значений, он активно применяется при корреляции, когда необходимо связать 2 источника событий по одноименному ключевому полю.
Прочитать
поподробнее про данный оператор можно в документации -
Комментариев нет:
Отправить комментарий