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

Application Real-Time Monitoring Service:Pushgateway を使用したメトリックデータのプッシュ

最終更新日:Mar 11, 2026

バッチジョブ、短期間実行プロセス、およびネットワーク分離環境では、Prometheus によるスクレイプ用に安定した HTTP エンドポイントを公開できません。Pushgateway は、こうした課題を解決するために、メトリックデータのプッシュを受け付け、Prometheus サーバーが通常のスクレイプ間隔でプルできる状態で保持します。Managed Service for Prometheus では、ネットワークトポロジーを変更せずに、これらのデータソースからメトリックを収集するために Pushgateway をご使用ください。

仕組み

データソースが Pushgateway へメトリックをプッシュし、Prometheus サーバーが定期的に Pushgateway からデータをプルします。

Architecture diagram

この構成を設定するには、以下の手順を実行します。

  1. Pushgateway エンドポイントを取得する Managed Service for Prometheus コンソールから。

  2. [メトリックデータのプッシュ] を curl または Pushgateway SDK(Go、Java)を使用して実行します。

  3. [オプション] トークン認証の有効化:プッシュ可能なユーザーを制限します。

前提条件

開始する前に、以下を確認してください。

サポートされるデータ形式

形式ステータス
テキスト形式サポート済み
Protobuf デリミテッド形式サポート済み(SDK のデフォルト)
Protobuf テキスト形式非サポート
Protobuf コンパクトテキスト形式非サポート
OpenMetrics非サポート
重要

メトリックのメタデータ内の Help フィールドでは、中国語文字はサポートされていません。このフィールドに中国語文字を含むメトリックをプッシュすると、データ報告が失敗します。

手順 1:Pushgateway エンドポイントの取得

  1. ARMS コンソール にログインします。左側ナビゲーションウィンドウで、Managed Service for Prometheusインスタンス を選択します。

  2. Prometheus インスタンスの名前をクリックして、詳細ページを開きます。

    Instance list

  3. 左側ナビゲーションウィンドウで、設定項目 をクリックします。設定項目 タブの Push Gateway URL セクションから、パブリック URL をコピーします。

    Push Gateway URL

手順 2:メトリックデータのプッシュ

Pushgateway SDK または curl を使用してメトリックデータをプッシュします。

Pushgateway SDK の使用

以下のすべての SDK サンプルは、手順 1 で取得した Pushgateway エンドポイントにメトリックをプッシュします。SDK は自動的に、/metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>} 形式の URL サフィックスを追加します。

説明

オープンソースの Pushgateway SDK を使用しない場合は、このサフィックスを手動で追加してください。追加しないと、404 エラーが返されます。

Go

completionTime := prometheus.NewGauge(prometheus.GaugeOpts{
    Name: "db_backup_last_completion_timestamp_seconds",
    Help: "The timestamp of the last successful completion of a DB backup.",
})
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)
}

url の値を、コンソールから取得した Pushgateway エンドポイントに置き換えてください。

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 {
    // Your code here.

    // This is only added to the registry after success,
    // so that a previous success in the Pushgateway isn't overwritten on failure.
    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");
}

new PushGateway(new URL(...)) 内の URL を、コンソールから取得した Pushgateway エンドポイントに置き換えてください。

curl の使用

重要

コンテンツタイプが application/x-www-form-urlencoded のリクエストはサポートされていません。リクエストヘッダーに 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 を、コンソールから取得した Pushgateway エンドポイントに置き換えてください。URL パスの末尾に、キーと値のペアとしてラベルを追加します。URL 全体の長さは、適切な範囲内に保ってください。

マルチテナントクラスターへのプッシュ

複数のテナントが共有するクラスターにメトリックデータをプッシュするには、各メトリックに tenant_userid=**** タグをアタッチします。タグ値には、そのメトリックを所有する Alibaba Cloud アカウント ID を指定します。

手順 3(オプション):トークン認証による Pushgateway のセキュア化

デフォルトでは、Pushgateway エンドポイントを知っているクライアントであれば誰でもデータをプッシュできます。アクセスを制限するには、JSON Web トークン(JWT)を生成し、すべてのリクエストに含めてください。

トークンの生成

  1. 左側のナビゲーションウィンドウで、[設定項目] をクリックします。

  2. 設定項目 タブの トークン セクションで、トークンの生成 をクリックします。

    Generate Token

リクエストへのトークンの付与

トークンを含めるには、以下のいずれかの方法をご使用ください。

方法 1:リクエストヘッダーへの追加

すべてのプッシュリクエストの Authorization ヘッダーに JWT を追加します。有効なトークンを含まないリクエストは拒否されます。

Request header token

方法 2:BasicAuth(SDK 対応)の使用

方法 1 は開発コストの増加を招く可能性があります。代わりに、Pushgateway SDK は BasicAuth をサポートしていますが、JWT は直接サポートしていません。この制約を回避するため、パスワードフィールドにトークン値を設定することで、BasicAuth インターフェイス経由でトークンを渡すことができます。サーバーはこの方法を許容します。

pusher := push.New(url, "test").
    Collector(completionTime).Client(http.DefaultClient).
    Grouping("key1", "test1").Grouping("key2", "dfdf/sdsd/").
    BasicAuth("admin", "<your-token-value>").
    Format(expfmt.FmtProtoDelim)

<your-token-value> を、コンソールで生成したトークンに置き換えてください。

結果の確認

Grafana でクエリを実行し、メトリックデータが正しく到着していることを確認します。

  1. 左側ナビゲーションウィンドウで、ダッシュボード をクリックし、次に ApiServer をクリックします。

  2. 左側ナビゲーションウィンドウの Explore icon アイコンにマウスを合わせて、Explore をクリックします。

  3. ドロップダウンリストからご利用のリソースを選択し、プッシュしたメトリックをクエリします。

    Explore page