Exporting Custom Metrics and MicroMeter metrics to promethus

24 views
Skip to first unread message

Bhanu marwaha

unread,
Oct 5, 2020, 1:13:39 PM10/5/20
to Prometheus Users
Hi
override def run(): Unit = {




logger.info("Starting off Metric Server")
new ClassLoaderMetrics().bindTo(prometheusRegistry)
new JvmMemoryMetrics().bindTo(prometheusRegistry)
new JvmGcMetrics().bindTo(prometheusRegistry)
new ProcessorMetrics().bindTo(prometheusRegistry)
new JvmThreadMetrics().bindTo(prometheusRegistry)
//new Log4j2Metrics().bindTo(prometheusRegistry)
new LogbackMetrics().bindTo(prometheusRegistry)
new ProcessorMetrics().bindTo(prometheusRegistry)
val compositeMeterRegistry = new CompositeMeterRegistry()

try {
val server: HttpServer = HttpServer.create(new InetSocketAddress(8090), 0)

server.createContext("/prometheus", new HttpHandler {
def handle(httpExchange: HttpExchange) {
val response = prometheusRegistry.scrape()
httpExchange.sendResponseHeaders(200, response.getBytes().length)
val os = httpExchange.getResponseBody
os.write(response.getBytes())
os.close()

}

})

server.start()
} catch {
case e: IOException =>
logger.error("Exception while starting server ", e)
throw new RuntimeException(e)
}
}

Above piece initializes server for me and pushes jvm metrics to my promethus.it works fine.


Now I also want to push custom application metrics  such as counter and histograms.

How can I do that. I wrote below code and when I am using this inside my application for e.g doing

failureCounter.inc (); Metrics is not getting reflected in Graffans.I read some where that I have to register my counters and histograms to registry since I am not using default registry.

Was wondering if someone has already done something similar
object AppMetricInitializer {

val env: StringBuilder = new StringBuilder(AppConfig.getEnv)
val topologyServiceRead = Histogram.build.namespace("road_topology_service_reader" +"_"+ env).name("topodatareader").help("Read Data").buckets(1.0, 2.0, 3.0, 4.0).register
val topologyServiceChangeDetect = Histogram.build.namespace("road_topology_service_changedetect" +"_"+ env).name("changedetect").buckets(0.5, 1.0, 1.5, 3.0).help("Change Detect").register
val topologyServiceWriter = Histogram.build.namespace("road_topology_service_writer" +"_"+ env).buckets(0.5, 1.0, 1.5, 2.0).name("WriteData").help("Topology Service Writer").register
val counterEvent = Counter.build.namespace("road_topology_service_eventCounter" +"_"+ env).name("totalEventProcessedcounter").help("EventCounter").register
val failureCounter = Counter.build.namespace("road_topology_service_failure_eventCounter" +"_"+ env).
name("totalEventFailureCounter").help("Failure Event Counter").register
val totalFeatureProcessedCounter = Counter.build.namespace("road_topology_service_feature_processedCounter" +"_"+ env).
name("totalFeatureProcessedCounter").help("Total Feature Processed Counter").register

def getReadMetricator():Histogram={
topologyServiceRead
}
def getWriteMetricator():Histogram={
topologyServiceWriter
}
def getChangeDetectorMetricator():Histogram={
topologyServiceChangeDetect
}
def getEventCounter():Counter={
counterEvent
}
def getFailureEventCounter():Counter={
failureCounter
}

def getFeatureProcessedCounter:Counter={
totalFeatureProcessedCounter
}

}

Reply all
Reply to author
Forward
0 new messages