Фильтры
Фильтр можно описать в секции routes
внутри элемента channel
:pipe
:filter
. Либо в секции именованных цепочек преобразований pipes
.
Общий формат описания фильтра:
- filter:
plugin: ... # имя плагина
id: ... # (рекомендуемый) идентификатор фильтра, используется в метриках и логах
config: # конфигурация фильтра
...
Фильтр assign
Фильтр для присвоения метаданных сессии или сообщениям.
Значение метаданных формируется при помощи шаблона. Синтаксис шаблона: {key:format|default}
. Экранирование фигурных скобок осуществляется при помощи \
: "\{\}"
.
Значение key
:
_timestamp
— временная метка сообщения;_payload
— тело сообщения;key
— метаданные с ключом key.
Если ключ метаданных не найден на уровне сообщения (в разделе message
), будет выполнен поиск ключа в метаданных сессии. Если ключ не найден на уровне сессии, будет использовано значение по умолчанию ({_host|default_host})
или пустая строка, если значение по умолчанию не указано.
Также в качестве значения key
можно указывать макросы:
$host_name
— локальное имя машины;$short_host_name
— краткое локальное имя машины (до первой точки);$env('name')
— переменная окружения с именемname
;$file('name')
— содержимое файла с именемname
.
Поддерживается подстановка аргумента макроса из метаданных.
Например, в случае $file(name)
имя файла будет взято из метаданных с ключом name
.
Значение format
— строка форматирования в формате strftime_timestamp
.
Значение default
:
- Определяет значение по умолчанию, если нет метаданных с таким ключом или пустой
_payload
. - Не может быть указан для
_timestamp
, так как_timestamp
есть всегда. - Поддерживается для макросов
$env
и$file
. Применяется, если указанный файл не найден или значение переменной окружения — пустая строка. - По умолчанию используется пустая строка.
Описание параметров:
- filter:
plugin: assign
config:
# Должен быть указан хотя бы один из разделов message или session.
# Значения, которые нужно записать в метаданные сообщения.
# Внутри message должен быть список одноэлементных функций map, у которых ключ — имя метаданных, значение — шаблон форматирования.
# Макросы в фигурных скобках в шаблоне могут содержать ключи метаданных ({_host}) и встроенные функции ({$file('test-file')}).
# Если ключ метаданных не найден на уровне сообщения (в разделе `message`), будет выполнен поиск ключа в метаданных сессии.
# Если ключ не найден на уровне сессии, будет использовано значение по умолчанию `({_host|default_host})` или пустая строка, если значение по умолчанию не указано.
# Ниже приведено несколько примеров таких шаблонов.
message: # необязательный, по умолчанию не задан
# Пример результата: 'Nov 27 21:03:24 test-host test-app:test_payload'.
# Метка времени форматируется в соответствии с форматом strftime (http://man7.org/linux/man-pages/man3/strftime.3.html).
# В этом примере значение _app 'test-app:', с двоеточием на конце — типичный результат разбора syslog-сообщения.
- _payload: "{_timestamp:%b %d %H:%M:%S} {_host} {_app}{_payload}"
# Подставить вместо $file значение из файла 'test-file'.
# Если содержимое файла test-file равно test-content, то на выходе получится 'prefix_test-content_suffix'.
- m1: "prefix_{$file('test-file')}_suffix"
# Подставить значение из файла, имя которого можно взять из метаданных с ключом test-file-name.
- m2: "prefix_{$file(test-file-name)}_suffix"
# Подставить значение из переменной окружения 'test-env'.
- m3: "prefix_{$env('test-env')}_suffix"
# Подставить значение из переменной окружения, имя которой взять из метаданных с ключом test-env-name.
- m4: "prefix_{$env(test-env-name)}_suffix"
# Подставить имя хоста, на котором запущен агент.
- m5: "$host_name"
# Аналогично $host_name, только без домена — префикс до первой точки.
# Например, если $host_name равен 'lbk-dev-02.search.yandex.net', то в $short_host_name будет значение 'lbk-dev-02'.
- m6: "$short_host_name"
# Значения, которые нужно присвоить в метаданные сессии.
session: # необязательный, по умолчанию не задан
# Аналогично message.
- m1: v1
- m2: v2
Фильтр convert_metrics
Фильтр для преобразования метрик между разными форматами. Формат сообщений на входе берется из метаданных сессии с ключом _metrics_format
(если он существует), либо из метаданных сообщения с тем же ключом (если он существует).
Если формат входящего сообщения определить не удалось (_metrics_format
не указан ни на уровне сессии, ни на уровне сообщения), то входящее сообщение отбрасывается и счетчик RejectedMessages
этого плагина увеличивается на один.
Описание параметров:
- filter:
plugin: convert_metrics
config:
# Выходной формат, в который нужно преобразовать входящий набор метрик.
# Должен быть указан ровно один из вложенных элементов.
format: # обязательный
# Преобразовать в JSON-формат Yandex Monitoring (../../../api-ref/MetricsData/write.md)
json:
# Нужно ли склеивать метрики с одним и тем же набором меток.
# Возможные значения: default (не склеивать), merge_metrics (склеивать).
merging_mode: default # необязательный, значение по умолчанию default (не склеивать)
# Нужно ли форматировать JSON в человекочитаемый формат (с переносами строк и отступами).
# Задает размер отступов, если 0 — форматировать не нужно.
indentation: 0 # необязательный, по умолчанию форматирование выключено
# Набор меток, которые дополнительно нужно добавить к выходному набору метрик.
labels: # необязательный, по умолчанию не указан
l1: v1
l2: v2
# Значение времени по умолчанию, которое нужно добавить к выходному набору метрик.
# Поддерживаются два варианта синтаксиса значений этих параметров — абсолютный и относительный.
# В абсолютном формате ожидается значение времени в формате ISO 8601.
# Примеры: 2014-03-25 03:59:56.654563, 2012-11-23 11:12:13, 2012-11-23, 1990-03-15T15:10:12.
# В относительном формате требуется указать смещение от одного из предопределенных значений:
# * now — текущее время;
# * today — начало текущих суток;
# * yesterday — начало предыдущих суток;
# * tomorrow — начало следующих суток.
# Смещение состоит из произвольного числа временных дельт, разделенных операторами + или -.
# Возможные значения для дельты:
# * m — минута;
# * h — час;
# * d – сутки;
# * w – неделя;
# Например, --since yesterday оставит сообщения за вчера и сегодня, а --since now-5m --until now-5m+10s — за интервал в 10 секунд, который начался пять минут назад.
# По умолчанию дельты отсчитываются от now, то есть вместо now-2m можно указать -2m.
common_time: null # необязательный, по умолчанию не задан
Фильтр filter_metrics
Фильтр позволяет сократить набор передаваемых метрик на основе значений меток.
- filter:
plugin: filter_metrics
config:
# Условие на метрики, которые нужно оставить. Все остальные будут отфильтрованы.
match: "{name=gauge-*}" # обязательный
См. также описание синтаксиса запросов.
Фильтр match
Фильтрация сообщений по метаданным — фильтр пропускает только те сообщения, которые содержат все перечисленные метаданные.
Описание параметров:
- filter:
plugin: match
config:
# Метаданные сессии в формате `ключ:значение`.
session: # необязательный
a: b
# Метаданные сообщения в формате `ключ:значение`.
message: # необязательный
c: d
e: f
# В приведенной выше конфигурации фильтр будет пропускать только те сообщения, у которых:
# * метаданные сессии содержат ключ "a" со значением "b";
# * метаданные сообщения содержат ключ "c" со значением "d" и ключ "e" со значением "f" (обязательно оба).
# При этом метаданные могут дополнительно содержать любые другие ключи.
Фильтр transform_metric_label
Фильтр позволяет переименовать или добавить префикс к метке для метрики.
Описание параметров:
- filter:
plugin: transform_metric_label
config:
# Имя метки, которую нужно преобразовать.
label: name # обязательный
# Добавить префикс к значению метки.
add_value_prefix: ua # необязательный
# Переименовать метку.
rename_to: second_name # необязательный
# Разделитель, который нужно использовать между добавляемым префиксом и текущим значением метки.
delimiter: . # необязательный, по умолчанию '.'
Фильтр transform_metric_labels
Фильтр позволяет добавлять к метрикам новые метки, удалять и заменять существующие. В качестве значения метки можно указать фиксированную строку или текстовое выражение с использованием других меток. С помощью выражения match
можно ограничить набор метрик, к которым применяется преобразование.
Описание параметров:
- filter:
plugin: transform_metric_labels
config:
# Ограничить применение фильтра только теми метриками, которые удовлетворяют данному условию.
match: "{name=gauge-*}" # необязательный параметр, по умолчанию не задан, фильтр применяется ко всем метрикам
# Описание преобразований меток в формате "имя метки: выражение".
# Имя метки — метка, которой присваивается новое значение.
# Выражение — текстовая строка с описанием нового значения.
# В этой строке с помощью синтаксиса "{my_label}" можно ссылаться на текущие значения меток,
# включая ту метку, которая изменяется в данный момент. В таком случае будет использовано ее предыдущее значение.
# Преобразования выполняются в заданном порядке, в последующих выражениях
# можно ссылаться на результаты предыдущих.
# Синтаксис выражений аналогичен тому, который используется в фильтре assign.
# С помощью {my_label|default_value} можно указать значение по умолчанию, если метка my_label не найдена.
# Чтобы удалить метку, используйте синтаксис my_label: "-".
labels:
- l2: "prefix_{l1}_suffix" # обязательный
- l3: "prefix2_{l2}_s_{l1|default_value}" # обязательный
- l4: "-" # обязательный
См. также описание синтаксиса запросов.