Компоненты#
Компоненты представляют собой функциональные элементы процесса сбора метрик и входят в состав коллектора метрик.
При необходимости можно расширять существующую функциональность Коллектора путем разработки новых программных компонентов соответствующего типа. Все примеры конфигураций ниже описаны в формате HOCON.
Типы компонентов
Все компоненты делятся на следующие укрупненные типы:
входные
input— задают источник для метрик;выходные
output— определяют приемник метрик (хранилище);обработчики
processor— производят обработку транзитных метрик;агрегаторы
aggregator— реализуют агрегацию потока метрик на основе окна обработки.
Каждый компонент можно настроить путем передачи ему конфигурационных параметров.
Общими являются следующие параметры:
name— имя экземпляра компонента (строка);description— описание экземпляра компонента (строка);type— тип компонента (строка, возможные варианты:input,output,processor,aggregator);class— имя класса программной реализации компонента.
Input компоненты#
JmxInput— подключается к JMX-источнику и возвращает в виде метрик значения атрибутов заданного MBean-а;KafkaAdminClientInput— подключается через AdminClient API к Kafka-кластеру и возвращает в виде метрик ряд параметров кластера;HttpInput— подключается к серверу и возвращает в виде метрик ответы сервера;InfluxDbV1Input— подключается к InfluxDb и возвращает в виде метрик результаты ответа на запрос к БД;ConfigInput— генератор метрик на основе конфигурационного файла;ListInput— «заглушка» источника.
JmxInput#
Компонент JmxInput — компонент-источник (input), подключается к JMX-источнику и возвращает в полях метрики значения атрибутов указанного Java Management Bean.
Пример конфигурации:
{
name: SomeJmxInputComponent
description: "SomeJmxInputComponent description"
type: input
class: JmxInput
metricName: SomeMetricName
emitRateMs: 30000
host: IP_ADDRESS
port: 7010
user: <user>
password: <password>
objName: "kafka.log:type=Log,name=LogEndOffset,topic=*,partition=*"
attrNames: [Value]
}
Требуемые значения общих параметров конфигурации:
type: input
class: JmxInput
Обязательные параметры:
metricName— имя генерируемой метрики (строка);emitRateMs— период опроса JMX-сервера (длинное целое);host— адрес JMX-сервера (строка);port— порт JMX-сервера (целое);objName— значениеMBean.ObjectName(строка);attrNames— перечень имен запрашиваемых атрибутов (список строк).
Необязательные параметры:
user— имя пользователя для аутентификации на JMX-сервере, значение по умолчанию — user (строка);password— пароль пользователя для аутентификации на JMX-сервере, значение по умолчанию — password (строка).
Особенности использования:
Строковое значение параметра конфигурации objName может содержать символ подстановки *, маскирующий конкретные значения JMX-свойств из строки MBean.ObjectName.
В этом случае компонент будет возвращать набор метрик для всех возможных значений маскируемого JMX-свойства.
Компонент добавляет в словарь тегов выходной Метрики следующие пары (ключ, значение):
Ключ |
Значение |
|---|---|
|
строка |
<имя_свойства_1> |
значение JMX-свойства 1 |
… |
… |
<имя_свойства_N> |
значение JMX-свойства N |
<имя_конфиг_парам_1> |
значение параметра конфигурации 1 |
… |
… |
<имя_конфиг_парам_M> |
значение параметра конфигурации M |
KafkaAdminClientInput#
Компонент KafkaAdminClientInput — компонент-источник (input), подключается к Kafka-кластеру через AdminClient API и формирует следующий набор метрик Kafka-кластера:
Список брокеров кластера
*.BrokersListКоличество брокеров кластера
*.BrokersCountЗагрузка DRIVE
*.Broker(HOST).HddUsageВспомогательные метрики для расчета задержки консьюмер-групп:
*.Broker.Topic(TOPIC).Partition(PARTITION).ConsumerGroup(GROUP).CurrentOffset
Пример конфигурации:
{
name: SomeKafkaAdminClientInputComponent
description: "SomeKafkaAdminClientComponent description"
type: input
class: KafkaAdminClientInput
metricName: SomeMetricName
metricSet: [
{type: BrokersList, description: "Список брокеров кластера"}
{type: BrokersCount, description: "Количество брокеров кластера"}
{type: HddUsage, description: "Загрузка DRIVE"}
{type: CurrentOffset, description: "Текущий offset (для рассчета лага)"}
]
emitRateMs: 30000
timeoutMs: 10000
bootstrapServers: "IP_ADDRESS:9092,IP_ADDRESS:9092"
securityProtocol: SSL
sslKeyPassword: SomeKeyPassword
sslKeystoreLocation: /path/to/file.jks
sslKeystorePassword: SomeKeyStorePassword
sslTruststoreLocation: /path/to/file.jks
sslTruststorePassword: SomeTrustStorePassword
sslEndpointIdentificationAlgorithm: SomeAlgorithm
}
Требуемые значения общих параметров конфигурации:
type: input
class: KafkaAdminClientInput
Обязательные параметры:
metricName— наименование поляnameгенерируемой компонентом метрики (строка);metricSet— множество типов генерируемых метрик с их текстовым описанием:type— имя типа (строка- одно из:BrokersList,BrokersCount,HddUsage,CurrentOffset),description— текст описания данного типа метрик (строка);
timeoutMs— тайм-аут ответов Kafka-кластера в миллисекундах (длинное целое);bootstrapServers— список серверов Kafka-кластера (строка);securityProtocol— протокол безопасности (строка);sslKeyPassword— пароль Key (строка);sslKeystoreLocation— путь к Keystore (строка);sslKeystorePassword— пароль KeyStore (строка);sslTruststoreLocation— путь к Truststore (строка);sslTruststorePassword— пароль TrustStore (строка);sslEndpointIdentificationAlgorithm— алгоритм аутентификации (строка).
Особенности использования:
Компонент добавляет в словарь тегов выходной Метрики следующие пары (ключ, значение):
Ключ |
Значение |
|---|---|
|
«KafkaAdminClient» |
|
заголовок метрики |
|
значение Kafka Cluster ID |
|
имя topic (для метрики CurrentOffset) |
|
номер партиции (для метрики CurrentOffset) |
|
имя консьюмер-группы (для метрики CurrentOffset) |
HttpInput#
Компонент HttpInput — компонент-источник (input), подключается к HTTP-сервису и возвращает в полях метрики результаты ответа.
Пример конфигурации:
{
name: SomeHttpInputComponent
description: "HttpInputComponent's description"
type: input
class: HttpInput
emitRateMs: 1000
address: {
host: IP_ADDRESS
port: 8081
}
url: "/taskmanagers/metrics"
tags: ["id", "uuid"]
fields: [
{
fieldName: "min"
fieldType: "double"
},
{
fieldName: "max"
fieldType: "int"
}
]
}
Требуемые значения общих параметров конфигурации:
type: input
class: HttpInput
Обязательные параметры:
emitRateMs— период опроса HTTP-сервиса (длинное целое);address— адрес HTTP-сервиса:host— адрес сервера (строка);port— порт сервера (целое);
url— URL HTTP-ресурса (строка);tags— перечень ключей тегов (список строк);fields— перечень полей с их типами (список структур):fieldName— имя поля (строка);fieldType— тип поля (строка).
InfluxDbV1Input#
Компонент InfluxDbV1Input — компонент-источник (input), подключается к БД InfluxDb (v.1) и возвращает в полях метрики результаты запроса к БД.
Пример конфигурации:
{
name: SomeInfluxDbV1InputComponent
description: "SomeInfluxDbV1InputComponent description"
type: input
class: InfluxDbV1Input
emitRateMs: 30000
url: "https://IP_ADDRESS:8086"
sslKeystoreLocation: /path/to/file.jks
sslKeystorePassword: SomeKeyStorePassword
sslTruststoreLocation: /path/to/file.jks
sslTruststorePassword: SomeTrustStorePassword
username: <User>
password: <password>
query: "SELECT \"Value\" FROM "SomeDatabaseName.SomeRetention."/Federation.Domain.Kafka.Cluster.*/ WHERE time > now() - 10m"
}
Требуемые значения общих параметров конфигурации:
type: input
class: InfluxDbV1Input
Обязательные параметры:
emitRateMs— период опроса InfluxDb-сервера (длинное целое);url— адрес InfluxDb-сервера (строка);sslKeystoreLocation— путь к Keystore (строка);sslKeystorePassword— пароль KeyStore (строка);sslTruststoreLocation— путь к Truststore (строка);sslTruststorePassword— пароль TrustStore (строка);username— имя пользователя для аутентификации на InfluxDb-сервере (строка);password— пароль пользователя для аутентификации на InfluxDb-сервере (строка).
Особенности использования:
Запрос может содержать символ подстановки *, маскирующий суффикс имени Метрики (Measurement) в БД Influx.
На основе каждой серии данных из ответа сервера формируется отдельная выходная Метрика.
При этом именами полей новой Метрики будут имена столбцов ответа, а их значениями — соответствующие этим столбцам данные серии.
Компонент добавляет в словарь тегов выходной Метрики все теги из ответа.
Output компоненты#
В состав Коллектора входят реализации следующих output компонентов:
InfluxDbOutput— подключается к InfluxDb (v.2) и отправляет в БД входной список метрик на хранение;InfluxDbV1Output— подключается к InfluxDb (v.1) и отправляет в БД входной список метрик на хранение;JmxOutput— JMX-приемник;EventDiscoveryOutput— EventDiscovery-приемник;PrintOutput— «заглушка» приемника;KafkaOutput— подключается к Kafka topic и отправляет в него метрики;ElasticsearchOutput— подключается к Elasticsearch и отправляет туда метрики.
InfluxDbOutput#
Компонент InfluxDbOutput — компонент-приемник (output), подключается к БД InfluxDb (v.2) и сохраняет набор полученных из потока Метрик.
Пример конфигурации:
{
name: SomeInfluxDbOutputComponent
description: "SomeInfluxDbOutputComponent description"
type: output
class: InfluxDbOutput
detailedLoggingRateMs: 600000
url: "http://IP_ADDRESS:8086"
token = SomeToken
org = SomeOrganization
bucket = SomeBucket
}
Требуемые значения общих параметров конфигурации:
type: output
class: InfluxDbOutput
Обязательные параметры:
url— адрес InfluxDb-сервера (строка);token— токен для аутентификации на InfluxDb-сервере (строка);org— название организации для аутентификации на InfluxDb-сервере (строка);bucket— имя сегмента InfluxDb (строка).
Необязательные параметры:
detailedLoggingRateMs— период формирования детальных логов по выходным метрикам в мс (длинное целое).
Особенности использования:
Компонент выполняет подключение к БД Influx, используя аутентификацию на основе токенов. В качестве имени сегмента БД будет использовано значение параметра bucket.
Из каждой Метрики входного набора, компонент сделает одну точку (Point) InfluxDb таким образом, что:
measurement = имя Метрики;
tag = теги Метрики;
fields = поля Метрики;
time = метка времени Метрики.
InfluxDbV1Output#
Компонент InfluxDbV1Output — компонент-приемник (output), подключается к БД InfluxDb (v.1) и сохраняет набор полученных из потока Метрик.
Пример конфигурации:
{
name: SomeInfluxDbV1OutputComponent
description: "SomeInfluxDbV1OutputComponent description"
type: output
class: InfluxDbV1Output
detailedLoggingRateMs: 600000
url: "https://IP_ADDRESS:8086"
sslKeystoreLocation: /path/to/file.jks
sslKeystorePassword: SomeKeyStorePassword
sslTruststoreLocation: /path/to/file.jks
sslTruststorePassword: SomeTrustStorePassword
username: <User>
password: <password>
database: SomeDatabaseName
retention: SomeRetention
}
Требуемые значения общих параметров конфигурации:
type: output
class: InfluxDbV1Output
Обязательные параметры:
url— адрес InfluxDb-сервера (строка);sslKeystoreLocation— путь к Keystore (строка);sslKeystorePassword— пароль KeyStore (строка);sslTruststoreLocation— путь к Truststore (строка);sslTruststorePassword— пароль TrustStore (строка);username— имя пользователя для аутентификации на InfluxDb-сервере (строка);password— пароль пользователя для аутентификации на InfluxDb-сервере (строка);database— имя БД InfluxDb (строка).
Необязательные параметры:
detailedLoggingRateMs— период формирования детальных логов по выходным метрикам в мс (длинное целое);retention— имяretention policy(строка).
Особенности использования:
Компонент выполняет подключение к БД Influx, используя SSL-подключение и авторизацию по имени и паролю.
В качестве имени БД используется значение параметра
database.В качестве
retention policy— значение параметраretention. Если параметрretentionопущен, InfluxDb будет использовать текущее значение по умолчанию.
Из каждой Метрики входного набора компонент сделает одну точку (Point) InfluxDb таким образом, что:
measurement = имя Метрики;
tag = теги Метрики;
fields = поля Метрики;
time = метка времени Метрики.
JmxOutput#
Компонент JmxOutput — JMX-приемник.
EventDiscoveryOutput#
Компонент EventDiscoveryOutput — EventDiscovery-приемник.
PrintOutput#
Компонент PrintOutput — «заглушка» приемника.
KafkaOutput#
Компонент KafkaOutput — компонент-приемник (output), подключается к Kafka-кластеру и сохраняет набор полученных из потока Метрик в указанный topic.
Пример конфигурации:
{
name: SomeKafkaOutputComponent
description: "SomeKafkaOutputComponent description"
type: output
class: KafkaOutput
detailedLoggingRateMs: 600000
template: {
pattern: "some string pattern ... " (see below)
dateTimeFormat: "yyyy-MM-dd'T'HH:mm:ss.SSS"
}
bootstrapServers: "IP_ADDRESS:9092,IP_ADDRESS:9092"
topic: kafkaTopic
securityProtocol: SSL
ssl {
sslKeyPassword: SomeKeyPassword
sslKeystoreLocation: /path/to/file.jks
sslKeystorePassword: SomeKeyStorePassword
sslTruststoreLocation: /path/to/file.jks
sslTruststorePassword: SomeTrustStorePassword
sslEndpointIdentificationAlgorithm: SomeSslEndpointIdentificationAlgorithm
}
}
Требуемые значения общих параметров конфигурации:
type: output
class: KafkaOutput
Обязательные параметры:
bootstrapServers— список серверов Kafka-кластера (строка);topic— имя выходного топика для отправки метрик (строка);securityProtocol— тип протокола безопасности для подключения к Kafka-кластеру (строка).
Необязательные параметры:
detailedLoggingRateMs— период формирования детальных логов по выходным метрикам в мс (длинное целое);ssl— секция настроек для доступа к кластеру по SSL:sslKeyPassword— пароль Key (строка);sslKeystoreLocation— путь к Keystore (строка);sslKeystorePassword— пароль KeyStore (строка);sslTruststoreLocation— путь к Truststore (строка);sslTruststorePassword— пароль TrustStore (строка);
template— секция настроек для формирования сообщения в формате JSON на основе шаблона и отправки его в topic Kafka:pattern— строковое представление шаблона сообщения в формате JSON (строка);dateTimeFormat— формат даты-времени, напримерyyyy-MM-dd'T'HH:mm:ss.SSS(строка).
Особенности использования:
Компонент выполняет подключение к кластеру Kafka и осуществляет запись выходных метрик в заданный topic Kafka-кластера. Формирование JSON-сообщений на основе шаблона реализовано на основе JsonTemplate.
Пример шаблона сообщения:
{timestamp: $time, metricName:$name, valueType:$valueType, unit:$tag_unit, velocity:$field_velocity, description: "Any text ..."}
, где $ — знак обозначения переменной, значение которой будет подставлено в шаблон.
Существует несколько зарезервированных переменных, которые можно использовать в шаблоне:
$time— время формирования метрики. Представляет собой строковое представление в формате даты-времени. Если формат дата-время не указан в конфигурации, то используется дефолтный формат —YYYY-MM-DD hh:mm:ss.ss$name— имя метрики;$valueType— тип метрики;$tag_tagKey— значение тега метрики с ключомtagKey. Использование префиксаtag_обязательно;$field_fieldName— значение поля метрики с ключомfieldName. Использование префиксаfield_обязательно;@props($tags)— представляет список всех тегов с их значениями. Использование@propsобязательно;@props($fields)— представляет список всех полей метрики с их значениями. Использование@propsобязательно.
Пример_1 конфигурации для заполнения шаблона:
template: {
pattern: "{timestamp: $time, metricName:$name, valueType:$valueType, unit:$tag_unit, velocity:$field_velocity, description: "Any text ..."}"
dateTimeFormat: "yyyy-MM-dd'T'HH:mm:ss.SSS"
}
Результирующее JSON-сообщение:
{
"timestamp":"2021-08-31T17:34:32.186",
"metricName":"simple_metric_1",
"valueType":"Counter",
"unit":"m/s",
"velocity":"125.6",
"description":"Any text ..."
}
Пример конфигурации для заполнения шаблона:
template: {
pattern: "{timestamp: $time, metricName:$name, valueType:$valueType, allTags:@prop($tags), allFields:@props($fields), description: "Any text ..."}"
dateTimeFormat: "yyyy-MM-dd'T'HH:mm:ss.SSS"
}
Результирующее JSON-сообщение:
{
"timestamp":"2021-08-31T17:34:32.186",
"metricName":"simple_metric_1",
"valueType":"Counter",
"allTags":[
{
"key": "test_tag_1",
"value": "tag_value_11"
},
{
"key": "test_tag_2",
"value": "tag_value_12"
},
{
"key": "test_tag_3",
"value": "tag_value_13"
}
],
"allFields":[
{
"key": "test_field_1",
"value": "265"
},
{
"key": "test_field_2",
"value": "343.564"
},
{
"key": "test_field_3",
"value": "asdf"
}
],
"description":"Any text ..."
}
Все значения в результирующем JSON-сообщения представляют собой строковые значения.
ElasticsearchOutput#
Компонент ElasticsearchOutput — компонент-приемник (output), подключается к серверу Elasticsearch и сохраняет набор полученных из потока Метрик в поисковый индекс Elasticsearch-сервера.
Пример конфигурации:
{
name: SomeKafkaOutputComponent
description: "SomeElasticsearchOutputComponent description"
type: output
class: ElasticsearchOutput
detailedLoggingRateMs: 600000
host: localhost
port: 9200
ssl {
sslKeystoreLocation: /path/to/file.jks
sslKeystorePassword: SomeKeyStorePassword
sslTruststoreLocation: /path/to/file.jks
sslTruststorePassword: SomeTrustStorePassword
}
}
Требуемые значения общих параметров конфигурации:
type: output
class: ElasticsearchOutput
Обязательные параметры:
host— адрес сервера Elasticsearch (строка);port— порт сервера Elasticsearch (целое).
Необязательные параметры:
detailedLoggingRateMs— период формирования детальных логов по выходным метрикам в мс (длинное целое);ssl— секция настроек для доступа к кластеру по SSL:sslKeystoreLocation— путь к Keystore (строка);sslKeystorePassword— пароль KeyStore (строка);sslTruststoreLocation— путь к Truststore (строка);sslTruststorePassword— пароль TrustStore (строка).
Особенности использования:
Компонент выполняет подключение к серверу Elasticsearch и осуществляет запись выходных метрик в Elasticsearch индекс.
Processor компоненты#
В состав Коллектора входят реализации следующих processor компонентов:
обработка на уровне отдельных полей метрики (
field):FieldCompositeDataProcessor— преобразует поля метрики с типом CompositeData в набор полей с примитивными типами (committed,init,max,used);FieldRenameProcessor— переименовывает заданные поля метрики;FieldNameTypeSuffixProcessor— добавляет к именам полей суффикс с именем типа текущего значения данного поля;FieldFromTagTransferProcessor— осуществляет перенос значений тегов, указанных в конфигурации, в поля метрики.
обработка на уровне метрики целиком (
metric):MetricAggregationProcessor— агрегирует входной список метрик с группировкой по имени метрики (объединяет теги, суммирует значения указанных полей);MetricKafkaLagProcessor— агрегирует входной список метрик из двух источников (JmxInput+KafkaAdminClientInput);MetricSplitByFieldsProcessor— тиражирует (сплитит) метрику на несколько отдельных метрик по количеству полей, добавляет к имени выходной метрики имя соответствующего поля;MetricFilterProcessor— фильтрует метрики по образцу;MetricTransformerProcessor— процессор может преобразовывать любые части метрики.
обработка на уровне имени метрики (
name):NameSubsByTagsProcessor— заполняет шаблон имени метрики значениями тегов;NameSuffixProcessor— добавляет к имени метрики суффикс;NamePrefixProcessor— добавляет к имени метрики префикс.
обработка на уровне тегов метрики (
tag):TagPrefixProcessor— добавляет к именам тегов заданный префикс;TagRemoveProcessor— выборочно удаляет теги из метрики;TagSuffixProcessor— добавляет к именам тегов заданный суффикс;TagTransformProcessor— преобразует значения заданных тегов по регулярному выражению.
Пример типовой конфигурации процессора:
{
name: SomeProcessorComponent
description: "SomeProcessorComponent description"
type: processor
class: ClassOfProcessor
includeOnly: {
metrics: [
{name: nameTemplate1, valueType: typeTemplate1}
{name: nameTemplate2, valueType: typeTemplate2}
]
}
excludeOnly: {
metrics: [
{name: nameTemplate1, valueType: typeTemplate1}
{name: nameTemplate2, valueType: typeTemplate2}
]
}
}
Требуемые значения общих параметров конфигурации:
type: processor
class: FieldCompositeDataProcessor
Необязательные параметры:
includeOnly— список шаблонов соответствия для метрик подвергаемых обработке в процессоре (список);excludeOnly— список шаблонов соответствия для метрик исключаемых из обработки в процессоре (список).
FieldCompositeDataProcessor#
Компонент FieldCompositeDataProcessor — компонент-обработчик (processor), обработка на уровне отдельных полей метрики (field). Преобразует поля метрики с типом CompositeData в набор полей с примитивными типами (committed, init, max, used).
Пример конфигурации:
{
name: SomeFieldCompositeDataProcessorComponent
description: "SomeFieldCompositeDataProcessorComponent description"
type: processor
class: FieldCompositeDataProcessor
}
Требуемые значения общих параметров конфигурации:
type: processor
class: FieldCompositeDataProcessor
Особенности использования:
Компонент преобразует каждое поле Метрики, имеющее композитный тип CompositeData, в набор из четырех отдельных полей:
Имя старого поля |
Имя нового поля |
Значение |
|---|---|---|
<имя_поля> |
<имя_поля>Сommitted |
|
- // - |
<имя_поля>Init |
|
- // - |
<имя_поля>Max |
|
- // - |
<имя_поля>Used |
|
FieldRenameProcessor#
Компонент FieldRenameProcessor — компонент-обработчик (processor), обработка на уровне отдельных полей метрики (field).
Переименовывает указанные в конфигурации компонента поля метрики.
Пример конфигурации:
{
name: SomeFieldRenameProcessorComponent
description: "SomeFieldRenameProcessorComponent description"
type: processor
class: FieldRenameProcessor
namesMap: [ { oldName: SomeOldName, newName: SomeNewName } ]
}
Требуемые значения общих параметров конфигурации:
type: processor
class: FieldRenameProcessor
Обязательные параметры:
namesMap— словарь соответствия имен полей (список структур):oldName— текущее имя переименовываемого поля (строка);newName— новое имя для переименовываемого поля (строка).
MetricAggregationProcessor#
Компонент MetricAggregationProcessor — компонент-обработчик (processor), обработка на уровне метрики целиком (metric). Агрегирует входной список метрик с группировкой по имени метрики.
Пример конфигурации:
{
name: SomeMetricAggregationProcessorComponent
description: "SomeMetricAggregationProcessorComponent description"
type: processor
class: MetricAggregationProcessor
fields: [Value]
}
Требуемые значения общих параметров конфигурации:
type: processor
class: MetricAggregationProcessor
Обязательные параметры:
fields— перечень имен полей (список строк).
Особенности использования:
группирует входной набор Метрик по имени Метрики;
объединяет теги, суммирует значения указанных в параметре
fieldsполей;передает агрегированный результат на выход.
MetricKafkaLagProcessor#
Компонент MetricKafkaLagProcessor — компонент-обработчик (processor), обработка на уровне метрики целиком (metric). Агрегирует входной список метрик из двух источников (JmxInput + KafkaAdminClientInput).
Пример конфигурации:
{
name: SomeMetricKafkaLagProcessorComponent
description: "SomeMetricKafkaLagProcessorComponent description"
type: processor
class: MetricKafkaLagProcessor
fieldName: SomeField
metricName: SomeMetricName
metricDescription: "SomeMetric description"
}
Требуемые значения общих параметров конфигурации:
type: processor
class: MetricKafkaLagProcessor
Необязательные параметры:
fieldName— имя поля Метрики для получения входного значения (строка);metricName— суффикс имени выходной Метрики (префиксом будет имя входной метрики) (строка);metricDescription— описание выходной Метрики (строка).
Особенности использования:
Работает в потоке с двумя Источниками (JmxInput + KafkaAdminClientInput).
Из входного набора Метрик отбирает метрики *.EndOffset (JmxInput) и *.CurrentOffset (KafkaAdminClientInput). Остальные метрики проходят через процессор транзитом без изменений.
На основе этих метрик производит расчет задержки консьюмер-групп по топикам Kafka.
Используется следующий подход:
Приближенно
Lag = (endOffset - currentOffset);currentOffsetможно по консьюмер-группам взять черезKafka Admin Client;endOffset(другими словамиlast produced offset) можно по топикам и партициям взять через JMX-метрикуLogEndOffset, после все собирается агрегатором и высчитывается разница.
Компонент требует наличия у Метрики следующих тегов:
topic;
partition;
consumerGroup.
MetricSplitByFieldsProcessor#
Компонент MetricSplitByFieldsProcessor — компонент-обработчик (processor), обработка на уровне метрики целиком (metric).
Тиражирует (сплитит) метрику на несколько отдельных метрик по количеству полей.
Пример конфигурации:
{
name: SomeMetricSplitByFieldsProcessorComponent
description: "SomeMetricSplitByFieldsProcessorComponent description"
type: processor
class: MetricSplitByFieldsProcessor
}
Требуемые значения общих параметров конфигурации:
type: processor
class: MetricSplitByFieldsProcessor
Особенности использования:
Из каждой Метрики с несколькими полями компонент делает набор Метрик с единственным полем.
При этом к имени новой Метрики имя поля добавляется как суффикс, например:
было:
Имя метрики |
Поля метрики |
|---|---|
SomeName |
[Field1, Field2, Field3] |
станет:
Имя метрики |
Поля метрики |
|---|---|
SomeNameField1 |
[Field1] |
SomeNameField2 |
[Field2] |
SomeNameField3 |
[Field3] |
NameSubsByTagsProcessor компонент#
Компонент Обработчик (processor).
Обработка на уровне имени метрики (name).
Заполняет шаблон имени метрики значениями тегов.
Пример конфигурации:
{
name: SomeNameSubsByTagsProcessorComponent
description: "SomeNameSubsByTagsProcessorComponent description"
type: processor
class: NameSubsByTagsProcessor
}
Требуемые значения общих параметров конфигурации:
type: processor
class: NameSubsByTagsProcessor
Особенности использования:
Предполагается, что вместо имени Метрики может использоваться шаблон следующего вида:
Some.MetricName.Template.Host(<host>).Topic_<topic>.Partition<partition>
Здесь в тексте имени содержатся подстановочные переменные, заключенные в угловые скобки:
<host><topic><partition>
Количество и место расположение подобных подстановочных переменных может быть произвольным (недопустима только их вложенность).
Компонент производит подстановку вместо переменных шаблона в скобках значений тегов Метрики, имена которых совпадают с именами переменных.
Например, если Метрика содержит следующие теги:
Имя тега |
Значение тега |
|---|---|
host |
IP_ADDRESS |
topic |
SomeTopic |
partition |
5 |
Результатом заполнения шаблона имени Метрики из предыдущего примера станет следующая строка:
Some.MetricName.Template.Host(IP_ADDRESS).Topic_SomeTopic.Partition5
TagPrefixProcessor компонент#
Добавляет к имени метрики суффикс.
TagPrefixProcessor компонент#
Добавляет к именам тегов заданный префикс.
TagRemoveProcessor компонент#
Компонент Обработчик (processor).
Обработка на уровне тегов метрики (tag):
Выборочно удаляет теги метрики.
Пример конфигурации:
{
name: SomeTagRemoveProcessorComponent
description: "SomeTagRemoveProcessorComponent description"
type: processor
class: TagRemoveProcessor
nonRemovableTags: [ ]
}
Требуемые значения общих параметров конфигурации:
type: processor
class: TagRemoveProcessor
Необязательные параметры:
nonRemovableTags— перечень имен тегов, запрещенных к удалению (список строк).
Особенности использования:
Из состава тегов Метрики удаляются все теги, имена которых не содержатся в списке параметра nonRemovableTags.
Если данный список пуст или параметр nonRemovableTags не задан в конфигурации, будут удалены все теги Метрики!
TagSuffixProcessor компонент#
Добавляет к именам тегов заданный суффикс.
TagTransformProcessor компонент#
Компонент Обработчик (processor).
Обработка на уровне тегов метрики (tag):
Преобразует значения заданных тегов по регулярному выражению.
Пример конфигурации:
{
name: SomeTagTransformProcessorComponent
description: "SomeTagTransformProcessorComponent description"
type: processor
class: TagTransformProcessor
regexPattern: "connector-(?:producer|consumer)-(.*-connector?).*"
tags: ["client-id"]
}
Требуемые значения общих параметров конфигурации:
type: processor
class: TagTransformProcessor
Обязательные параметры:
regexPattern— регулярное выражение, описывающее преобразование (строка).tags— перечень имен тегов, подлежащих трансформации (список строк).
Особенности использования:
Над значениями тегов, перечисленными в параметре tags, выполняется преобразование, заданное регулярным выражением regexPattern.
В тексте регулярного выражения должна быть единственная извлекаемая группа, ее результат и принимается за новое значение трансформируемого тега!
Так, в выражении из примера группа (?:producer|consumer) помечена как не извлекаемая и она не учитывается, а результат трансформации формируется группой (.*-connector?).
FieldFromTagTransferProcessor компонент#
Компонент Обработчик (processor).
Обработка на уровне полей метрики (field).
Осуществляет перенос значений тегов, указанных в конфигурации, в поля метрики.
Пример конфигурации:
{
name: FieldFromTagTransfer
description: "transfer tag value to metric field"
type: processor
class: FieldFromTagTransferProcessor
transfer:
[
{ tag: tag_name_1, fieldName: fieldName_1 },
{ tag: tag_name_2, fieldName: fieldName_2 }
]
}
Требуемые значения общих параметров конфигурации:
type: processor
class: FieldFromTagTransferProcessor
Обязательные параметры:
transfer— перечень тегов и имен полей метрики между которыми необходим перенос значений;transfer.tag— имя тега метрики откуда необходимо перенести значение;transfer.fieldName— имя поля метрики куда необходимо перенести значение тега.
Особенности использования:
Если тег с именем, указанным в конфигурации, отсутствует в метрике, то перенос значений тегов не происходит и метрика остается без изменений.
Если поле метрики с именем, указанным в конфигурации, отсутствует в полях метрики, то будет создано новое поле метрики при переносе значения.
Если поле метрики с именем, указанным в конфигурации, присутствует в полях метрики, то значение для этого поля метрики будет обновлено при переносе значений.
MetricTransformerProcessor компонент#
Компонент Обработчик (processor).
Обработка на уровне метрики целиком (metric).
Процессор может преобразовывать:
имя метрики —
name;тип метрики —
valueType;время формирования метрики —
time;значения заданных тегов и/или формирование новых тегов;
значения заданных полей метрики и/или формирование новых.
Пример конфигурации:
{
name: MetricTransformer
description: "transform metrics"
type: processor
class: MetricTransformerProcessor
transformer: {
metrics: [
{ template: {name: metric_1, valueType: Gauge}, transformValues: { name: new_metric_name, valueType: Histogram, time: 1631024403, tags: [{key: tagName, value: newTagValue}], fields: [{key: fieldName, value: newFieldValue}]}}
]
}
}
Требуемые значения общих параметров конфигурации:
type: processor
class: MetricTransformerProcessor
Обязательные параметры:
transformer.metrics— перечень метрик, в которых необходимо провести трансформацию, и что именно необходимо изменить/добавить. Каждый элемент перечняmetricsсостоит из двух полей —templateиtransformValues;template— набор параметров, по которым идентифицируется метрика, в которой необходимо провести трансформацию. К этим параметрам относятся -name,valueType,time,tags,fields;transformValues— набор новых значений, которые необходимо изменить/добавить в метрике.
В параметрах template и transformValues могут присутствовать следующие параметры — name, valueType, time, tags, fields.
name— имя метрики;valueType— тип метрики;time— время формирования метрики;tags— теги метрики;fields— поля метрики.
Параметры tags и field представляют собой список ключ-значение — [{key: tagName(or fieldName), value: newValue}, {key: ..., value: ..., ...}]
, где:
key— имя тега или поля метрики, которое необходимо изменить;value— новое значение. В полеvalueможно использовать математические выражения.
Математические выражения, преобразование типов и использование имен тегов/полей метрик в поле value
Для явного указания на математическое выражение необходимо использовать синтаксическую конструкцию — mathExpr(...)
Для корректного вычисления выражение должно быть записано в двойных кавычках — {key: fieldName2, value: "mathExpr((1 + 3)*2 + 5)"}
В математических выражениях возможно использование скобок для приоритезации вычислений, а также имена тегов/полей метрик. Для использования в выражениях имен тегов или полей метрики необходимо использовать следующие префиксы:
tag_— для обозначения имени тега. Пример:tag_tagName, гдеtagName— имя тега в метрике.field_— для обозначения имени поля метрики. Пример:field_fieldName, гдеfieldName— имя поля метрики.
Пример выражений с использованием имен тегов/полей метрики:
{key: fieldName3, value: "mathExpr(field_fieldName1 + field_fieldName2)*2 + 5)"}` или `{key: tagName4, value: "mathExpr((tag_tagName - 34 )* 1000)"}
При вычислении арифметического выражения значения операндов приводятся к типу Double.
Если приведение типов не может быть выполнено, то трансформация не выполняется и метрика остается без изменений.
Результат вычисления также имеет тип Double.
В случае, если необходимо переопределить тип результата вычисления, можно воспользоваться следующими функциям:
toInt— преобразование к типу Int —{key: fieldName2, value: "mathExpr(toInt((1 + 3.2)*2 + 5))"}toLong— преобразование к типу Long —{key: fieldName2, value: "mathExpr(toLong((1 + 3.2)*2 + 5))"}toString— преобразование к типу String —{key: fieldName2, value: "mathExpr(toString((1 + 3.2)*2 + 5))"}Функции преобразования можно использовать только для преобразования вычисленного значения всего математического выражения. Применять функции преобразования типов к конкретным величинам мат. выражения нельзя.
Также возможно использование имен тегов/полей метрик в самом поле value, используя при этом соответствующие префиксы.
{key: fieldName, value: tag_tagName} — в поле с именем fieldName будет установлено значение тега с именем tagName
{key: tagName, value: field_fieldName} — в поле с именем tagName будет установлено значение поля метрики с именем fieldName
При переносе значений поля метрики в значение тега значение всегда будет преобразовываться к типу String.
Если тег с именем, указанным в поле конфигурации key, отсутствует в метрике, то будет создан новый тег в метрике.
Если поле метрики с именем, указанным в поле конфигурации key, отсутствует в полях метрики, то будет создано новое поле метрики.
Если поле метрики/тег с именем, указанным в поле конфигурации key, присутствует в полях (тегах) метрики, то значение для этого поля метрики будет обновлено при трансформации значений.
Aggregator компоненты#
В состав Коллектора входят реализации следующих aggregator компонентов:
BasicAggregator— выполняет агрегацию входного потока метрик на основе временного окна.
В рамках агрегатора могут использоваться следующие типы агрегатных функций:
Sum— сумма;Count— количество значений;Average— среднее значение;Max— максимум;Min— минимум;Delta— разница между max и min значениями.