すべてのプロダクト
Search
ドキュメントセンター

Managed Service for Prometheus:Pushgateway を使用してメトリックデータをプッシュする

最終更新日:Dec 24, 2025

このトピックでは、Managed Service for Prometheus が提供する Pushgateway 機能を使用してメトリックデータをプッシュする方法について説明します。

概要

Prometheus サーバーがデータソースから定期的にデータをプルできない場合 (たとえば、安定したネットワーク接続が利用できない環境など)、Pushgateway を使用してデータをプッシュできます。メトリックデータがデータソースから Pushgateway に送信されると、Prometheus サーバーは定期的にメトリックデータを取得します。これを実装するには、次の手順を実行します:

  1. Pushgateway エンドポイントの取得: Managed Service for Prometheus コンソールで Pushgateway エンドポイントを取得します。

  2. データのレポート: curl コマンドを実行するか、オープンソースの Pushgateway SDK を使用してメトリックデータをプッシュできます。これにより、メトリックデータが Managed Service for Prometheus によってタイムリーかつ確実に収集およびモニタリングされるようになります。

  3. データ保護の設定 (オプション): 標準の Pushgateway プロトコルには、データ保護に関連するコンテンツは含まれていません。Pushgateway SDK は基本的な認証のみを提供し、より高度で一般的な認証は提供しません。これは、クライアントが Pushgateway エンドポイントを取得すると、どのクライアントでもデータをプッシュできることを意味します。データセキュリティを確保するために、Managed Service for Prometheus コンソールでトークンを取得して、標準の JSON Web Token (JWT) 認証プロトコルを実装できます。

前提条件

Prometheus インスタンスが作成されていること。詳細については、次のトピックをご参照ください:

ステップ 1: Pushgateway エンドポイントの取得

  1. Cloud Monitor コンソールにログインします。左側のナビゲーションウィンドウで、[Managed Service For Prometheus] > [インスタンス] を選択します。[インスタンス] ページが表示されます。

  2. インスタンスリストの上部で、Prometheus インスタンスが存在するリージョンを選択します。インスタンスの [アクション] 列にある [設定] をクリックします。

  3. [設定] タブで、[Pushgateway URL] セクションのパブリック URL を取得します。

    image

ステップ 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_2
説明
  • URL の末尾に複数のラベルを追加できますが、URL の全体の長さに注意する必要があります。

  • URL の job_name を実際のジョブ名に置き換えます。

データ保護の設定 (オプション)

  1. トークンの取得: 左側のナビゲーションウィンドウで、[設定] をクリックします。[設定] タブで、[トークン] セクションの [トークンの生成] をクリックします。

    image

  2. トークンの受け渡し: トークンが生成された後、トークンの値を確認できます。次のいずれかのメソッドを使用してトークンを渡すことができます:

    • メソッド 1: トークンをクライアントリクエストのリクエストヘッダーに追加します。その後、メトリックデータをプッシュできます。そうしないと、システムはデータの書き込みを拒否します。次の図は、トークンをクライアントリクエストのリクエストヘッダーに追加する方法を示しています。vr

    • メソッド 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 の読み取りおよび書き込み権限を付与する必要があります。

  1. RAM 管理者または Alibaba Cloud アカウントとして RAM コンソールにログインします。左側のナビゲーションウィンドウで、[権限] > [権限付与] を選択します。

  2. [権限] ページで、[権限を付与] をクリックします。表示されるパネルで、次の表にリストされているパラメーターを設定します。

    パラメーター

    説明

    リソース範囲

    ビジネス要件に基づいてこのパラメーターを設定します。

    プリンシパル

    RAM ユーザー。

    ポリシー

    AliyunPrometheusMetricWriteAccess または AliyunCloudMonitorFullAccess を選択します。

  3. [権限を付与] をクリックし、[閉じる] をクリックします。

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) 認証をサポートしています。この場合、BasicAuthPassword{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_2
説明
  • URL の末尾に複数のラベルを追加できますが、URL の全体の長さに注意する必要があります。

  • URL の job_name を実際のジョブ名に置き換えます。

結果の確認

Grafana を使用して、メトリックデータがプッシュされているかどうかを確認できます。

  1. ApiServer ダッシュボードに移動: 左側のナビゲーションウィンドウで、[ダッシュボード] をクリックします。[ダッシュボード] ページで、[ApiServer] をクリックします。

  2. Explore ページでデータを表示: 左側のナビゲーションウィンドウで、eu アイコン (図の 1) にポインターを合わせ、[Explore] をクリックします。[Explore] ページで、Explore ドロップダウンリスト (図の 2) からリソースを選択し、メトリックデータがプッシュされているかどうかを確認します。

    wt