prometheus - Akka Stream 和 Kamon-Prometheus 不返回任何指标但加载一个空页面
问题描述
我尝试将 kamon-prometheus 与 akka 流项目集成,但在http://localhost:9095/它加载了一个空页面。在控制台中,我可以看到在http://localhost:9095/提供指标信息的消息。当我尝试使用 akka 快速入门项目时,它运行良好。
akka 流是否支持 kamon?
解决方案
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
添加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 路由来对此进行测试。
推荐阅读
- python - 使用带有 lambda 的 openpyxl
- mysql - 错误导入java.sql.Date;逻辑。*;javax.swing.JOptionPane; javax.swing.table.DefaultTableModel;在IGU
- java - 在 JPA @OneToOne 映射中分配列值而不是实体
- assembly - 试图弄清楚为什么会出现某个 Pokemon Red/Blue 故障。为什么程序员在这里使用 sbc 指令?
- c++ - 如果线程终止,本地指针会发生什么?
- go - 如何连接到 Google Cloud 上的 Cassandra?
- c++ - 错误:将“const S”作为“this”参数传递会丢弃限定符
- r - 计算每行的非零列数
- java - Infinispan - ISPN000476:等待请求响应超时
- javascript - 查找数组是否包含特定元素的最有效方法