Открыть сервис

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 →