HTTPサービスディスカバリの作成

Prometheusは、HTTPエンドポイントを介してターゲットを検出できるようにする一般的なHTTPサービスディスカバリを提供します。

HTTPサービスディスカバリは、サポートされているサービスディスカバリメカニズムを補完するものであり、ファイルベースのサービスディスカバリの代替手段です。

ファイルベースのSDとHTTP SDの比較

2つの一般的なサービスディスカバリ実装を比較した表を以下に示します。

項目 ファイルSD HTTP SD
イベントベース はい、inotifyを介して いいえ
更新頻度 inotifyのおかげで瞬時 refresh_intervalに従って
フォーマット YAMLまたはJSON JSON
トランスポート ローカルファイル HTTP/HTTPS
セキュリティ ファイルベースのセキュリティ TLS、基本認証、承認ヘッダー、OAuth2

HTTP SDエンドポイントの要件

HTTP SDエンドポイントを実装する場合は、いくつかの要件に注意する必要があります。

レスポンスは変更されずにそのまま消費されます。各更新間隔(デフォルト:1分)で、PrometheusはHTTP SDエンドポイントにGETリクエストを実行します。GETリクエストには、更新間隔を含むX-Prometheus-Refresh-Interval-Seconds HTTPヘッダーが含まれています。

SDエンドポイントは、HTTPヘッダーContent-Type: application/jsonでHTTP 200レスポンスで応答する必要があります。応答はUTF-8形式である必要があります。ターゲットを送信する必要がない場合も、空のリスト[]でHTTP 200を発行する必要があります。ターゲットリストは順序付けられていません。

Prometheusはターゲットリストをキャッシュします。更新されたターゲットリストの取得中にエラーが発生した場合、Prometheusは現在のターゲットリストを引き続き使用します。ターゲットリストは再起動後も保存されません。prometheus_sd_http_failures_totalカウンタメトリックは、更新失敗の数を追跡します。

すべてのターゲットの完全なリストを毎回スクレイプで返す必要があります。増分更新はサポートされていません。Prometheusインスタンスはホスト名を送信せず、SDリクエストが再起動後の最初のリクエストかどうかをSDエンドポイントが知ることはできません。

HTTP SDへのURLは秘密情報とは見なされません。認証とAPIキーは、適切な認証メカニズムで渡す必要があります。Prometheusは、TLS認証、基本認証、OAuth2、承認ヘッダーをサポートしています。

HTTP_SD形式

[
  {
    "targets": [ "<host>", ... ],
    "labels": {
      "<labelname>": "<labelvalue>", ...
    }
  },
  ...
]

[
    {
        "targets": ["10.0.10.2:9100", "10.0.10.3:9100", "10.0.10.4:9100", "10.0.10.5:9100"],
        "labels": {
            "__meta_datacenter": "london",
            "__meta_prometheus_job": "node"
        }
    },
    {
        "targets": ["10.0.40.2:9100", "10.0.40.3:9100"],
        "labels": {
            "__meta_datacenter": "london",
            "__meta_prometheus_job": "alertmanager"
        }
    },
    {
        "targets": ["10.0.40.2:9093", "10.0.40.3:9093"],
        "labels": {
            "__meta_datacenter": "newyork",
            "__meta_prometheus_job": "alertmanager"
        }
    }
]

このドキュメントはオープンソースです。問題点を報告するか、プルリクエストを送信して改善にご協力ください。