HTTPサービスディスカバリの作成
Prometheusは汎用的なHTTPサービスディスカバリを提供しており、HTTPエンドポイント経由でターゲットを検出することができます。
HTTPサービスディスカバリは、サポートされているサービスディスカバリメカニズムを補完するものであり、ファイルベースのサービスディスカバリの代替となります。
ファイルベースSDとHTTP SDの比較
2つの汎用サービスディスカバリ実装を比較した表を以下に示します。
| 項目 | ファイルSD | HTTP SD |
|---|---|---|
| イベントベース | はい、inotify経由 | いいえ |
| 更新頻度 | inotifyにより即時 | refresh_intervalに従う |
| フォーマット | YamlまたはJSON | JSON |
| トランスポート | ローカルファイル | HTTP/HTTPS |
| セキュリティ | ファイルベースのセキュリティ | TLS、Basic認証、Authorizationヘッダー、OAuth2 |
HTTP SDエンドポイントの要件
HTTP SDエンドポイントを実装する場合、留意すべき要件がいくつかあります。
レスポンスは、変更されずにそのまま消費されます。リフレッシュ間隔ごと(デフォルト:1分)に、PrometheusはHTTP SDエンドポイントにGETリクエストを実行します。GETリクエストには、リフレッシュ間隔を指定するX-Prometheus-Refresh-Interval-Seconds HTTPヘッダーが含まれます。
SDエンドポイントは、HTTP 200レスポンスとContent-Type: application/json HTTPヘッダーで応答する必要があります。応答はUTF-8形式である必要があります。ターゲットを送信しない場合は、空のリスト[]とともにHTTP 200も発行する必要があります。ターゲットリストは順序付けられていません。
Prometheusはターゲットリストをキャッシュします。更新されたターゲットリストの取得中にエラーが発生した場合、Prometheusは現在のターゲットリストを使い続けます。ターゲットリストは再起動後も保存されません。prometheus_sd_http_failures_totalカウンターメトリックは、リフレッシュ失敗の回数を追跡します。
すべてのターゲットのリストは、すべてのスクレイピング時に返される必要があります。増分更新のサポートはありません。Prometheusインスタンスはホスト名を送信せず、SDリクエストが再起動後の最初のものかどうかがSDエンドポイントでわかる方法はありません。
HTTP SDのURLは機密情報とは見なされません。認証およびAPIキーは、適切な認証メカニズムとともに渡されるべきです。PrometheusはTLS認証、Basic認証、OAuth2、およびAuthorizationヘッダーをサポートしています。
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"
}
}
]