Class AbstractMetricGroup<A extends AbstractMetricGroup<?>>

  • 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.

    • Field Detail

      • 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 Detail

      • AbstractMetricGroup

        public AbstractMetricGroup​(MetricRegistry registry,
                                   String[] scope,
                                   A parent)
    • Method Detail

      • getAllVariables

        public Map<String,​String> getAllVariables()
        Specified by:
        getAllVariables in interface org.apache.flink.metrics.MetricGroup
      • 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:
        getMetricIdentifier(String)
      • 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