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
}
}