You are viewing a plain text version of this content. The canonical link for it is here.
Posted to community@flink.apache.org by Eddie Cheung <ed...@shopify.com.INVALID> on 2023/05/03 18:28:48 UTC
Question about issue for Flink creating Histogram metric for prometheus
Hi community,
When our application using the following code to create a Histogram for
reporting latency, this metric under prometheus will be created as COUNTER
metric type, instead of HISTOGRAM metric type:
import org.apache.flink.api.common.functions.RichMapFunction
import org.apache.flink.api.common.typeinfo.TypeInformation
import org.apache.flink.configuration.Configuration
import org.apache.flink.dropwizard.metrics.DropwizardHistogramWrapper
import org.apache.flink.metrics.Histogram
import org.apache.flink.streaming.api.functions.ProcessFunction
import org.apache.flink.streaming.api.scala.DataStream
import org.apache.flink.util.Collector
private class ReportLatency[T](
name: String,
extractTimestampMillis: T => Long,
userScope: String = ""
)(implicit clock: Clock)
extends RichMapFunction[T, T] {
@transient private var histogram: Histogram = _
override def open(parameters: Configuration): Unit = {
val dropwizardHistogram = new com.codahale.metrics.Histogram(new
SlidingWindowReservoir(500))
val metricGroupBase = getRuntimeContext.getMetricGroup
val metricGroup = if (userScope.isEmpty) metricGroupBase else
metricGroupBase.addGroup(userScope)
histogram = metricGroup
.histogram(
name,
new DropwizardHistogramWrapper(dropwizardHistogram)
)
}
override def map(record: T): T = {
val timestamp: Long = extractTimestampMillis(record)
calculateLatencyInMillis(timestamp) match {
case Some(latency) => histogram.update(latency)
case None => logger.warn("Latency could not be calculated for timestamp {}",
timestamp)
}
record
}
}
Is this an issue from flink AbstractPrometheusReporter.java?
Regards,
--
Eddie Cheung