Splunk Processing Language: синтаксис и применение¶
Splunk Processing Language (SPL, язык обработки Splunk) — это специализированный язык запросов, используемый в платформе Splunk для поиска, анализа и визуализации данных из машинных журналов (логов) и других источников. SPL сочетает элементы SQL, Unix-конвейеров и функций программирования, позволяя обрабатывать данные в реальном времени и в исторической перспективе. Язык разработан компанией Splunk Inc. и является основным инструментом взаимодействия пользователя с поисковой системой Splunk.
¶Синтаксис
Базовой единицей SPL является поисковый запрос, состоящий из последовательности команд, разделённых вертикальной чертой (|). Данные передаются от одной команды к другой по принципу конвейера, где выход предыдущей команды становится входом для следующей. Первая команда всегда выполняет поиск по индексу, а последующие — фильтрацию, преобразование, агрегацию или визуализацию.
Общий вид запроса:
`` search <условие> | команда1 <аргументы> | команда2 <аргументы> ... ``
Ключевые элементы синтаксиса:
- Команды — операторы, выполняющие действия над событиями. Примеры:
search,stats,table,rename,eval,timechart. - Поля — именованные атрибуты событий. Обращение к полю происходит по имени, например
status,host,source. - Литералы — строки (в двойных кавычках), числа, булевы значения (
true/false). - Функции — встроенные функции для вычислений и преобразований:
count(),sum(),avg(),if(),round(),lower()и другие. - Подстановки — переменные, начинающиеся с
$, например$field$для динамической подстановки значений. - Комментарии — текст после символа `
`(обратный апостроф) или в начале строки послеsearch` игнорируется.
¶Поиск и фильтрация
Команда search является основной для выборки данных. Она может быть опущена, если запрос начинается с условия поиска. Условия включают ключевые слова, значения полей, операторы сравнения (=, !=, >, <, >=, <=) и логические операторы (AND, OR, NOT). Для поиска по подстроке используется символ *.
Пример:
`` source="/var/log/auth.log" AND user!="root" | table time, user, host ``
¶Преобразование данных
Команда eval создаёт новые поля или изменяет существующие, используя выражения и функции. Команда rename переименовывает поля. Команда fields ограничивает набор полей в выводе.
Пример:
`` ... | eval bytes_mb = round(bytes/1048576, 2) | rename bytes_mb AS "Размер, МБ" ``
¶Агрегация и статистика
Команда stats выполняет группировку и вычисление статистических показателей. Группировка задаётся оператором BY. Команда timechart агрегирует данные по временным интервалам для построения временных рядов.
Пример:
`` ... | stats count, avg(response_time) BY status | sort - count ``
¶Основные команды
| Команда | Назначение |
|---|---|
search | Поиск событий по условиям |
eval | Вычисление выражений и создание полей |
stats | Статистическая агрегация с группировкой |
timechart | Агрегация по времени для графиков |
table | Вывод данных в табличном виде |
sort | Сортировка по указанным полям |
top | Вывод наиболее частых значений |
rex | Извлечение полей с помощью регулярных выражений |
lookup | Обогащение данных из внешних таблиц |
join | Объединение результатов двух поисков |
where | Фильтрация по условиям (аналог eval + search) |
dedup | Удаление дубликатов событий |
¶Применение
SPL используется в задачах:
- Мониторинг ИТ-инфраструктуры — анализ логов серверов, сетевых устройств, приложений для выявления сбоев и аномалий.
- Информационная безопасность (SIEM) — корреляция событий безопасности, обнаружение вторжений, расследование инцидентов.
- Бизнес-аналитика — анализ операционных данных, поведения пользователей, финансовых транзакций.
- DevOps и SRE — наблюдение за производительностью приложений, трассировка запросов, анализ ошибок.
Язык позволяет строить сложные аналитические пайплайны без написания кода на традиционных языках программирования, что ускоряет работу аналитиков и инженеров. SPL также поддерживает создание макросов и сохранённых поисков для повторного использования.
¶Ограничения и особенности
SPL не является языком общего назначения: он ориентирован на работу с временными рядами и событиями. Глубокие рекурсивные вычисления и сложные алгоритмы вне области поиска данных в SPL не реализуются — для этого используются внешние скрипты (Python, JavaScript) через команды script или python. Производительность запросов зависит от объёма индексированных данных и эффективности использования команд ранней фильтрации.
¶Сравнение с SQL
В отличие от SQL, где данные структурированы в таблицы, SPL работает с неструктурированными событиями и полями, извлекаемыми на лету. Конвейерная модель SPL ближе к Unix-утилитам, чем к реляционной алгебре. При этом SPL поддерживает операции, аналогичные GROUP BY, JOIN и подзапросам, но синтаксис и порядок выполнения отличаются.
¶Источники
- Официальная документация Splunk: «Search Reference» и «Search Manual».
- Splunk Education: курс «Searching and Reporting with Splunk».
- Книга: Leddy, J. «Splunk Essentials» (2015).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


