Kamon 大量使用 aspecj 来收集一些指标。请确保java代理aspectj-weaver已添加到您的JVM的启动中。在此查看不同的选项文档 https://kamon.io/docs/v1/guides/setting-up-the-agent/.
您还需要添加依赖项build.sbt
libraryDependencies += "io.kamon" %% "kamon-core" % "1.1.0"
libraryDependencies += "io.kamon" %% "kamon-prometheus" % "1.0.0"
禁用内置服务器kamon-prometheus
通过更改此设置键application.conf
file.
kamon.prometheus.start-embedded-http-server = no
Add PrometheusReporter
to 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 路由。