0

我正在使用这个示例来让我的 NodeJs 应用程序公开 Prometheus 指标。当我访问/metrics端点时,我看不到输出。我是普罗米修斯的新手,或者一般来说是自定义指标。

这是我的尝试。

const express = require('express')
const promClient = require('prom-client')
const Registry = promClient.Registry;
const register = new Registry();

const app = express()
const port = process.env.PORT || 3000

const histogram = new promClient.Histogram({
  name: 'hello_lb:http_request_duration',
  help: 'Duration of HTTP requests in ms',
  labelNames: ['method', 'status_code'],
  buckets: [0.1, 5, 15, 50, 100, 500]
});
register.registerMetric(histogram);

app.get('/hello', (req, res) => {
  const end = histogram.startTimer();
  res.send('Hello World!')
  end({ method: req.method, 'status_code': 200 });
})

// expose our metrics at the default URL for Prometheus
app.get('/metrics', (request, response) => {
  response.set('Content-Type', promClient.register.contentType);
  response.send(promClient.register.metrics());
});

app.listen(port, () => {
  console.log(`App is up at ${port}`)
})
  1. 为什么在/metrics终点看不到很多指标?
  2. 此示例指的是 HTTP 请求持续时间(以毫秒为单位)的直方图。如何为每秒总 HTTP 请求创建指标?这篇博文似乎使用每秒的总 HTTP 请求数;但是,它没有解释指标如何从http_requests_total变为http_requests_per_second。(忽略博客中的 Kubernetes、EKS、FluxCD、自动缩放和 Go 部分。)
4

1 回答 1

0

为什么在/metrics终点看不到很多指标?

因为,register.metrics返回一个Promise应该被await编辑的。来自另一篇博文

这行得通。

// expose our metrics at the default URL for Prometheus
app.get('/metrics', (async (request, response) => {
  response.set('Content-Type', promClient.register.contentType);
  response.send(await promClient.register.metrics());
}));

指标如何从http_requests_total变为http_requests_per_second

这是本教程的提示。

安装 Prometheus 适配器并将其配置为将来自 Prometheus 的指标转换为每秒请求率(使用 PromQL)并通过自定义指标 API 将该指标公开为 myapp_requests_per_second

于 2022-01-16T06:22:24.093 回答