Class AbstractMetricGroup<A extends AbstractMetricGroup<?>>

java.lang.Object
org.apache.flink.runtime.metrics.groups.AbstractMetricGroup<A>
Type Parameters:
A - The type of the parent MetricGroup
All Implemented Interfaces:
org.apache.flink.metrics.MetricGroup
Direct Known Subclasses:
ComponentMetricGroup, GenericMetricGroup, ProcessMetricGroup, ResourceManagerMetricGroup, SlotManagerMetricGroup

@Internal public abstract class AbstractMetricGroup<A extends AbstractMetricGroup<?>> extends Object implements org.apache.flink.metrics.MetricGroup
Abstract MetricGroup that contains key functionality for adding metrics and groups.

IMPORTANT IMPLEMENTATION NOTE

This class uses locks for adding and removing metrics objects. This is done to prevent resource leaks in the presence of concurrently closing a group and adding metrics and subgroups. Since closing groups recursively closes the subgroups, the lock acquisition order must be strictly from parent group to subgroup. If at any point, a subgroup holds its group lock and calls a parent method that also acquires the lock, it will create a deadlock condition.

An AbstractMetricGroup can be closed. Upon closing, the group de-register all metrics from any metrics reporter and any internal maps. Note that even closed metrics groups return Counters, Gauges, etc to the code, to prevent exceptions in the monitored code. These metrics simply do not get reported any more, when created on a closed group.

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    protected static enum 
    Enum for indicating which child group should be created.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected static final org.slf4j.Logger
     
    protected final A
    The parent group containing this group.
    protected QueryScopeInfo
    The metrics query service scope represented by this group, lazily computed.
    protected final MetricRegistry
    The registry that this metrics group belongs to.
    protected Map<String,String>[]
    The map containing all variables and their associated values, lazily computed.
  • Constructor Summary

    Constructors
    Constructor
    Description
    AbstractMetricGroup(MetricRegistry registry, String[] scope, A parent)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    org.apache.flink.metrics.MetricGroup
     
    org.apache.flink.metrics.MetricGroup
    addGroup(String key, String value)
     
    protected void
    addMetric(String name, org.apache.flink.metrics.Metric metric)
    Adds the given metric to the group and registers it at the registry, if the group is not yet closed, and if no metric with the same name has been registered before.
    void
    addSpan(org.apache.flink.traces.SpanBuilder spanBuilder)
     
    void
     
    org.apache.flink.metrics.Counter
     
    <C extends org.apache.flink.metrics.Counter>
    C
    counter(String name, C counter)
     
     
    protected String
    createLogicalScope(org.apache.flink.metrics.CharacterFilter filter, char delimiter)
     
    protected abstract QueryScopeInfo
    createQueryServiceMetricInfo(org.apache.flink.metrics.CharacterFilter filter)
    Creates the metric query service scope for this group.
    <T, G extends org.apache.flink.metrics.Gauge<T>>
    G
    gauge(String name, G gauge)
     
     
    getAllVariables(int reporterIndex, Set<String> excludedVariables)
     
    protected abstract String
    getGroupName(org.apache.flink.metrics.CharacterFilter filter)
    Returns the name for this group, meaning what kind of entity it represents, for example "taskmanager".
    getLogicalScope(org.apache.flink.metrics.CharacterFilter filter)
    Returns the logical scope of this group, for example "taskmanager.job.task".
    getLogicalScope(org.apache.flink.metrics.CharacterFilter filter, char delimiter)
    Returns the logical scope of this group, for example "taskmanager.job.task".
    Returns the fully qualified metric name, for example "host-7.taskmanager-2.window_word_count.my-mapper.metricName".
    getMetricIdentifier(String metricName, org.apache.flink.metrics.CharacterFilter filter)
    Returns the fully qualified metric name, for example "host-7.taskmanager-2.window_word_count.my-mapper.metricName".
    getMetricIdentifier(String metricName, org.apache.flink.metrics.CharacterFilter filter, int reporterIndex, char delimiter)
    Returns the fully qualified metric name using the configured delimiter for the reporter with the given index, for example "host-7.taskmanager-2.window_word_count.my-mapper.metricName".
    getQueryServiceMetricInfo(org.apache.flink.metrics.CharacterFilter filter)
    Returns the metric query service scope for this group.
    Gets the scope as an array of the scope components, for example ["host-7", "taskmanager-2", "window_word_count", "my-mapper"].
    <H extends org.apache.flink.metrics.Histogram>
    H
    histogram(String name, H histogram)
     
    final boolean
     
    <M extends org.apache.flink.metrics.Meter>
    M
    meter(String name, M meter)
     
    protected void
    Enters all variables specific to this AbstractMetricGroup and their associated values into the map.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.apache.flink.metrics.MetricGroup

    addGroup, counter, counter, gauge, histogram, meter
  • Field Details

    • LOG

      protected static final org.slf4j.Logger LOG
    • parent

      protected final A extends AbstractMetricGroup<?> parent
      The parent group containing this group.
    • variables

      protected volatile Map<String,String>[] variables
      The map containing all variables and their associated values, lazily computed.
    • registry

      protected final MetricRegistry registry
      The registry that this metrics group belongs to.
    • queryServiceScopeInfo

      protected QueryScopeInfo queryServiceScopeInfo
      The metrics query service scope represented by this group, lazily computed.
  • Constructor Details

  • Method Details

    • getAllVariables

      public Map<String,String> getAllVariables()
      Specified by:
      getAllVariables in interface org.apache.flink.metrics.MetricGroup
    • getAllVariables

      public Map<String,String> getAllVariables(int reporterIndex, Set<String> excludedVariables)
    • putVariables

      protected void putVariables(Map<String,String> variables)
      Enters all variables specific to this AbstractMetricGroup and their associated values into the map.
      Parameters:
      variables - map to enter variables and their values into
    • getLogicalScope

      public String getLogicalScope(org.apache.flink.metrics.CharacterFilter filter)
      Returns the logical scope of this group, for example "taskmanager.job.task".
      Parameters:
      filter - character filter which is applied to the scope components
      Returns:
      logical scope
    • getLogicalScope

      public String getLogicalScope(org.apache.flink.metrics.CharacterFilter filter, char delimiter)
      Returns the logical scope of this group, for example "taskmanager.job.task".
      Parameters:
      filter - character filter which is applied to the scope components
      Returns:
      logical scope
    • createLogicalScope

      protected String createLogicalScope(org.apache.flink.metrics.CharacterFilter filter, char delimiter)
    • getGroupName

      protected abstract String getGroupName(org.apache.flink.metrics.CharacterFilter filter)
      Returns the name for this group, meaning what kind of entity it represents, for example "taskmanager".
      Parameters:
      filter - character filter which is applied to the name
      Returns:
      logical name for this group
    • getScopeComponents

      public String[] getScopeComponents()
      Gets the scope as an array of the scope components, for example ["host-7", "taskmanager-2", "window_word_count", "my-mapper"].
      Specified by:
      getScopeComponents in interface org.apache.flink.metrics.MetricGroup
      See Also:
    • getQueryServiceMetricInfo

      public QueryScopeInfo getQueryServiceMetricInfo(org.apache.flink.metrics.CharacterFilter filter)
      Returns the metric query service scope for this group.
      Parameters:
      filter - character filter
      Returns:
      query service scope
    • createQueryServiceMetricInfo

      protected abstract QueryScopeInfo createQueryServiceMetricInfo(org.apache.flink.metrics.CharacterFilter filter)
      Creates the metric query service scope for this group.
      Parameters:
      filter - character filter
      Returns:
      query service scope
    • getMetricIdentifier

      public String getMetricIdentifier(String metricName)
      Returns the fully qualified metric name, for example "host-7.taskmanager-2.window_word_count.my-mapper.metricName".
      Specified by:
      getMetricIdentifier in interface org.apache.flink.metrics.MetricGroup
      Parameters:
      metricName - metric name
      Returns:
      fully qualified metric name
    • getMetricIdentifier

      public String getMetricIdentifier(String metricName, org.apache.flink.metrics.CharacterFilter filter)
      Returns the fully qualified metric name, for example "host-7.taskmanager-2.window_word_count.my-mapper.metricName".
      Specified by:
      getMetricIdentifier in interface org.apache.flink.metrics.MetricGroup
      Parameters:
      metricName - metric name
      filter - character filter which is applied to the scope components if not null.
      Returns:
      fully qualified metric name
    • getMetricIdentifier

      public String getMetricIdentifier(String metricName, org.apache.flink.metrics.CharacterFilter filter, int reporterIndex, char delimiter)
      Returns the fully qualified metric name using the configured delimiter for the reporter with the given index, for example "host-7.taskmanager-2.window_word_count.my-mapper.metricName".
      Parameters:
      metricName - metric name
      filter - character filter which is applied to the scope components if not null.
      reporterIndex - index of the reporter whose delimiter should be used
      delimiter - delimiter to use
      Returns:
      fully qualified metric name
    • close

      public void close()
    • isClosed

      public final boolean isClosed()
    • addSpan

      public void addSpan(org.apache.flink.traces.SpanBuilder spanBuilder)
      Specified by:
      addSpan in interface org.apache.flink.metrics.MetricGroup
    • counter

      public org.apache.flink.metrics.Counter counter(String name)
      Specified by:
      counter in interface org.apache.flink.metrics.MetricGroup
    • counter

      public <C extends org.apache.flink.metrics.Counter> C counter(String name, C counter)
      Specified by:
      counter in interface org.apache.flink.metrics.MetricGroup
    • gauge

      public <T, G extends org.apache.flink.metrics.Gauge<T>> G gauge(String name, G gauge)
      Specified by:
      gauge in interface org.apache.flink.metrics.MetricGroup
    • histogram

      public <H extends org.apache.flink.metrics.Histogram> H histogram(String name, H histogram)
      Specified by:
      histogram in interface org.apache.flink.metrics.MetricGroup
    • meter

      public <M extends org.apache.flink.metrics.Meter> M meter(String name, M meter)
      Specified by:
      meter in interface org.apache.flink.metrics.MetricGroup
    • addMetric

      protected void addMetric(String name, org.apache.flink.metrics.Metric metric)
      Adds the given metric to the group and registers it at the registry, if the group is not yet closed, and if no metric with the same name has been registered before.
      Parameters:
      name - the name to register the metric under
      metric - the metric to register
    • addGroup

      public org.apache.flink.metrics.MetricGroup addGroup(String name)
      Specified by:
      addGroup in interface org.apache.flink.metrics.MetricGroup
    • addGroup

      public org.apache.flink.metrics.MetricGroup addGroup(String key, String value)
      Specified by:
      addGroup in interface org.apache.flink.metrics.MetricGroup
    • createChildGroup

      protected GenericMetricGroup createChildGroup(String name, AbstractMetricGroup.ChildType childType)