Akka Stream & Kamon-Prometheus не возвращает метрик, но загружает пустую страницу - PullRequest
0 голосов
/ 07 января 2019

Я пытался интегрировать kamon-prometheus с проектом потока akka, но на http://localhost:9095/ он загружает пустую страницу. В консоли я мог видеть сообщение о том, что информация о метриках доступна на http://localhost:9095/. Когда я попробовал с проектом akka quickstart, он работал нормально.

Поддерживается ли kamon для потоков akka?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Я пытался запустить Main из Intellij, и по этой причине я не получил метрики. С предложением @Ivan Stanislavciuc я попытался sbt run, и это сработало.

0 голосов
/ 07 января 2019

Камон активно использует 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-маршрут.

...