Topik ini menjelaskan cara menggunakan fitur Pushgateway yang disediakan oleh Managed Service for Prometheus untuk mendorong data.
Ikhtisar solusi
Jika sumber data Anda tidak dapat atau sebaiknya tidak ditarik secara berkala oleh Prometheus Server—misalnya, di lingkungan tanpa koneksi jaringan yang stabil—Anda dapat menggunakan Pushgateway. Sumber data terlebih dahulu mengirimkan data pemantauan ke Pushgateway, lalu Prometheus Server mengambil data tersebut secara berkala. Ikuti langkah-langkah berikut:
-
Dapatkan titik akhir Pushgateway: Peroleh titik akhir Pushgateway dari konsol Managed Service for Prometheus.
-
Laporkan data: Gunakan perintah curl atau SDK open source untuk mendorong data. Pastikan metrik dikumpulkan dan dipantau oleh Prometheus secara tepat waktu dan andal.
-
Tambahkan konfigurasi perlindungan data (opsional): Protokol Pushgateway standar tidak mencakup fitur perlindungan data. SDK Pushgateway hanya mendukung Basic Auth dasar dan tidak menyediakan autentikasi lanjutan yang distandarisasi. Artinya, klien apa pun yang memperoleh titik akhir Pushgateway dapat mendorong data. Untuk melindungi data Anda, peroleh token dari konsol Managed Service for Prometheus dan terapkan autentikasi JWT standar.
Prasyarat
Anda telah membuat instans Prometheus. Untuk informasi selengkapnya, lihat:
Langkah 1: Dapatkan titik akhir Push Gateway
Masuk ke Konsol Cloud Monitor. Di panel navigasi kiri, pilih . Halaman Instances akan muncul.
-
Di bilah menu bagian atas halaman, pilih wilayah tempat instans Prometheus Anda berada. Di kolom Actions kluster tujuan, klik Settings.
-
Di tab Settings, temukan bagian Push Gateway Address dan salin URL publiknya.
Tabel di bagian ini berisi dua baris: Public network dan Private network. Format URL publik adalah
https://{regionId}.arms.aliyuncs.com/prometheus/{token}/{regionId}/api/v2. Format URL privat adalahhttp://{regionId}-intranet.arms.aliyuncs.com/prometheus/{token}/{regionId}/api/v2.
Langkah 2: Laporkan data
Versi V1
Dorong data menggunakan SDK open source
-
Lapisan data saat ini mendukung protokol Text Format dan Protobuf Delimited. Protokol tersebut tidak mendukung Protobuf Text, Protobuf Compact-Text, atau OpenMetrics. SDK biasanya menggunakan Protobuf Delimited sebagai default.
-
Bidang HELP metadata metrik tidak mendukung karakter Tionghoa. Jika bidang HELP berisi karakter Tionghoa, pelaporan data akan gagal.
Topik ini menggunakan Go dan Java sebagai contoh untuk menunjukkan cara mendorong data metrik menggunakan SDK open source.
Contoh 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)
}
Contoh 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");
}
-
Saat Anda menggunakan SDK open source dan memasukkan titik akhir Pushgateway yang diperoleh dari konsol Pemantauan Prometheus, sistem secara otomatis menambahkan sufiks seperti
/metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}. Jika Anda tidak menggunakan SDK open source, Anda harus menambahkan sufiks ini sendiri. Jika tidak, Anda akan menerima error 404. -
Jika Anda mendorong data ke kluster penyewa bersama Managed Service for Prometheus, semua metrik harus menyertakan label
tenant_userid=****. Nilai tag tersebut harus berupa ID akun Alibaba Cloud (yaitu ID akun root) yang memiliki metrik tersebut. Hal ini membedakan kepemilikan metrik.
Dorong data menggunakan perintah curl
Sistem tidak mendukung permintaan dengan tipe application/x-www-form-urlencoded. Dalam perintah curl Anda, tambahkan header yang menentukan 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
-
Anda dapat menambahkan beberapa label di akhir URL, tetapi pastikan panjang total URL tetap dalam batas yang diizinkan.
-
Ganti “job_name” dalam URL dengan nama job aktual Anda.
Tambahkan konfigurasi perlindungan data (opsional)
-
Dapatkan token: Di panel navigasi kiri, pilih Settings. Di tab Settings, pada bagian Token, klik Generate Token.
-
Kirimkan token: Setelah menghasilkan token, Anda dapat mengirimkannya dengan salah satu cara berikut.
-
Metode 1: Atur token di header permintaan klien Anda. Jika tidak, sistem akan menolak permintaan tulis. Gunakan format header berikut:
Authorization: Bearer <token> -
Metode 2: SDK Pushgateway hanya mendukung Basic Auth dasar dan tidak mendukung JWT. Untuk menggunakan SDK dengan autentikasi, gunakan antarmuka BasicAuth dan atur password ke nilai token. Sisi server mendukung metode autentikasi ini. Metode 1 memerlukan upaya pengembangan tambahan. Contoh berikut menggunakan SDK Go.
pusher := push.New(url, "test"). Collector(completionTime).Client(http.DefaultClient). Grouping("key1", "test1").Grouping("key2", "dfdf/sdsd/"). .BasicAuth("admin", "actual token value"). Format(expfmt.FmtProtoDelim)
-
Versi V2
Dorong data menggunakan SDK open source
-
Lapisan data saat ini mendukung protokol Text Format dan Protobuf Delimited. Protokol tersebut tidak mendukung Protobuf Text, Protobuf Compact-Text, atau OpenMetrics. SDK biasanya menggunakan Protobuf Delimited sebagai default.
-
Bidang HELP metadata metrik tidak mendukung karakter Tionghoa. Jika bidang HELP berisi karakter Tionghoa, pelaporan data akan gagal.
Topik ini menggunakan Go dan Java sebagai contoh untuk menunjukkan cara mendorong data metrik menggunakan SDK open source.
Contoh 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://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)
}
Contoh 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://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");
}
-
Saat Anda menggunakan SDK open source dan memasukkan titik akhir Pushgateway yang diperoleh dari konsol Pemantauan Prometheus, sistem secara otomatis menambahkan sufiks seperti
/metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}. Jika Anda tidak menggunakan SDK open source, Anda harus menambahkan sufiks ini sendiri. Jika tidak, Anda akan menerima error 404. -
Jika Anda mendorong data ke kluster penyewa bersama Managed Service for Prometheus, semua metrik harus menyertakan label
tenant_userid=****. Nilai tag tersebut harus berupa ID akun Alibaba Cloud (yaitu ID akun root) yang memiliki metrik tersebut. Hal ini membedakan kepemilikan metrik. -
Operasi API mendukung autentikasi Security Token Service (STS). Dalam kasus ini, format password dalam BasicAuth adalah
{AccessKey secret}${STS token}.
Dorong data menggunakan perintah curl
Sistem tidak mendukung permintaan dengan tipe application/x-www-form-urlencoded. Dalam perintah curl Anda, tambahkan header yang menentukan Content-Type: text/plain; version=0.0.4; charset=utf-8.
echo "some_metric 3.14" | curl -u 'ak:sk' -H "Content-Type: text/plain; version=0.0.4; charset=utf-8" --data-binary @- https://k8s-log-c8b5d0a212ffa41cxxxx.cn-hangzhou.log.aliyuncs.com/prometheus/k8s-log-c8b5d0a212ffa41c0a5xxxx/aliyun-prom-c8b5d0a212ffa41c0xxxx/api/v1/pushgateway/metrics/job/job_name/label_key_1/label_value_1/label_key_2/label_value_2
-
Anda dapat menambahkan beberapa label di akhir URL, tetapi pastikan panjang total URL tetap dalam batas yang diizinkan.
-
Ganti “job_name” dalam URL dengan nama job aktual Anda.
Validasi hasil
Gunakan Grafana untuk melakukan kueri dan memastikan bahwa data telah berhasil didorong.
-
Buka dasbor ApiServer: Di panel navigasi sebelah kiri, pilih Dashboards, lalu klik tautan dasbor ApiServer. Sistem akan mengalihkan Anda ke halaman dasbor tersebut.
-
Pilih Explore untuk melihat data: Di halaman dasbor, arahkan kursor mouse ke ikon
di panel navigasi sebelah kiri. Pada kotak pop-up yang muncul, klik Explore. Di sisi kanan halaman Explore, gunakan daftar tarik-turun untuk memilih instans Explore yang sesuai, lalu periksa apakah data telah berhasil didorong.