Akka Stream & Kamon-Prometheus не возвращает метрик, но загружает пустую страницу
Я попытался интегрировать kamon-prometheus с проектом потока akka, но по адресу http://localhost:9095/ он загружает пустую страницу. В консоли я увидел сообщение о том, что информация о метриках доступна по адресу http://localhost:9095/. Когда я попробовал с проектом akka quickstart, он работал нормально.
Поддерживается ли kamon для потоков akka?
2 ответа
Я пытался запустить Main из Intellij, и именно поэтому я не получил метрики. С предложением @Ivan Stanislavciuc я попытался sbt run
и это сработало.
Камон активно использует 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-маршрут, например.