Metrics Generation Processor
Status: under development; Not recommended for production usage.
Description
The metrics generation processor (metricsgenerationprocessor
) can be used to create new metrics using existing metrics following a given rule. This processor currently supports the following two rule types for creating a new metric.
calculate
: It can create a new metric from two existing metrics by applying one of the following arithmetic operations: add, subtract, multiply, divide, or percent. One use case is to calculate the pod.memory.utilization
metric like the following equation-
pod.memory.utilization
= (pod.memory.usage.bytes
/ node.memory.limit
)
scale
: It can create a new metric by scaling the value of an existing metric with a given constant number. One use case is to convert pod.memory.usage
metric values from Megabytes to Bytes (multiply the existing metric's value by 1,048,576)
calculate
Rule Functionality
There are some specific behaviors of the calculate
metric generation rule that users may want to be aware of:
- The created metric will have the same type as the metric configured as
metric1
.
- If no valid data points are calculated for the metric being created, it will not be created.
This ensures the processor is not emitting new metrics that are empty.
- Users may want to have metric calculations done on data points whose overlapping attributes match. To enable this
behavior, please enable the feature gate
metricsgeneration.MatchAttributes
. This feature gate is disabled
by default, meaning the value used for metric2
during the calculations is simply the first data point's value.
Refer to documentation
for more information on how to enable and disable feature gates.
Configuration
Configuration is specified through a list of generation rules. Generation rules find the metrics which
match the given metric names and apply the specified operation to those metrics.
processors:
# processor name: metricsgeneration
metricsgeneration:
# specify the metric generation rules
rules:
# Name of the new metric. This is a required field.
- name: <new_metric_name>
# Unit for the new metric being generated.
unit: <new_metric_unit>
# type describes how the new metric will be generated. It can be one of `calculate` or `scale`. calculate generates a metric applying the given operation on two operand metrics. scale operates only on operand1 metric to generate the new metric.
type: {calculate, scale}
# This is a required field. This must be a gauge or sum metric.
metric1: <first_operand_metric>
# This field is required only if the type is "calculate". When required, this must be a gauge or sum metric.
metric2: <second_operand_metric>
# Operation specifies which arithmetic operation to apply. It must be one of the five supported operations.
operation: {add, subtract, multiply, divide, percent}
Example Configurations
Create a new metric using two existing metrics
# create pod.cpu.utilized following (pod.cpu.usage / node.cpu.limit)
rules:
- name: pod.cpu.utilized
type: calculate
metric1: pod.cpu.usage
metric2: node.cpu.limit
operation: divide
Create a new metric scaling the value of an existing metric
# create pod.memory.usage.bytes from pod.memory.usage.megabytes
rules:
- name: pod.memory.usage.bytes
unit: Bytes
type: scale
metric1: pod.memory.usage.megabytes
operation: multiply
scale_by: 1048576