Камон активно использует aspecj для сбора некоторых метрик. Пожалуйста, убедитесь, что java agent aspectj-weaver добавлен к загрузке вашей JVM. См. Различные варианты в этой документации .
Вам также нужно добавить зависимости к build.sbt
libraryDependencies += "io.kamon" %% "kamon-core" % "1.1.0""
libraryDependencies += "io.kamon" %% "kamon-prometheus" % "1.0.0"
Отключить встроенный сервер в kamon-prometheus
, изменив этот ключ настройки в файле application.conf
.
kamon.prometheus.start-embedded-http-server = no
Добавить PrometheusReporter
к Kamon
import kamon.Kamon
import kamon.prometheus.PrometheusReporter
private val reporter = new PrometheusReporter()
private val registry = Kamon.addReporter(reporter)
И обслуживать результаты метрик с помощью akka-http
, определяя маршрут и получая данные из reporter.scrapeData()
.
val metrics = path("metrics") {
encodeResponse {
val prometheusContentType: ContentType.NonBinary = {
ContentType.parse("text/plain; version=0.0.4; charset=utf-8").right.get.asInstanceOf[ContentType.NonBinary]
}
Kamon.gauge("metrics_called").increment()
complete(
HttpResponse(
status = StatusCodes.OK,
entity = HttpEntity(prometheusContentType, reporter.scrapeData())
)
)
}
}
Или обслуживать метрики для любого входящего http-запроса с кодом
akka.http.scaladsl
.Http(actorSystem)
.bindAndHandleSync(
_ => {
Kamon.gauge("metrics_called").increment()
HttpResponse(
status = StatusCodes.OK,
entity = HttpEntity(prometheusContentType, reporter.scrapeData())
)
},
"0.0.0.0",
9015
)
В случае, если вы получаете пустую страницу, убедитесь, что Kamon
собирает некоторые показатели в системе. Вы можете проверить это, например, добавив Kamon.gauge("metrics_called").increment()
в http-маршрут.