毫秒级的 Prometheus 和 Node 导出器

Prometheus and Node exporter in milliseconds

我有一个带有 prom-client 的 node express 应用程序,用于监视串行连接并将值报告给 http 端点,串行速度为 9600baud,正在传输一些统计数据。 Prometheus 实例配置了一个 10 毫秒间隔的作业,以定位该端点并获取指标。 我希望能够以至少 10 毫秒的分辨率查看此指标,但似乎 Prometheus 图形分辨率不接受少于 1 秒的分辨率。 我应该怎么做才能让 Prometheus 收集至少 10 毫秒 res 的数据。 有没有我想念的配置? 我搜索了几个小时

这是我的节点 js 应用程序,串行端口侦听器正在等待 json 消息,解析它们并更新来自 'prom-client' 的仪表指标类型,由 express 表示!

const serialPath = '/dev/tty.usbmodem14201';
const port = new SerialPort(serialPath, {
   baudRate: 9600
});
const parser = new Readline();
port.pipe(parser);
parser.on('data', (line) => {
        try {
            const obj = JSON.parse(line);
            if (obj.command !== undefined) {
                console.log(obj);
            }

            if (obj.a) {
                obj.a.forEach((analog) => {
                    analogGuage.set({
                        pin: analog.i
                    }, analog.v);
                })
            }
        } catch (ex) {
            console.log('Exception in parsing serial json:', ex);
            console.log('Exception in parsing serial json:', line);
        }
    });

普罗米修斯每 10 毫秒调用一次的指标端点

    expressApp.get('/metrics', (req, res) => {
        const metrics = client.register.metrics();
        res.set('Content-Type', client.register.contentType);
        res.end(metrics);
    });

重要的是要提到所有这些都是针对实验性个人嵌入式系统的:)因此,除了能够在不到 10 毫秒的时间内传输和解析串行读取外,没有任何瓶颈或性能考虑因素

因为现在 Prometheus 和节点导出器应用程序 运行 在我的电脑上,所以 10 毫秒的间隔对于 Prom 来说似乎很容易。

请帮忙。

答案编辑: 所以我决定放弃 Prometheus 而不是 InfluxDB,因为这两个许可证都允许源访问并且它们促进毫秒、纳秒监控, 但为了将来参考,9600 波特也不够,但在 115200 波特率和 150 毫秒报告循环 Prom 之后仍然如此。仍然没有设法显示少于 1 秒, 所以 InfluxDB 做得很漂亮,这里有一些图片: 下面是一段 30 秒 window 的舞会。在 115200 波特

InfluxDB 中相同的 115200 波特大约 10 秒

虽然您可以将抓取间隔设置为小于一秒,但这并不是 Prometheus 的设计目的,因为那时很难进行实时监控,例如内核调度程序可能会导致 Prometheus 短暂停止 运行 并错过一些抓取,这对于更典型的抓取间隔来说不是问题。

如果您需要这么高的分辨率,我建议您查看自定义解决方案。