DUICUO

PythonとPrometheusを使った天気の追跡

[[264315]]

***: Mother Earth のクラウド プロバイダーを追跡するためのカスタム Prometheus 統合を作成します。

オープンソースの監視システムPrometheusは、様々な種類の時系列データと連携できますが、連携したいデータがない場合は、簡単に構築できます。よくある例としては、クラウドプロバイダーとのカスタム連携が挙げられます。この連携では、プロバイダーのAPIを使用して特定のメトリクスを取得します。ただし、この例では、クラウドプロバイダーであるEarthと連携します。

幸いなことに、米国政府は気象観測を行い、統合用のシンプルなAPIを提供しています。Red Hat本社の1時間後の天気予報を簡単に取得できます。

  1. import requests
  2. HOURLY_RED_HAT = "<https://api.weather.gov/gridpoints/RAH/73,57/forecast/hourly>"
  3. def get_temperature ():
  4. result = requests . get ( HOURLY_RED_HAT )
  5. return result . json ()[ "properties" ][ "periods" ][ 0 ][ "temperature" ]

Earthとの統合が完了したので、Prometheusが私たちの要求を理解していることを確認しましょう。Prometheus Pythonライブラリのゲージを使って、Red Hat本社の気温をレジストリエントリとして作成します。

  1. from prometheus_client import CollectorRegistry , Gauge
  2. def prometheus_temperature ( num ):
  3. registry = CollectorRegistry ()
  4. g = Gauge ( "red_hat_temp" , "Temperature at Red Hat HQ" , registry = registry )
  5. g . set ( num )
  6. return registry

*** 何らかの方法で Prometheus に接続する必要があります。これは Prometheus のネットワークトポロジーに多少依存します。Prometheus が私たちのサービスと通信する方が簡単でしょうか、それともその逆でしょうか?

最初の、そして一般的に推奨されるシナリオは、可能であれば、パブリック登録ポータルを備えた Web サーバーを構築し、それをスクレイピングするように Prometheus を構成する必要があるというものです。

Pyramid を使用してシンプルな Web サーバーを構築できます。

  1. from pyramid . config import Configurator
  2. from pyramid . response import Response
  3. from prometheus_client import generate_latest , CONTENT_TYPE_LATEST
  4. def metrics_web ( request ):
  5. registry = prometheus_temperature ( get_temperature ())
  6. return Response ( generate_latest ( registry ),
  7. content_type = CONTENT_TYPE_LATEST )
  8. config = Configurator ()
  9. config . add_route ( 'metrics' , '/metrics' )
  10. config . add_view ( metrics_web , route_name = 'metrics' )
  11. app = config . make_wsgi_app ()

これは任意のWeb Gateway Interface (WSGI) サーバーを使って実行できます。例えば、コードをearth.pyに配置すると、 python -m twisted web --wsgi earth.appで実行できます。

あるいは、コードが Prometheus に接続する方が簡単な場合は、定期的に Prometheus のプッシュ ゲートウェイにプッシュすることもできます。

  1. import time
  2. from prometheus_client import push_to_gateway
  3. def push_temperature ( url ):
  4. while True :
  5. registry = prometheus_temperature ( get_temperature ())
  6. push_to_gateway ( url , "temperature collector" , registry )
  7. time . sleep ( 60 * 60 )

ここでのURLはプッシュゲートウェイのURLです。通常は:9091で終わります。

すべてを追跡できるように、カスタム Prometheus 統合を正常に構築できることを願っています。