我正在使用Prometheus来检测Node.js应用程序以进行监视。我当前正在使用以下 Node.js 客户端进行检测:
舞会客户端
我已经配置了所有内容以从我的 Node.js 应用程序收集和收集默认指标,并且监控按预期工作。我想知道普罗米修斯是否有可能从我的应用程序公开的端点中抓取 JSON。
例如,Node.js 应用程序有一个运行状况检查终结点 (/health(,该终结点返回有关应用程序整体运行状况及其依赖项的简单 JSON 数据(布尔值或 0/1(。我是否可以将 Prometheus 和/或 prom 客户端配置为从运行状况终结点中抓取 JSON,然后根据该信息记录指标?
我相信你可以。
我在下面链接的博客文章详细介绍了如何使用Prometheus Python客户端将JSON格式的指标摄取到Prometheus中。
https://www.robustperception.io/writing-a-jenkins-exporter-in-python/https://www.robustperception.io/writing-json-exporters-in-python/
我能够使用 prom 客户端找到解决方案并构建自己的自定义指标。将在下面为可能有兴趣这样做的任何人提供一个例子。假设有一个运行状况检查终结点返回以下 JSON:
{
"app": {
"message": "Service is up and running!",
"success": true
}
}
我使用包请求调用终端节点,解析数据并创建一个仪表以反映基于运行状况检查状态的值。下面是 JavaScript 中/metrics 端点的示例:
const express = require('express');
const router = express.Router();
const request = require('request');
// Config for health check endpoint
const healthCheckURL = 'https://SOME_ENDPOINT/health';
const zone = 'DEV';
// Initialize Prometheus
const Prometheus = require('prom-client');
const collectDefaultMetrics = Prometheus.collectDefaultMetrics;
collectDefaultMetrics({
timeout: 5000
});
router.get('/', (req, res) => {
res.end(Prometheus.register.metrics());
});
const serviceHealthGauge = new Prometheus.Gauge({
name: 'service_health',
help: 'Health of service component',
labelNames: ['zone']
});
setInterval(() => {
request({
url: healthCheckURL,
method: "GET",
},
function(error, response, body) {
if (!error && response.statusCode == 200) {
const JSONBody = JSON.parse(body);
// check service health
if (JSONBody.app && JSONBody.app.success) {
serviceHealthGauge.set({
zone: zone
}, 1);
} else {
serviceHealthGauge.set({
zone: zone
}, 0);
}
} else {
serviceHealthGauge.set({
zone: zone
}, 0);
}
}
);
}, 10000);
module.exports.metricNames = ['service_health'];
module.exports = router;
不是直接的,因为普罗米修斯只理解他们的文本格式或GRPC格式。见 https://prometheus.io/docs/instrumenting/exposition_formats/
或者当然,可以编写一个翻译"桥"或导出器,以这种格式翻译JSON结构,就像他的答案中描述@ConorB的那样。
如果你想让 prom 客户端收集这些信息,你可以看看作为库一部分的堆大小收集器。
在此收集器获取堆大小的地方,您可以改为抓取 JSON 终结点,或者直接调用 JSON 终结点后面的功能来发布一些 0 或 1 的仪表。
现在可以使用黑盒导出器:https://github.com/prometheus/blackbox_exporter。
这是普罗米修斯/格拉法纳/黑盒的分步指南 - https://medium.com/the-telegraph-engineering/how-prometheus-and-the-blackbox-exporter-makes-monitoring-microservice-endpoints-easy-and-free-of-a986078912ee。