查询通过 prometheus 节点导出器文本文件收集器公开的自定义指标失败

Posted

技术标签:

【中文标题】查询通过 prometheus 节点导出器文本文件收集器公开的自定义指标失败【英文标题】:Query on custom metrics exposed via prometheus node exporter textfile collector fails 【发布时间】:2018-11-19 02:13:57 【问题描述】:

我是 prometheus/alertmanager 的新手。

我创建了一个每分钟执行一次 shell 脚本的 cron 作业。这个 shell 脚本在分配给--textfile.collector.directory 参数(给节点导出器)的同一目录中生成“test.prom”文件(其中包含一个仪表度量)。我验证了(使用 curl http://localhost:9100/metrics)节点导出器正确地公开了该自定义指标。

当我尝试在 prometheus 仪表板中针对该自定义指标运行查询时,它没有显示任何结果(它说没有找到数据)。

我无法弄清楚为什么针对通过节点导出器文本文件收集器公开的指标的查询失败。 我错过了什么线索?另外请告诉我如何检查并确保普罗米修斯抓取了我的自定义指标“test_metric”?

我在普罗米修斯仪表板中的查询是test_metric != 0(在普罗米修斯仪表板中),但没有给出任何结果。但是我通过 node-exporter 文本文件暴露了test_metric

感谢任何帮助!

顺便说一句,node-exporter 在 Kubernetes 环境中作为 docker 容器运行。

【问题讨论】:

冷你添加更多细节:日志和yamls? 参数为--collector.textfile.directory="" 【参考方案1】:

我也遇到过类似情况,不过不是配置问题。

相反,我的数据包含时间戳

# HELP network_connectivity_rtt Round Trip Time to each node
# TYPE network_connectivity_rtt gauge
network_connectivity_rtthost="home" 53.87 1541426242
network_connectivity_rtthost="hop_1" 58.8 1541426242
network_connectivity_rtthost="hop_2" 21.93 1541426242
network_connectivity_rtthost="hop_3" 71.69 1541426242

一旦我重新加载它,PNE 就会毫无问题地拿起它们。由于 prometheus 在 systemd 下运行,我不得不像这样检查日志:

journalctl --system -u prometheus.service --follow

我读到了这一行:

msg="Error on ingesting samples that are too old or are too far into the future"

删除时间戳后,值开始出现。这使我更详细地阅读了有关时间戳的信息,我发现它们必须以 毫秒 为单位。所以这个格式现在可以了:

# HELP network_connectivity_rtt Round Trip Time to each node
# TYPE network_connectivity_rtt gauge
network_connectivity_rtthost="home" 50.47 1541429581376
network_connectivity_rtthost="hop_1" 3.38 1541429581376
network_connectivity_rtthost="hop_2" 11.2 1541429581376
network_connectivity_rtthost="hop_3" 20.72 1541429581376

我希望它可以帮助别人。

【讨论】:

【参考方案2】:

这是我的错。我没有在 prometheus.yaml 文件中包含 node-exporter 的抓取指令。包含它们后它起作用了。

【讨论】:

【参考方案3】:

出现此问题是因为指标过时。 假设您已在 13.00 的文件中写入指标 默认情况下,普罗米修斯会在 5 分钟后认为您的指标过时,并且在您进行查询时它可能会从那里消失。

【讨论】:

以上是关于查询通过 prometheus 节点导出器文本文件收集器公开的自定义指标失败的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 prometheus 节点导出器提取正在运行的进程?

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

Kube-Prometheus-Stack 和保护外部节点导出器

如何在已经存在的 docker 容器上安装 Prometheus 节点导出器?

未完成的节点导出器盒的Prometheus错误在哪里?

了解用于内存空闲的普罗米修斯查询(节点导出器)