私はPrometheusを使用して、監視用のNode.jsアプリケーションをインスツルメントしています。現在、計装に次のNode.jsクライアントを使用しています。
Node.jsアプリケーションからデフォルトのメトリックを収集および収集するようにすべてを構成し、監視は期待どおりに機能しています。アプリケーションが公開するエンドポイントからPrometheusがJSONをスクレイピングできるかどうか知りたいのですが。
たとえば、Node.jsアプリケーションにはヘルスチェックエンドポイント(/ health)があり、アプリケーションの全体的なヘルスと依存関係に関する単純なJSONデータ(ブール値または0/1)を返します。ヘルスエンドポイントからJSONを取得し、その情報に基づいてメトリックを記録するようにPrometheusやprom-clientを構成できますか?
prom-client を使用してソリューションを見つけ、独自のカスタム指標を作成することができました。同じことをしたい人のために以下の例を提供します。次のJSONを返すヘルスチェックエンドポイントがあるとします。
{
"app": {
"message": "Service is up and running!",
"success": true
}
}
パッケージrequestを使用してエンドポイントを呼び出し、データを解析して、ヘルスチェックステータスに基づいて値を反映するゲージを作成しました。以下は、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;
できると思います。
以下でリンクしているブログ投稿では、Prometheus Python clientを使用してJSON形式のメトリックをPrometheusに取り込むためにこれを行う方法を詳しく説明しています。
https://www.robustperception.io/writing-a-jenkins-exporter-in-python/https://www.robustperception.io/writing-json-exporters-in -python /
Prom-clientにこの情報を収集させたい場合は、ライブラリの一部である ヒープサイズ コレクターを確認できます。
このコレクターがヒープサイズをフェッチする場所では、代わりにJSONエンドポイントをスクレイピングするか、JSONエンドポイントの背後にある機能を直接呼び出して、0または1のゲージを公開することができます。
Prometheusはテキスト形式またはGRPC形式のみを理解するため、直接ではありません。参照 https://prometheus.io/docs/instrumenting/exposition_formats/
またはもちろん、彼の回答で説明されている@ConorBのように、JSON構造をその形式で変換する翻訳「ブリッジ」またはエクスポーターを作成することもできます。
ブラックボックスエクスポーターでこれが可能になりました: 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 。