このトピックでは、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 Token (JWT) 認証プロトコルを実装できます。
前提条件
Prometheus インスタンスが作成されていること。詳細については、次のトピックをご参照ください:
ステップ 1: Pushgateway エンドポイントの取得
Cloud Monitor コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。[インスタンス] ページが表示されます。
インスタンスリストの上部で、Prometheus インスタンスが存在するリージョンを選択します。インスタンスの [アクション] 列にある [設定] をクリックします。
[設定] タブで、[Pushgateway URL] セクションのパブリック URL を取得します。

ステップ 2: データのレポート
Prometheus V1
オープンソースの Pushgateway SDK を使用してメトリックデータをプッシュする
Text Format および Protobuf Delimited 仕様のみがサポートされています。Protobuf Text、Protobuf Compact Text、および OpenMetrics 仕様はサポートされていません。デフォルトでは、Pushgateway SDK は Protobuf Delimited とともに使用されます。
メタデータの
Helpフィールドは中国語の文字をサポートしていません。中国語の文字が渡されると、データレポートは失敗します。
このトピックでは、Pushgateway SDK for Go と Pushgateway SDK for Java を使用してメトリックデータをプッシュする方法について説明します。
Pushgateway SDK for Go:
completionTime := prometheus.NewGauge(prometheus.GaugeOpts{
Name: "db_backup_last_completion_timestamp_seconds",
Help: "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 SDK for Java:
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 {
// ここにコードを記述します。
// これは成功後にのみレジストリに追加されます。
// これにより、Pushgateway での以前の成功が失敗時に上書きされるのを防ぎます。
Gauge lastSuccess = Gauge.build()
.name("my_batch_job_last_success").help("Last time my batch job succeeded, in unixtime.").register(registry);
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/job/job_name/label_key_1/label_value_1/label_key_2/label_value_2URL の末尾に複数のラベルを追加できますが、URL の全体の長さに注意する必要があります。
URL の
job_nameを実際のジョブ名に置き換えます。
データ保護の設定 (オプション)
トークンの取得: 左側のナビゲーションウィンドウで、[設定] をクリックします。[設定] タブで、[トークン] セクションの [トークンの生成] をクリックします。

トークンの受け渡し: トークンが生成された後、トークンの値を確認できます。次のいずれかのメソッドを使用してトークンを渡すことができます:
メソッド 1: トークンをクライアントリクエストのリクエストヘッダーに追加します。その後、メトリックデータをプッシュできます。そうしないと、システムはデータの書き込みを拒否します。次の図は、トークンをクライアントリクエストのリクエストヘッダーに追加する方法を示しています。

メソッド 2: Pushgateway SDK は基本的な認証のみをサポートし、JWT 認証はサポートしていません。Pushgateway SDK を使用し、同時に高度な認証を実装したい場合は、BasicAuth インターフェイスを使用し、Password フィールドにトークン値を設定できます。サービス側はこの認証方式と互換性があります。メソッド 1 は開発コストを増加させる可能性があります。この例では、Pushgateway SDK for Go を使用します。
pusher := push.New(url, "test"). Collector(completionTime).Client(http.DefaultClient). Grouping("key1", "test1").Grouping("key2", "dfdf/sdsd/"). .BasicAuth("admin", "Token value"). Format(expfmt.FmtProtoDelim)
Prometheus V2
1. RAM ユーザーに Cloud Monitor の読み取りおよび書き込み権限を付与する
Prometheus インスタンスが Alibaba Cloud アカウントを使用して作成され、Resource Access Management (RAM) ユーザーの AccessKey ID と AccessKey シークレットを使用してリモートの読み取りおよび書き込み操作を実行したい場合は、まず RAM ユーザーに Cloud Monitor の読み取りおよび書き込み権限を付与する必要があります。
RAM 管理者または Alibaba Cloud アカウントとして RAM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
[権限] ページで、[権限を付与] をクリックします。表示されるパネルで、次の表にリストされているパラメーターを設定します。
パラメーター
説明
リソース範囲
ビジネス要件に基づいてこのパラメーターを設定します。
プリンシパル
RAM ユーザー。
ポリシー
AliyunPrometheusMetricWriteAccess または AliyunCloudMonitorFullAccess を選択します。
[権限を付与] をクリックし、[閉じる] をクリックします。
2. データをプッシュする
オープンソースの Pushgateway SDK を使用してメトリックデータをプッシュする
Text Format および Protobuf Delimited 仕様のみがサポートされています。Protobuf Text、Protobuf Compact Text、および OpenMetrics 仕様はサポートされていません。デフォルトでは、Pushgateway SDK は Protobuf Delimited とともに使用されます。
メタデータの
Helpフィールドは中国語の文字をサポートしていません。中国語の文字が渡されると、データレポートは失敗します。
このトピックでは、Pushgateway SDK for Go と Pushgateway SDK for Java を使用してメトリックデータをプッシュする方法について説明します。
Pushgateway SDK for Go:
completionTime := prometheus.NewGauge(prometheus.GaugeOpts{
Name: "db_backup_last_completion_timestamp_seconds",
Help: "DB バックアップが最後に正常に完了したときのタイムスタンプ。",
})
completionTime.SetToCurrentTime()
url : = "https://k8s-log-c8b5d0a212ffa41cxxxx.cn-hangzhou.log.aliyuncs.com/prometheus/k8s-log-c8b5d0a212ffa41c0a5xxxx/aliyun-prom-c8b5d0a212ffa41c0xxxx/api/v1/pushgateway"
pusher := push.New(url, "test").
Collector(completionTime).Client(http.DefaultClient).
Grouping("key1", "test1").Grouping("key2", "dfdf/sdsd/").
BasicAuth("ak", "sk").
Format(expfmt.FmtProtoDelim)
if err := pusher.Push(); err != nil {
fmt.Println("Could not push completion time to PushGateway: ", err)
}Pushgateway SDK for Java:
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 {
// ここにコードを記述します。
// これは成功後にのみレジストリに追加されます。
// これにより、Pushgateway での以前の成功が失敗時に上書きされるのを防ぎます。
Gauge lastSuccess = Gauge.build()
.name("my_batch_job_last_success").help("Last time my batch job succeeded, in unixtime.").register(registry);
lastSuccess.setToCurrentTime();
} finally {
durationTimer.setDuration();
PushGateway pg = new PushGateway(new URL("https://k8s-log-c8b5d0a212ffa41cxxxx.cn-hangzhou.log.aliyuncs.com/prometheus/k8s-log-c8b5d0a212ffa41c0a5xxxx/aliyun-prom-c8b5d0a212ffa41c0xxxx/api/v1/pushgateway"));
pg.setConnectionFactory(new BasicAuthHttpConnectionFactory("ak", "sk"));
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 に設定します。API はセキュリティトークンサービス (STS) 認証をサポートしています。この場合、
BasicAuthのPasswordは{AccessKey Secret}${STS Token}形式になります。
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/job/job_name/label_key_1/label_value_1/label_key_2/label_value_2URL の末尾に複数のラベルを追加できますが、URL の全体の長さに注意する必要があります。
URL の
job_nameを実際のジョブ名に置き換えます。
結果の確認
Grafana を使用して、メトリックデータがプッシュされているかどうかを確認できます。
ApiServer ダッシュボードに移動: 左側のナビゲーションウィンドウで、[ダッシュボード] をクリックします。[ダッシュボード] ページで、[ApiServer] をクリックします。
Explore ページでデータを表示: 左側のナビゲーションウィンドウで、
アイコン (図の 1) にポインターを合わせ、[Explore] をクリックします。[Explore] ページで、Explore ドロップダウンリスト (図の 2) からリソースを選択し、メトリックデータがプッシュされているかどうかを確認します。