首页 > 解决方案 > Akka Stream 和 Kamon-Prometheus 不返回任何指标但加载一个空页面

问题描述

我尝试将 kamon-prometheus 与 akka 流项目集成,但在http://localhost:9095/它加载了一个空页面。在控制台中,我可以看到在http://localhost:9095/提供指标信息的消息。当我尝试使用 akka 快速入门项目时,它运行良好。

akka 流是否支持 kamon?

标签: prometheusakka-streamkamonakka-monitoring

解决方案


Kamon 大量使用 aspecj 来收集一些指标。请确保将 java 代理 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

添加PrometheusReporterKamon

    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 路由来对此进行测试。


推荐阅读