2017-07-13 1 views
1

私は、監視のためにPrometheusを使用してNode.jsアプリケーションを計測しています。私はすべてが集まって、私のNode.jsアプリケーションからデフォルトのメトリックを収集するように構成されているPrometheusでは、エンドポイントからJSON情報をスクラップできますか?

prom-client

と予想されるように監視が働いている:私は現在、計測のために、以下のNode.jsクライアントを使用しています。プロメテウスが私のアプリケーションが公開するエンドポイントからJSONを掻き取ることが可能かどうかを知りたい。

たとえば、Node.jsアプリケーションには、アプリケーションの全体的な健全性と依存性に関する単純なJSONデータ(ブール値または0/1)が返されるヘルスチェックエンドポイント(/ health)があります。ヘルスエンドポイントからJSONを抜き取り、その情報に基づいてメトリクスを記録するように、Prometheusおよび/またはprom-clientを設定できますか?

答えて

1

のいずれかでいくつかのゲージを公開するために、直接JSONエンドポイントの背後にある機能を呼び出すことができ、このコレクタは、ヒープサイズをフェッチ

prom-clientと私の独自のカスタムメトリックを構築します。同じことをするのに興味がある人のための例を以下に示します。のは、以下の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; 
2

私はあなたができると信じています。

blogposts私は、Prometheus Pythonクライアントを使用して、PrometheusにJSON形式のメトリックを取り込む方法について詳しく説明しました。プロメテウスは唯一彼らのテキスト形式またはGRPC 1を理解していない直接 https://www.robustperception.io/writing-json-exporters-in-python/

+1

ありがとうございました。私は同様のことをするかもしれませんが、ノードクライアントでは –

1

prom-clientにこの情報を収集させたい場合は、ライブラリの一部であるheap sizesコレクタを調べることができます。あなたは、私が使用して解決策を見つけることができた代わりに、JSONのエンドポイントをこすりまたは多分0または1

+0

私は自分の提案したようなprom-clientを使って独自のカスタムメトリックを作成しようとします。情報をありがとう。 –

+0

@JoshuaAlger - うまくいきましたか?このアンサーを受け入れることをコメントして検討してください。 – ahus1

+0

私は以下の質問に私の所見に答えました。あなたの答えは助けられましたが、最終的に私の解決策ではありませんでした –

関連する問題