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

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

最終更新日:Dec 27, 2024

このトピックでは、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 トークン (JWT) 認証プロトコルを実装できます。

    image

前提条件

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

手順 1: Pushgateway エンドポイントを取得する

  1. Prometheus インスタンスの詳細ページに移動します。 Managed Service for Prometheus コンソール にログインします。 左側のナビゲーションペインで、インスタンス をクリックします。 管理する Prometheus インスタンス の名前をクリックします。

    image

  2. Pushgateway エンドポイントを取得する: 左側のナビゲーションペインで、設定 をクリックします。設定 タブの Push Gateway URL セクションで、パブリック URL を取得します。

    image

手順 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. トークンを取得する: 左側のナビゲーションペインで、設定 をクリックします。設定 タブの トークン セクションで、トークンの生成 をクリックします。

    image

  2. トークンを渡す: トークンが生成されると、トークンの値を表示できます。次のいずれかの方法を使用してトークンを渡すことができます。

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

    • 方法 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 を使用して、メトリックデータがプッシュされているかどうかを確認できます。

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

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

    wt