このトピックでは、Managed Service for Prometheus が提供する Pushgateway 機能を使用してメトリックデータをプッシュする方法について説明します。
概要
Prometheus サーバーがデータソースから定期的にデータをプルできない場合 (たとえば、安定したネットワーク接続が利用できない環境の場合)、Pushgateway を使用してデータをプッシュできます。メトリックデータがデータソースから Pushgateway に送信されると、Prometheus サーバーは定期的にメトリックデータを取得します。これを実装するには、次の手順を実行します。
Pushgateway エンドポイントを取得する: Managed Service for Prometheus コンソールで Pushgateway エンドポイントを取得します。
データをレポートする: curl コマンドを実行するか、オープンソースの Pushgateway SDK を使用してメトリックデータをプッシュできます。これにより、Managed Service for Prometheus によってメトリックデータがタイムリーかつ確実に収集および監視されるようになります。
データ保護を設定する (オプション): 標準の Pushgateway プロトコルには、データ保護に関連するコンテンツは含まれていません。 Pushgateway SDK は基本認証のみを提供し、より高度で一般的な認証は提供しません。つまり、Pushgateway エンドポイントを取得すれば、どのクライアントでもデータをプッシュできます。データセキュリティを確保するために、Managed Service for Prometheus コンソールでトークンを取得して、標準の JSON Web トークン (JWT) 認証プロトコルを実装できます。
前提条件
Prometheus インスタンスが作成されていること。詳細については、以下のトピックを参照してください。
手順 1: Pushgateway エンドポイントを取得する
Prometheus インスタンスの詳細ページに移動します。 Managed Service for Prometheus コンソール にログインします。 左側のナビゲーションペインで、インスタンス をクリックします。 管理する Prometheus インスタンス の名前をクリックします。
Pushgateway エンドポイントを取得する: 左側のナビゲーションペインで、設定 をクリックします。設定 タブの Push Gateway URL セクションで、パブリック URL を取得します。
手順 2: データをレポートする
オープンソースの Pushgateway SDK を使用してメトリックデータをプッシュする
Text Format と Protobuf Delimited の仕様のみがサポートされています。 Protobuf Text、Protobuf Compact Text、および OpenMetrics の仕様はサポートされていません。デフォルトでは、Pushgateway SDK は Protobuf Delimited で使用されます。
メタデータの Helps フィールドは、中国語の文字をサポートしていません。中国語の文字が渡されると、データレポートは失敗します。
このトピックでは、Go 用 Pushgateway SDK と Java 用 Pushgateway SDK を使用してメトリックデータをプッシュする方法について説明します。
Go 用 Pushgateway SDK:
completionTime := prometheus.NewGauge(prometheus.GaugeOpts{
Name: "db_backup_last_completion_timestamp_seconds",
Help: "The timestamp of the last successful completion of a DB backup.", // DBバックアップの最後の正常完了のタイムスタンプ。
})
completionTime.SetToCurrentTime()
url : = "https://cn-hangzhou.arms.aliyuncs.com/prometheus/52b12ea9cf4bb9e35****/16727530178****/1df8lj***/cn-hangzhou/api/v2"
pusher := push.New(url, "test").
Collector(completionTime).Client(http.DefaultClient).
Grouping("key1", "test1").Grouping("key2", "dfdf/sdsd/").
Format(expfmt.FmtProtoDelim)
if err := pusher.Push(); err != nil {
fmt.Println("Could not push completion time to PushGateway: ", err) // 完了時間を PushGateway にプッシュできませんでした:
}
Java 用 Pushgateway SDK:
CollectorRegistry registry = new CollectorRegistry();
Gauge duration = Gauge.build()
.name("my_batch_job_duration_seconds").help("Duration of my batch job in seconds.").register(registry); // バッチジョブの秒単位の継続時間。
Gauge.Timer durationTimer = duration.startTimer();
try {
// Your code here.
// これは、成功後にのみレジストリに追加されるため、
// Pushgateway での以前の成功が失敗時に上書きされることはありません。
Gauge lastSuccess = Gauge.build()
.name("my_batch_job_last_success").help("Last time my batch job succeeded, in unixtime.").register(registry); // バッチジョブが最後に成功した時刻 (unixtime)。
lastSuccess.setToCurrentTime();
} finally {
durationTimer.setDuration();
PushGateway pg = new PushGateway(new URL("https://cn-hangzhou.arms.aliyuncs.com/prometheus/52b12ea9cf4bb9e35****/16727530178****/1df8lj***/cn-hangzhou/api/v2"));
pg.pushAdd(registry, "my_batch_job");
}
オープンソースの Pushgateway SDK を使用する場合、Managed Service for Prometheus コンソールから取得した Pushgateway エンドポイントを入力します。システムは自動的に
/metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}
のようなサフィックスを作成します。オープンソースの Pushgateway SDK を使用していない場合は、手動でサフィックスを作成する必要があります。そうしないと、404 エラーが返されます。複数のテナントで共有され、Managed Service for Prometheus によって監視されるクラスタにメトリックデータをプッシュする必要がある場合は、
tenant_userid=****
タグをメトリクスに添付します。タグ値は、メトリクス間の関係を区別するために使用されます。タグ値は、メトリクスが属する Alibaba Cloud アカウントの ID に設定します。
curl コマンドを実行してメトリックデータをプッシュする
application/x-www-form-urlencoded
タイプのリクエストはサポートされていません。 curl コマンドでは、Content-Type: text/plain; version=0.0.4; charset=utf-8
を指定するヘッダーを追加する必要があります。
echo "some_metric 3.14" | curl -H "Content-Type: text/plain; version=0.0.4; charset=utf-8" --data-binary @- https://cn-hangzhou.arms.aliyuncs.com/prometheus/51bbea9ck41b9e35****/16727530178****/1df8lj***/cn-hangzhou/api/v2/metrics/label_key_1/label_value_1/label_key_2/label_value_2
URL の末尾に複数のラベルを追加できますが、URL の全長に注意する必要があります。
手順 3: データ保護を設定する (オプション)
トークンを取得する: 左側のナビゲーションペインで、設定 をクリックします。設定 タブの トークン セクションで、トークンの生成 をクリックします。
トークンを渡す: トークンが生成されると、トークンの値を表示できます。次のいずれかの方法を使用してトークンを渡すことができます。
方法 1: クライアントリクエストの要求ヘッダーにトークンを追加します。その後、メトリックデータをプッシュできます。そうしないと、システムはデータの書き込みを拒否します。次の図は、クライアントリクエストの要求ヘッダーにトークンを追加する方法を示しています。
方法 2: Pushgateway SDK は基本認証のみをサポートし、JWT 認証はサポートしていません。 Pushgateway SDK を使用し、同時に高度な認証を実装する場合は、BasicAuth インターフェースを使用し、Password フィールドを Token に設定できます。サービス側は認証方法と互換性があります。方法 1 は開発コストを増加させる可能性があります。この例では、Go 用 Pushgateway SDK を使用しています。
pusher := push.New(url, "test"). Collector(completionTime).Client(http.DefaultClient). Grouping("key1", "test1").Grouping("key2", "dfdf/sdsd/"). .BasicAuth("admin", "Token value"). // トークン値 Format(expfmt.FmtProtoDelim)
結果を確認する
Grafana を使用して、メトリックデータがプッシュされているかどうかを確認できます。
ApiServer ダッシュボードに移動する: 左側のナビゲーションペインで、ダッシュボード をクリックします。ダッシュボードページで、ApiServer をクリックします。
Explore ページでデータを表示する: 左側のナビゲーションペインで、 アイコン (図の 1) にポインタを移動し、Explore をクリックします。Explore ページで、Explore ドロップダウンリスト (図の 2) からリソースを選択して、メトリックデータがプッシュされているかどうかを確認します。