[[264315]] ***: Mother Earth のクラウド プロバイダーを追跡するためのカスタム Prometheus 統合を作成します。
オープンソースの監視システムPrometheusは、様々な種類の時系列データと連携できますが、連携したいデータがない場合は、簡単に構築できます。よくある例としては、クラウドプロバイダーとのカスタム連携が挙げられます。この連携では、プロバイダーのAPIを使用して特定のメトリクスを取得します。ただし、この例では、クラウドプロバイダーであるEarthと連携します。 幸いなことに、米国政府は気象観測を行い、統合用のシンプルなAPIを提供しています。Red Hat本社の1時間後の天気予報を簡単に取得できます。 -
import requests -
HOURLY_RED_HAT = "<https://api.weather.gov/gridpoints/RAH/73,57/forecast/hourly>" -
def get_temperature (): result = requests . get ( HOURLY_RED_HAT ) return result . json ()[ "properties" ][ "periods" ][ 0 ][ "temperature" ]
Earthとの統合が完了したので、Prometheusが私たちの要求を理解していることを確認しましょう。Prometheus Pythonライブラリのゲージを使って、Red Hat本社の気温をレジストリエントリとして作成します。 -
from prometheus_client import CollectorRegistry , Gauge -
def prometheus_temperature ( num ): registry = CollectorRegistry () g = Gauge ( "red_hat_temp" , "Temperature at Red Hat HQ" , registry = registry ) g . set ( num ) return registry
*** 何らかの方法で Prometheus に接続する必要があります。これは Prometheus のネットワークトポロジーに多少依存します。Prometheus が私たちのサービスと通信する方が簡単でしょうか、それともその逆でしょうか? 最初の、そして一般的に推奨されるシナリオは、可能であれば、パブリック登録ポータルを備えた Web サーバーを構築し、それをスクレイピングするように Prometheus を構成する必要があるというものです。 Pyramid を使用してシンプルな Web サーバーを構築できます。 -
from pyramid . config import Configurator -
from pyramid . response import Response -
from prometheus_client import generate_latest , CONTENT_TYPE_LATEST -
def metrics_web ( request ): registry = prometheus_temperature ( get_temperature ()) return Response ( generate_latest ( registry ), content_type = CONTENT_TYPE_LATEST )-
config = Configurator () -
config . add_route ( 'metrics' , '/metrics' ) -
config . add_view ( metrics_web , route_name = 'metrics' ) -
app = config . make_wsgi_app ()
これは任意のWeb Gateway Interface (WSGI) サーバーを使って実行できます。例えば、コードをearth.pyに配置すると、 python -m twisted web --wsgi earth.appで実行できます。 あるいは、コードが Prometheus に接続する方が簡単な場合は、定期的に Prometheus のプッシュ ゲートウェイにプッシュすることもできます。 -
import time -
from prometheus_client import push_to_gateway -
def push_temperature ( url ): while True : registry = prometheus_temperature ( get_temperature ()) push_to_gateway ( url , "temperature collector" , registry ) time . sleep ( 60 * 60 )
ここでのURLはプッシュゲートウェイのURLです。通常は:9091で終わります。 すべてを追跡できるように、カスタム Prometheus 統合を正常に構築できることを願っています。 |