Apache NiFi - MiNiFi - C++ Metrics Readme.

This readme defines the metrics published by Apache NiFi. All options defined are located in minifi.properties.

Table of Contents

Description

Apache NiFi MiNiFi C++ can communicate metrics about the agent's status, that can be a system level or component level metric. These metrics are exposed through the agent implemented metric publishers that can be configured in the minifi.properties. Aside from the publisher exposed metrics, metrics are also sent through C2 protocol of which there is more information in the C2 documentation.

Configuration

To configure the a metrics publisher first we have to set which publisher class should be used:

# in minifi.properties

nifi.metrics.publisher.class=PrometheusMetricsPublisher

Currently PrometheusMetricsPublisher is the only available publisher in MiNiFi C++ which publishes metrics to a Prometheus server. To use the publisher a port should also be configured where the metrics will be available to be scraped through:

# in minifi.properties

nifi.metrics.publisher.PrometheusMetricsPublisher.port=9936

The following option defines which metric classes should be exposed through the metrics publisher in configured with a comma separated value:

# in minifi.properties

nifi.metrics.publisher.metrics=QueueMetrics,RepositoryMetrics,GetFileMetrics,DeviceInfoNode,FlowInformation,processorMetrics/Tail.*

An agent identifier should also be defined to identify which agent the metric is exposed from. If not set, the hostname is used as the identifier.

# in minifi.properties

nifi.metrics.publisher.agent.identifier=Agent1

System Metrics

The following section defines the currently available metrics to be published by the MiNiFi C++ agent.

NOTE: In Prometheus all metrics are extended with a minifi_ prefix to mark the domain of the metric. For example the connection_name metric is published as minifi_connection_name in Prometheus.

Generic labels

The following labels are set for every single metric and are not listed separately in the labels of the metrics below.

LabelDescription
metric_classClass name to filter for this metric, set to the name of the metric e.g. QueueMetrics, GetFileMetrics
agent_identifierSet to the identifier set in minifi.properties in the nifi.metrics.publisher.agent.identifier property. If not set the hostname is used

QueueMetrics

QueueMetrics is a system level metric that reports queue metrics for every connection in the flow.

Metric nameLabelsDescription
queue_data_sizeconnection_uuid, connection_nameCurrent queue data size
queue_data_size_maxconnection_uuid, connection_nameMax queue data size to apply back pressure
queue_sizeconnection_uuid, connection_nameCurrent queue size
queue_size_maxconnection_uuid, connection_nameMax queue size to apply back pressure
LabelDescription
connection_uuidUUID of the connection defined in the flow configuration
connection_nameName of the connection defined in the flow configuration

RepositoryMetrics

RepositoryMetrics is a system level metric that reports metrics for the registered repositories (by default flowfile and provenance repository)

Metric nameLabelsDescription
is_runningrepository_nameIs the repository running (1 or 0)
is_fullrepository_nameIs the repository full (1 or 0)
repository_sizerepository_nameCurrent size of the repository
LabelDescription
repository_nameName of the reported repository

DeviceInfoNode

DeviceInfoNode is a system level metric that reports metrics about the system resources used and available

Metric nameLabelsDescription
physical_mem-Physical memory available
memory_usage-Physical memory usage of the system
cpu_utilization-CPU utilized by the system

FlowInformation

FlowInformation is a system level metric that reports component and queue related metrics.

Metric nameLabelsDescription
queue_data_sizeconnection_uuid, connection_nameCurrent queue data size
queue_data_size_maxconnection_uuid, connection_nameMax queue data size to apply back pressure
queue_sizeconnection_uuid, connection_nameCurrent queue size
queue_size_maxconnection_uuid, connection_nameMax queue size to apply back pressure
is_runningcomponent_uuid, component_nameCheck if the component is running (1 or 0)
LabelDescription
connection_uuidUUID of the connection defined in the flow configuration
connection_nameName of the connection defined in the flow configuration
component_uuidUUID of the component
component_nameName of the component

AgentStatus

AgentStatus is a system level metric that defines current agent status including repository, component and resource usage information.

Metric nameLabelsDescription
is_runningrepository_nameIs the repository running (1 or 0)
is_fullrepository_nameIs the repository full (1 or 0)
repository_sizerepository_nameCurrent size of the repository
uptime_milliseconds-Agent uptime in milliseconds
is_runningcomponent_uuid, component_nameCheck if the component is running (1 or 0)
agent_memory_usage_bytes-Memory used by the agent process in bytes
agent_cpu_utilization-CPU utilization of the agent process (between 0 and 1). In case of a query error the returned value is -1.
LabelDescription
repository_nameName of the reported repository
connection_uuidUUID of the connection defined in the flow configuration
connection_nameName of the connection defined in the flow configuration
component_uuidUUID of the component
component_nameName of the component

Processor Metrics

Processor level metrics can be accessed for any processor provided by MiNiFi. These metrics correspond to the name of the processor appended by the “Metrics” suffix (e.g. GetFileMetrics, TailFileMetrics, etc.).

Besides configuring processor metrics directly, they can also be configured using regular expressions with the processorMetrics/ prefix.

All available processor metrics can be requested in the minifi.properties by using the following configuration:

nifi.metrics.publisher.metrics=processorMetrics/.*

Regular expressions can also be used for requesting multiple processor metrics at once, like GetFileMetrics and GetTCPMetrics with the following configuration:

nifi.metrics.publisher.metrics=processorMetrics/Get.*Metrics

General Metrics

There are general metrics that are available for all processors. Besides these metrics processors can implement additional metrics that are speicific to that processor.

Metric nameLabelsDescription
onTrigger_invocationsmetric_class, processor_name, processor_uuidThe number of processor onTrigger calls
average_onTrigger_runtime_millisecondsmetric_class, processor_name, processor_uuidThe average runtime in milliseconds of the last 10 onTrigger calls of the processor
last_onTrigger_runtime_millisecondsmetric_class, processor_name, processor_uuidThe runtime in milliseconds of the last onTrigger call of the processor
average_session_commit_runtime_millisecondsmetric_class, processor_name, processor_uuidThe average runtime in milliseconds of the last 10 session commit calls of the processor
last_session_commit_runtime_millisecondsmetric_class, processor_name, processor_uuidThe runtime in milliseconds of the last session commit call of the processor
transferred_flow_filesmetric_class, processor_name, processor_uuidNumber of flow files transferred to a relationship
transferred_bytesmetric_class, processor_name, processor_uuidNumber of bytes transferred to a relationship
transferred_to_<relationship>metric_class, processor_name, processor_uuidNumber of flow files transferred to a specific relationship
LabelDescription
metric_classClass name to filter for this metric, set to <processor type>Metrics
processor_nameName of the processor
processor_uuidUUID of the processor

GetFileMetrics

Processor level metric that reports metrics for the GetFile processor if defined in the flow configuration.

Metric nameLabelsDescription
accepted_filesmetric_class, processor_name, processor_uuidNumber of files that matched the set criterias
input_bytesmetric_class, processor_name, processor_uuidSum of file sizes processed
LabelDescription
metric_classClass name to filter for this metric, set to GetFileMetrics
processor_nameName of the processor
processor_uuidUUID of the processor