如何使用 JSON 格式获取 Prometheus 节点导出器指标

Posted

技术标签:

【中文标题】如何使用 JSON 格式获取 Prometheus 节点导出器指标【英文标题】:How to get Prometheus Node Exporter metrics with JSON format 【发布时间】:2020-04-05 16:42:09 【问题描述】:

我在 k8s 上部署了 Prometheus Node Exporter pod。效果很好。

但是当我尝试通过在我的自定义 Go 应用程序中调用 Node Exporter 指标 API 来获取系统指标时

curl -X GET "http://[my Host]:9100/metrics"

结果格式是这样的

# TYPE go_gc_duration_seconds summary
go_gc_duration_secondsquantile="0" 1.7636e-05
go_gc_duration_secondsquantile="0.25" 2.466e-05
go_gc_duration_secondsquantile="0.5" 5.7992e-05
go_gc_duration_secondsquantile="0.75" 9.1109e-05
go_gc_duration_secondsquantile="1" 0.004852894
go_gc_duration_seconds_sum 1.291217651
go_gc_duration_seconds_count 11338
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 8
# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_infoversion="go1.12.5" 1
# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
# TYPE go_memstats_alloc_bytes gauge
go_memstats_alloc_bytes 2.577128e+06
# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
# TYPE go_memstats_alloc_bytes_total counter
go_memstats_alloc_bytes_total 2.0073577064e+10
.
.
.
something like this

那些长文本很难解析,我想得到 JSON 格式的结果以便轻松解析。

https://github.com/prometheus/node_exporter/issues/1062

我检查了 Prometheus Node Exporter GitHub 问题,有人推荐了 prom2json。 但这不是我要找的。因为我必须运行额外的进程来执行 prom2json 才能得到结果。我想通过简单地在我的代码中调用 HTTP 请求或某种 Go 原生包来获取 Node Exporter 的系统指标。

如何获取 JSON 格式的 Node Exporter 指标?

【问题讨论】:

为什么不使用prom2json 代码库作为库?据我所知,节点导出器没有这样的端点以 JSON 格式公开指标。 这是标准的 Prometheus 指标格式,所有导出器都将遵循相同的格式。我宁愿问,为什么要json格式,也就是要json格式的metrics做什么? 【参考方案1】:

您已经提到了prom2json,您可以通过导入github.com/prometheus/prom2json 将包拉入您的Go 文件中。

sample executable in the repo 拥有您需要的所有构建块。 First, open the URL 然后是 use the prom2json package to read the data 和 store the result。

但是,您还应该查看 expfmt.TextParser,因为这是获取 Prometheus 格式指标的本地方式。


【讨论】:

感谢 @Oliver 的激励(也感谢 Kamol),我通过使用 prom2json 作为代码库成功地获得了 JSON 格式的 Prometheus Node Exporter 指标。我在我的项目中提取了 prom2json 包,并为我自己的逻辑修改了一些代码。这是我没有 TLS 配置的实现。 gist.github.com/jschoi126/dc80ebc6bb8d38b917728303975cc241 由于 prom2json 在 pacakge 中使用 expfmt.TextParser,另一个答案可以使用 expfmt.TextParser.TextToMetricFamilies 将原始指标字符串解析为 JSON 格式。

以上是关于如何使用 JSON 格式获取 Prometheus 节点导出器指标的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Prometheus 中持续轮询 JSON 数据?

如何使用 Prometheus 存储 Grafana 可视化的数据

无法从 Prometheus HTTP Server 获取查询或 JSON 密钥

Prometheus 应用监控

如何获取事件总线指标 Vertx 与 Prometheus 集成

如何在 Kubernetes Dashboard 中获取 Prometheus 数据