or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/maven-org-apache-flink--flink-metrics-graphite

A Flink metrics reporter that exports metrics to Graphite monitoring system via TCP or UDP protocols

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.apache.flink/flink-metrics-graphite@2.1.x

To install, run

npx @tessl/cli install tessl/maven-org-apache-flink--flink-metrics-graphite@2.1.0

index.mddocs/

Flink Metrics Graphite

Flink Metrics Graphite is a metrics reporter component for Apache Flink that exports metrics to Graphite monitoring systems. It provides seamless integration between Flink's internal metrics collection framework and Graphite's time-series database, supporting both TCP and UDP protocols for metrics transmission.

Package Information

  • Package Name: flink-metrics-graphite
  • Package Type: maven
  • Language: Java
  • Installation: org.apache.flink:flink-metrics-graphite:2.1.0

Core Imports

import org.apache.flink.metrics.graphite.GraphiteReporter;
import org.apache.flink.metrics.graphite.GraphiteReporterFactory;
import org.apache.flink.metrics.MetricConfig;
import org.apache.flink.metrics.reporter.MetricReporter;
import com.codahale.metrics.ScheduledReporter;

Basic Usage

import org.apache.flink.metrics.graphite.GraphiteReporter;
import org.apache.flink.metrics.MetricConfig;
import com.codahale.metrics.ScheduledReporter;

// Configure and create a GraphiteReporter
MetricConfig config = new MetricConfig();
config.setString(GraphiteReporter.ARG_HOST, "localhost");  
config.setString(GraphiteReporter.ARG_PORT, "2003");
config.setString(GraphiteReporter.ARG_PROTOCOL, "TCP");

// Create GraphiteReporter and get configured ScheduledReporter
GraphiteReporter reporter = new GraphiteReporter();
ScheduledReporter scheduledReporter = reporter.getReporter(config);

// Or use through Flink's metric system lifecycle
reporter.open(config);
// Metrics will be automatically reported
reporter.close(); // When shutting down

Architecture

The flink-metrics-graphite package is built on top of Apache Flink's metrics framework:

  • GraphiteReporter: Extends ScheduledDropwizardReporter to provide Graphite-specific functionality
  • GraphiteReporterFactory: Implements MetricReporterFactory for service provider interface integration
  • Protocol Support: Handles both TCP and UDP communication protocols with Graphite
  • Dropwizard Integration: Uses Dropwizard Metrics library internally for reporter implementation
  • Configuration: Supports flexible configuration through Flink's MetricConfig system

Capabilities

Graphite Metrics Reporting

Main reporter class that exports Flink metrics to Graphite monitoring systems.

/**
 * GraphiteReporter extends ScheduledDropwizardReporter to provide Graphite integration.
 * Supports both TCP and UDP protocols for metrics transmission.
 */
@PublicEvolving
public class GraphiteReporter extends ScheduledDropwizardReporter {
    
    /** Configuration parameter name for protocol selection */
    public static final String ARG_PROTOCOL = "protocol";
    
    /** Inherited constants from ScheduledDropwizardReporter */
    public static final String ARG_HOST = "host";
    public static final String ARG_PORT = "port";
    public static final String ARG_PREFIX = "prefix";
    public static final String ARG_CONVERSION_RATE = "rateConversion";
    public static final String ARG_CONVERSION_DURATION = "durationConversion";
    
    /**
     * Creates and configures a Dropwizard GraphiteReporter instance.
     * @param config MetricConfig containing connection and formatting options
     * @return ScheduledReporter configured for Graphite communication
     * @throws IllegalArgumentException if host/port configuration is invalid
     */
    @Override
    public ScheduledReporter getReporter(MetricConfig config);
    
    /** Inherited methods from ScheduledDropwizardReporter and MetricReporter */
    
    /**
     * Opens the reporter with the given configuration.
     * @param config MetricConfig containing reporter configuration
     */
    @Override
    public void open(MetricConfig config);
    
    /**
     * Closes the reporter and stops metric reporting.
     */
    @Override
    public void close();
    
    /**
     * Called when a metric is added to the system.
     * @param metric The metric instance
     * @param metricName The metric name
     * @param group The metric group
     */
    @Override
    public void notifyOfAddedMetric(Metric metric, String metricName, MetricGroup group);
    
    /**
     * Called when a metric is removed from the system.
     * @param metric The metric instance
     * @param metricName The metric name  
     * @param group The metric group
     */
    @Override
    public void notifyOfRemovedMetric(Metric metric, String metricName, MetricGroup group);
    
    /**
     * Reports all registered metrics.
     */
    @Override
    public void report();
    
    /**
     * Filters invalid characters from metric names.
     * @param metricName The original metric name
     * @return Filtered metric name with invalid characters replaced
     */
    @Override
    public String filterCharacters(String metricName);
}

Usage Example:

import org.apache.flink.metrics.graphite.GraphiteReporter;
import org.apache.flink.metrics.MetricConfig;
import com.codahale.metrics.ScheduledReporter;

// Create reporter with TCP protocol (default)
GraphiteReporter reporter = new GraphiteReporter();
MetricConfig config = new MetricConfig();
config.setString(GraphiteReporter.ARG_HOST, "graphite.example.com");
config.setString(GraphiteReporter.ARG_PORT, "2003");
config.setString(GraphiteReporter.ARG_PROTOCOL, "TCP");
config.setString(GraphiteReporter.ARG_PREFIX, "flink.myapp");

ScheduledReporter scheduledReporter = reporter.getReporter(config);

// Create new config for UDP protocol  
MetricConfig udpConfig = new MetricConfig();
udpConfig.setString(GraphiteReporter.ARG_HOST, "graphite.example.com");
udpConfig.setString(GraphiteReporter.ARG_PORT, "2003");
udpConfig.setString(GraphiteReporter.ARG_PROTOCOL, "UDP");
ScheduledReporter udpReporter = reporter.getReporter(udpConfig);

Reporter Factory

Factory class for creating GraphiteReporter instances through Flink's service provider interface.

/**
 * MetricReporterFactory implementation for GraphiteReporter.
 * Enables automatic discovery and instantiation by Flink's metrics system.
 */
public class GraphiteReporterFactory implements MetricReporterFactory {
    
    /**
     * Creates a new GraphiteReporter instance.
     * @param properties Configuration properties (currently unused)
     * @return New GraphiteReporter instance
     */
    @Override
    public MetricReporter createMetricReporter(Properties properties);
}

Usage Example:

import org.apache.flink.metrics.graphite.GraphiteReporterFactory;
import org.apache.flink.metrics.reporter.MetricReporter;
import java.util.Properties;

// Direct factory usage
GraphiteReporterFactory factory = new GraphiteReporterFactory();
Properties props = new Properties();
MetricReporter reporter = factory.createMetricReporter(props);

// Automatic discovery via SPI - configured in Flink configuration
// metrics.reporter.graphite.factory.class: org.apache.flink.metrics.graphite.GraphiteReporterFactory

Configuration Parameters

The GraphiteReporter accepts the following configuration parameters through MetricConfig:

/** Configuration parameters inherited from ScheduledDropwizardReporter */
public static final String ARG_HOST = "host";                              // Required: Graphite server hostname
public static final String ARG_PORT = "port";                              // Required: Graphite server port  
public static final String ARG_PREFIX = "prefix";                          // Optional: Metric name prefix
public static final String ARG_CONVERSION_RATE = "rateConversion";         // Optional: Rate conversion time unit
public static final String ARG_CONVERSION_DURATION = "durationConversion"; // Optional: Duration conversion time unit

/** GraphiteReporter-specific parameters */
public static final String ARG_PROTOCOL = "protocol";            // Optional: "TCP" or "UDP" (default: "TCP", case-sensitive)

Configuration Example:

MetricConfig config = new MetricConfig();

// Required parameters
config.setString(GraphiteReporter.ARG_HOST, "graphite.monitoring.com");
config.setString(GraphiteReporter.ARG_PORT, "2003");

// Optional parameters
config.setString(GraphiteReporter.ARG_PROTOCOL, "UDP");                    // Use UDP instead of TCP
config.setString(GraphiteReporter.ARG_PREFIX, "flink.production.app1");    // Add prefix to all metrics
config.setString(GraphiteReporter.ARG_CONVERSION_RATE, "SECONDS");          // Convert rates to per-second
config.setString(GraphiteReporter.ARG_CONVERSION_DURATION, "MILLISECONDS"); // Convert durations to milliseconds

Error Handling

The GraphiteReporter includes validation and error handling:

  • Invalid Host/Port: getReporter() throws IllegalArgumentException if host is null/empty or port < 1
  • Invalid Protocol: Logs warning message and defaults to TCP if protocol is not "TCP" or "UDP" (case-sensitive)
  • Connection Issues: Handled by underlying Dropwizard Graphite reporter with standard network error handling

Example Error Handling:

try {
    MetricConfig config = new MetricConfig();
    config.setString(GraphiteReporter.ARG_HOST, "");  // Invalid empty host
    config.setString(GraphiteReporter.ARG_PORT, "0"); // Invalid port < 1
    
    GraphiteReporter reporter = new GraphiteReporter();
    reporter.getReporter(config);  // Throws IllegalArgumentException
} catch (IllegalArgumentException e) {
    // Handle configuration error
    // Message format: "Invalid host/port configuration. Host: [host] Port: [port]"
    System.err.println("Configuration error: " + e.getMessage());
}

Types

/** Protocol enumeration for internal use (private to GraphiteReporter class) */
private enum Protocol {
    TCP,    // TCP socket communication (default)
    UDP     // UDP datagram communication  
}

/** Required imports for complete API usage */
import org.apache.flink.metrics.Metric;
import org.apache.flink.metrics.MetricGroup;
import org.apache.flink.metrics.Counter;
import org.apache.flink.metrics.Gauge;
import org.apache.flink.metrics.Histogram;
import org.apache.flink.metrics.Meter;
import java.util.Properties;

Dependencies

The package requires the following dependencies:

  • Provided Dependencies (must be available at runtime):

    • org.apache.flink:flink-annotations
    • org.apache.flink:flink-metrics-core
  • Bundled Dependencies (included in shaded JAR):

    • org.apache.flink:flink-metrics-dropwizard
    • io.dropwizard.metrics:metrics-core
    • io.dropwizard.metrics:metrics-graphite