HTTPサービスディスカバリの記述
Prometheusは、HTTPエンドポイントを介してターゲットを検出できる汎用HTTPサービスディスカバリを提供します。
HTTPサービスディスカバリは、サポートされているサービスディスカバリメカニズムを補完し、ファイルベースのサービスディスカバリの代替となります。
ファイルベースSDとHTTP SDの比較
ここでは、2つの汎用サービスディスカバリ実装を比較した表を示します。
項目 | ファイルSD | HTTP SD |
---|---|---|
イベントベース | はい、inotify経由 | いいえ |
更新頻度 | inotifyのおかげで即時 | リフレッシュ間隔に従う |
形式 | 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 200応答をHTTPヘッダー`Content-Type: application/json`で応答する必要があります。応答は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"
}
}
]