Шаги препроцессинга
Перенаправление
Аггрегация
preprocessing: Items dispatching
Items dispatching allows to "redirect" item to another host and item.
This is typically required for data coming from Server workers: Server workers.
Items dispatching takes two params: field name for host value and metric name:
-
First param is used to find a host name in incoming JSON data. Value might be in several formats:
Plain text:
JSON path identification:proc_id
$.proc_id
Also field supports prefixed/suffixed notation, then field name should be enclosed in brackets {}:
metric.{proc_id}.name.test.com
Incoming JSON will be search for the field with name 'proc_id' and it's value will be used to do a host lookup. Host name is searched by 'Host' value, not 'Name'. Also search is case-sensitive.
If incoming data has host information in first level fields, use plain text, if the information is inside other objects or array, utilize the power of JSON path syntax:
Example:
{
...
"host":nil,
"sd": {
"hostinfo":"my-server-host",
"user":"#234524352",
....
}
....
}
$.sd.hostinfo
If there is a need to postfix the server name, for example, add domain, use something like:
{$.sd.hostinfo}.user-server.test.loc
my-server-host.user-server.test.loc
- The second param has a static text value - item name. From the previous example the result of the rule will be search of host 'my-server-host.user-server.test.loc', then metric with name 'log' is searched, if found, then item is send to preprocessing again for the new item.
Further rule processing
Rule has inverse fail logic - if a metric has been redirected, it returns FAIL to stop firther processing.
If a host:metric hasn't been found or other errors had happen, rule successes and processing continues, allowing to try another redirects or other kind of processing for non-redirected metrics:
For example you might want to setup an Aggregation count rule to count for non redirected metrics and setup a trigger to signal that there are a lot of data coming for unknown hosts.
Локальное перенаправление метрик
Задача, мотивация
Существуют ситуации, когда значение метрики нужно поместить (перенаправить) в одну из большого количества метрик. Если метрик для перенаправления небольшое количество, то можно воспользоваться зависимыми метриками, однако если их существенное количество, то требуется большое количество операций: в каждой зависимой метрике будет произведена операция сравнения и фильтрации, что неэффективно, пример: требуется посчитать байты по диапазонам ip адресов.
Логика работы
Пример входных данных
{ "ip_net":"10.0.2.0/24" , ... , "bytes":"243525" }
Для каждой сети существует метрика - счетчик байт: in_bytes[10.0.2.0/24]
, очевидно, что таких метрик будут тысячи и реализация через зависимые метрики будет слишком затратной.
В таком случае можно использовать локальное перенаправление: в качестве параметра перенаправления указать строковую конструкцию, которая покажет, каким образом сформировать имя метрики для поиска для поиска имена метрики:
local_dispatch: in_bytes[{$.ip_net}]
(поддерживаются Json path операции) или in_bytes[{ip_net}]
(указано имя объекта, должен быть объектом первого уровня)
В таком случае из примера выше будет получено значение поля с ключом ip_net
, а значение поля будет подставлено в шаблон имени метрики и данные будут отправлены в полученную метрику и обработка шагов препроцессинга прекратится. Если такой метрики не существуют, то продолжится обработка шагов препроцессинга дальне.
Фильтрация json
Позволяет отфильтровать и оставить в json только указанные объекты
Пример
Входящий json:
{"param_a":"123", "param_b":"245", "param_c":"897", "param_d":"1020"}
параметры фильтрации:
param_a,param_d,param_z
Результат (в запросе оставлены только присутствующие param_a
и param_d
, param_z
во входящем json отсутствует)
{"param_a":"123", "param_d":"1020"}
Аггрегация JSON данных для обнаружения
Задача, мотивация
Для ситуаций, когда требуется автоматическое обнаружение и создание новых метрик на основе входящего потока данных. Текущая реализация системы LLD не позволяет подавать на ее вход поток существенных данных.
Логика работы
Шаг препроцессинга принимает и аккумулирует уникальные данные. Новые уникальные данные проходят шаг с минимальной задержкой, но при повторном приходе данных они задерживаются на указанный в параметрах шага промежуток времени. И через указанный промежуток посылается одна копия каждого уникального экземпляра данных, независимо от того, сколько одинаковых данных пришло.
Такая логика позволяет быстро создавать метрики, когда система видит их первый раз, и в то-же время при повторном появлении данных - не нагружать ими LLD систему.
Примечание
Время фильтрации и задержки должно быть меньше, чем время удаления данных в настройках Discovery данных.