如何使用 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 存储 Grafana 可视化的数据
无法从 Prometheus HTTP Server 获取查询或 JSON 密钥