Prometheus Pushgateway hadir untuk memungkinkan pekerjaan sementara dan batch mengekspos metriknya ke Prometheus. Karena jenis pekerjaan ini mungkin tidak akan bertahan cukup lama untuk dihapus, mereka malah dapat mendorong metriknya ke Pushgateway. Pushgateway kemudian memaparkan metrik ini ke Prometheus.
Pertama-tama, Pushgateway tidak mampu mengubah Prometheus menjadi sistem pemantauan berbasis push. Untuk gambaran umum kasus penggunaan Pushgateway, silakan baca Kapan Menggunakan Pushgateway.
Pushgateway secara eksplisit bukan agregator atau penghitung terdistribusi , melainkan cache metrik. Itu tidak memiliki semantik seperti statsd. Metrik yang didorong sama persis dengan yang Anda berikan untuk scraping dalam program yang berjalan secara permanen. Jika Anda memerlukan penghitungan terdistribusi, Anda dapat menggunakan statsd aktual yang dikombinasikan dengan eksportir statsd Prometheus, atau melihat gerbang agregasi prom. Dengan lebih banyak pengalaman yang dikumpulkan, proyek Prometheus mungkin suatu hari nanti dapat memberikan solusi asli, terpisah dari atau bahkan mungkin sebagai bagian dari Pushgateway.
Untuk metrik tingkat mesin, pengumpul file teks dari pengekspor Node biasanya lebih tepat. Pushgateway ditujukan untuk metrik tingkat layanan.
Pushgateway bukan toko acara . Meskipun Anda dapat menggunakan Prometheus sebagai sumber data untuk anotasi Grafana, pelacakan sesuatu seperti peristiwa rilis harus dilakukan dengan beberapa kerangka pencatatan peristiwa.
Beberapa waktu yang lalu, kami memutuskan untuk tidak menerapkan “batas waktu” atau TTL untuk metrik yang didorong karena hampir semua kasus penggunaan yang diusulkan ternyata merupakan anti-pola yang sangat tidak kami sarankan. Anda dapat mengikuti diskusi terbaru di milis pengembang prometheus.
Unduh rilis biner untuk platform Anda dari halaman rilis dan ekstrak tarballnya.
Jika Anda ingin mengkompilasi sendiri dari sumbernya, Anda memerlukan pengaturan Go yang berfungsi. Kemudian gunakan Makefile yang disediakan (ketik make
).
Untuk pengaturan paling dasar, jalankan saja binernya. Untuk mengubah alamat tempat mendengarkan, gunakan tanda --web.listen-address
(misalnya "0.0.0.0:9091" atau ":9091"). Secara default, Pushgateway tidak mempertahankan metrik. Namun, tanda --persistence.file
memungkinkan Anda menentukan file di mana metrik yang didorong akan dipertahankan (sehingga metrik tersebut bertahan saat Pushgateway dimulai ulang).
Anda dapat menyebarkan Pushgateway menggunakan image Docker prom/pushgateway.
Misalnya:
docker pull prom/pushgateway
docker run -d -p 9091:9091 prom/pushgateway
Pushgateway harus dikonfigurasi sebagai target yang akan dikikis oleh Prometheus, menggunakan salah satu metode yang biasa. Namun, Anda harus selalu menyetel honor_labels: true
di konfigurasi scrape (lihat di bawah untuk penjelasan detailnya).
Pustaka klien Prometheus harus memiliki fitur untuk mendorong metrik terdaftar ke Pushgateway. Biasanya, klien Prometheus secara pasif menyajikan metrik untuk diambil oleh server Prometheus. Pustaka klien yang mendukung push memiliki fungsi push, yang perlu dipanggil dengan kode klien. Kemudian secara aktif akan mendorong metrik ke Pushgateway, menggunakan API yang dijelaskan di bawah.
Menggunakan protokol teks Prometheus, mendorong metrik sangat mudah sehingga tidak ada CLI terpisah yang disediakan. Cukup gunakan alat HTTP baris perintah seperti curl
. Bahasa skrip favorit Anda kemungkinan besar memiliki beberapa kemampuan HTTP bawaan yang juga dapat Anda manfaatkan di sini.
Perhatikan bahwa dalam protokol teks, setiap baris harus diakhiri dengan karakter umpan baris (alias 'LF' atau 'n'). Mengakhiri baris dengan cara lain, misalnya dengan 'CR' alias 'r', 'CRLF' alias 'rn', atau hanya di akhir paket, akan mengakibatkan kesalahan protokol.
Metrik yang didorong dikelola dalam kelompok, diidentifikasi dengan kunci pengelompokan sejumlah label, yang pertama harus berupa label job
. Grup mudah diperiksa melalui antarmuka web.
Untuk implikasi karakter khusus pada nilai label, lihat bagian URL di bawah.
Contoh:
Dorong satu sampel ke dalam grup yang diidentifikasi oleh {job="some_job"}
:
echo "some_metric 3.14" | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job
Karena tidak ada informasi jenis yang diberikan, some_metric
akan bertipe untyped
.
Dorong sesuatu yang lebih kompleks ke dalam grup yang diidentifikasi oleh {job="some_job",instance="some_instance"}
:
cat <
Perhatikan bagaimana informasi tipe dan string bantuan disediakan. Garis-garis tersebut bersifat opsional, tetapi sangat dianjurkan untuk hal-hal yang lebih kompleks.
Hapus semua metrik dalam grup yang diidentifikasi oleh {job="some_job",instance="some_instance"}
:
curl -X DELETE http://pushgateway.example.org:9091/metrics/job/some_job/instance/some_instance
Hapus semua metrik dalam grup yang diidentifikasi oleh {job="some_job"}
(perhatikan bahwa ini tidak termasuk metrik dalam grup {job="some_job",instance="some_instance"}
dari contoh sebelumnya, meskipun metrik tersebut memiliki label pekerjaan yang sama):
curl -X DELETE http://pushgateway.example.org:9091/metrics/job/some_job
Hapus semua metrik di semua grup (harus mengaktifkan API admin melalui tanda baris perintah --web.enable-admin-api
):
curl -X PUT http://pushgateway.example.org:9091/api/v1/admin/wipe
Server Prometheus akan melampirkan label job
dan label instance
ke setiap metrik yang diambil. Nilai label job
berasal dari konfigurasi scrape. Saat Anda mengonfigurasi Pushgateway sebagai target scrape untuk server Prometheus, Anda mungkin akan memilih nama pekerjaan seperti pushgateway
. Nilai label instance
secara otomatis disetel ke host dan port target yang tergores. Oleh karena itu, semua metrik yang diambil dari Pushgateway akan memiliki host dan port Pushgateway sebagai label instance
dan label job
seperti pushgateway
. Konflik dengan label job
dan instance
yang mungkin Anda lampirkan ke metrik yang dimasukkan ke Pushgateway diselesaikan dengan mengganti nama label tersebut exported_job
exported_instance
.
Namun, perilaku ini biasanya tidak diinginkan saat menghapus Pushgateway. Secara umum, Anda ingin mempertahankan label job
dan instance
dari metrik yang dimasukkan ke Pushgateway. Itu sebabnya Anda harus menyetel honor_labels: true
di konfigurasi scrape untuk Pushgateway. Ini memungkinkan perilaku yang diinginkan. Lihat dokumentasi untuk detailnya.
Hal ini menyisakan kasus di mana metrik yang dimasukkan ke Pushgateway tidak menampilkan label instance
. Kasus ini cukup umum karena metrik yang didorong sering kali berada pada tingkat layanan dan oleh karena itu tidak terkait dengan instans tertentu. Bahkan dengan honor_labels: true
, server Prometheus akan melampirkan label instance
jika tidak ada label instance
yang disetel. Oleh karena itu, jika metrik dimasukkan ke Pushgateway tanpa label instance (dan tanpa label instance di kunci pengelompokan, lihat di bawah), Pushgateway akan mengekspornya dengan label instance kosong ( {instance=""}
), yang setara untuk tidak memiliki label instance
sama sekali tetapi mencegah server untuk melampirkannya.
Pushgateway memaparkan semua metrik yang didorong bersama dengan metriknya sendiri melalui titik akhir /metrics
yang sama. (Lihat bagian tentang metrik yang terekspos untuk mengetahui detailnya.) Oleh karena itu, semua metrik harus konsisten satu sama lain: Metrik dengan nama yang sama harus memiliki jenis yang sama, meskipun metrik tersebut dimasukkan ke grup yang berbeda, dan tidak boleh ada duplikat , yaitu metrik dengan nama yang sama dan pasangan label yang sama persis. Dorongan yang akan menyebabkan inkonsistensi ditolak dengan kode status 400.
Namun, rangkaian bantuan yang tidak konsisten dapat ditoleransi. Pushgateway akan memilih string bantuan pemenang dan mencatatnya di tingkat info.
Catatan lama: String bantuan metrik push_time_seconds
milik Pushgateway telah berubah di v0.10.0. Dengan menggunakan file persistensi, metrik yang dimasukkan ke Pushgateway versi sebelumnya dapat membuatnya menjadi Pushgateway v0.10.0 atau lebih baru. Dalam hal ini, pesan log yang disebutkan di atas akan muncul. Setelah setiap grup yang didorong sebelumnya dihapus atau menerima dorongan baru, pesan log akan hilang.
Pemeriksaan konsistensi yang dilakukan selama dorongan sama dengan yang terjadi selama pengikisan. Dalam kasus penggunaan umum, goresan lebih sering terjadi dibandingkan dorongan. Oleh karena itu, biaya kinerja pemeriksaan waktu dorong tidak relevan. Namun, jika sejumlah besar metrik di Pushgateway dikombinasikan dengan seringnya push, durasi push mungkin menjadi sangat lama. Dalam hal ini, Anda mungkin mempertimbangkan untuk menggunakan tanda baris perintah --push.disable-consistency-check
, yang menghemat biaya pemeriksaan konsistensi selama push namun memungkinkan mendorong metrik yang tidak konsisten. Pemeriksaan akan tetap dilakukan selama pengikisan, sehingga gagal dalam semua pengikisan selama metrik yang tidak konsisten disimpan di Pushgateway. Oleh karena itu, menyetel bendera membuat Anda berisiko menonaktifkan Pushgateway dengan satu dorongan yang tidak konsisten.
Jika Anda memasukkan metrik pada waktu t 1 , Anda mungkin tergoda untuk percaya bahwa Prometheus akan menghapusnya dengan stempel waktu yang sama t 1 . Sebaliknya, apa yang Prometheus lampirkan sebagai stempel waktu adalah waktu ketika ia menggores Pushgateway. Mengapa demikian?
Dalam pandangan dunia Prometheus, metrik dapat dihapus kapan saja. Metrik yang tidak dapat dihapus pada dasarnya sudah tidak ada lagi. Prometheus agak toleran, tetapi jika tidak bisa mendapatkan sampel apa pun untuk suatu metrik dalam 5 menit, ia akan berperilaku seolah-olah metrik tersebut tidak ada lagi. Mencegah hal itu sebenarnya adalah salah satu alasan menggunakan Pushgateway. Pushgateway akan membuat metrik pekerjaan singkat Anda dapat dihapus kapan saja. Melampirkan waktu dorongan sebagai stempel waktu akan menggagalkan tujuan tersebut karena 5 menit setelah dorongan terakhir, metrik Anda akan terlihat basi bagi Prometheus seolah-olah tidak dapat dihapus sama sekali lagi. (Prometheus hanya mengetahui satu stempel waktu per sampel, tidak ada cara untuk membedakan 'waktu mendorong' dan 'waktu menggores'.)
Karena tidak ada kasus penggunaan yang memungkinkan untuk melampirkan stempel waktu yang berbeda, dan banyak pengguna yang mencoba melakukannya secara salah (walaupun tidak ada pustaka klien yang mendukung hal ini), Pushgateway menolak dorongan apa pun dengan stempel waktu.
Jika Anda merasa perlu menekan stempel waktu, silakan lihat Kapan Menggunakan Pushgateway.
Untuk mempermudah peringatan pada pusher yang gagal atau yang tidak berjalan baru-baru ini, Pushgateway akan menambahkan metrik push_time_seconds
dan push_failure_time_seconds
dengan stempel waktu Unix dari POST
/ PUT
terakhir yang berhasil dan gagal ke setiap grup. Ini akan menggantikan metrik apa pun yang didorong dengan nama tersebut. Nilai nol untuk salah satu metrik menyiratkan bahwa grup tersebut belum pernah melihat POST
/ PUT
yang berhasil atau gagal.
Semua dorongan dilakukan melalui HTTP. Antarmukanya agak mirip REST.
Port default yang didengarkan Pushgateway adalah 9091. Seperti apa jalurnya
/metrics/job/{//}
digunakan sebagai nilai label job
, diikuti oleh sejumlah pasangan label lainnya (yang mungkin menyertakan label instance
atau tidak). Kumpulan label yang ditentukan oleh jalur URL digunakan sebagai kunci pengelompokan. Label mana pun yang sudah disetel di isi permintaan (sebagai label biasa, misalnya name{job="foo"} 42
) akan ditimpa agar cocok dengan label yang ditentukan oleh jalur URL!
Jika job
atau nama label apa pun diakhiri dengan @base64
, nama pekerjaan atau nilai label berikut ditafsirkan sebagai string yang dikodekan base64 menurut RFC 4648, menggunakan alfabet aman URL dan nama file. (Padding bersifat opsional, namun satu =
diperlukan untuk mengkodekan nilai label kosong.) Ini adalah satu-satunya cara untuk menangani kasus berikut:
/
, karena polos (atau bahkan dikodekan URI) /
akan ditafsirkan sebagai pemisah jalur.//
atau akhiran /
yang dihasilkan akan hilang ketika jalur dibersihkan oleh kode router HTTP. Perhatikan bahwa nama job
yang kosong tidak valid. Nilai label kosong valid namun jarang berguna. Untuk menyandikannya dengan base64, Anda harus menggunakan setidaknya satu karakter =
padding untuk menghindari //
atau /
di akhir.Untuk karakter khusus lainnya, pengkodean komponen URI yang biasa juga berfungsi, tetapi base64 mungkin lebih nyaman.
Idealnya, perpustakaan klien menangani sufiks dan pengkodean.
Contoh:
Untuk menggunakan kunci pengelompokan job="directory_cleaner",path="/var/tmp"
, jalur berikut tidak akan berfungsi:
/metrics/job/directory_cleaner/path//var/tmp
Sebagai gantinya, gunakan pengkodean aman URL base64 untuk nilai label dan tandai dengan menambahkan akhiran nama label dengan @base64
:
/metrics/job/directory_cleaner/path@base64/L3Zhci90bXA
Jika Anda tidak menggunakan perpustakaan klien yang menangani pengkodean untuk Anda, Anda dapat menggunakan alat pengkodean. Misalnya, ada alat baris perintah base64url
(paket Debian basez
), yang dapat Anda gabungkan dengan curl
untuk mendorong dari baris perintah dengan cara berikut:
echo 'some_metric{foo="bar"} 3.14' | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/directory_cleaner/path@base64/$(echo -n '/var/tmp' | base64url)
Untuk menggunakan kunci pengelompokan yang berisi nilai label kosong seperti job="example",first_label="",second_label="foobar"
, jalur berikut tidak akan berfungsi:
/metrics/job/example/first_label//second_label/foobar
Sebagai gantinya, gunakan jalur berikut termasuk karakter =
padding:
/metrics/job/example/first_label@base64/=/second_label/foobar
Kunci pengelompokan job="titan",name="Προμηθεύς"
dapat direpresentasikan “secara tradisional” dengan pengkodean URI:
/metrics/job/titan/name/%CE%A0%CF%81%CE%BF%CE%BC%CE%B7%CE%B8%CE%B5%CF%8D%CF%82
Atau Anda dapat menggunakan pengkodean base64 yang lebih ringkas:
/metrics/job/titan/name@base64/zqDPgc6_zrzOt864zrXPjc-C
Versi format eksposisi Prometheus yang lebih baru (teks dan protobuf) mendukung rangkaian karakter UTF-8 lengkap dalam nama metrik dan label. Pushgateway hanya menerima karakter khusus dalam nama jika tanda baris perintah --push.enable-utf8-names
disetel. Untuk mengizinkan karakter khusus dalam nama label yang merupakan bagian dari jalur URL, tanda ini juga mengaktifkan mekanisme pengkodean tertentu. Ini mirip dengan pengkodean base64 untuk nilai label yang dijelaskan di atas, tetapi cara kerjanya berbeda secara detail karena alasan teknis dan historis. Seperti sebelumnya, perpustakaan klien biasanya harus menangani pengkodean. Ini berfungsi sebagai berikut:
U__
._1F60A_
.__
.U__
, karakter ini harus dikodekan juga, sehingga menghasilkan U___55_____
. (Itu U__
+ _55_
(untuk U
) + __
+ __
).U__
dalam bentuk yang dikodekan, namun mengandung urutan yang tidak valid (misalnya U__in_xxx_valid
) tidak diubah. Misalnya, label "foo.bar"="baz"
akan dikodekan seperti:
/metrics/job/example/U__foo_2e_bar/baz
Pengkodean ini kompatibel dengan pengkodean base64 untuk nilai label:
/metrics/job/example/U__foo_2e_bar@base64/YmF6
Perhatikan bahwa metode ini memiliki kasus tepi yang tidak mungkin terjadi dan tidak ditangani dengan benar: Penekan yang tidak mengetahui mekanisme pengkodean mungkin menggunakan nama label yang juga merupakan versi kode yang valid dari nama label lain. Misalnya jika penekan bermaksud menggunakan nama label U__foo_2e_bar
, tetapi tidak menyandikannya sebagai U___55_____foo__2e__bar
, Pushgateway akan mendekode U__foo_2e_bar
menjadi foo.bar
. Ini adalah alasan utama mengapa decoding diikutsertakan melalui flag --push.enable-utf8-names
.
PUT
PUT
digunakan untuk mendorong sekelompok metrik. Semua metrik dengan kunci pengelompokan yang ditentukan dalam URL digantikan oleh metrik yang didorong dengan PUT
.
Isi permintaan berisi metrik untuk didorong baik sebagai buffer protokol biner terbatas atau dalam format teks datar sederhana (keduanya dalam versi 0.0.4, lihat spesifikasi format eksposisi data). Diskriminasi antara kedua varian dilakukan melalui header Content-Type
. (Gunakan nilai application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited
untuk buffering protokol, jika tidak, format teks akan dicoba sebagai pengganti.)
Kode respons jika berhasil adalah 200, 202, atau 400. Respons 200 menyiratkan dorongan yang berhasil, baik dengan mengganti grup metrik yang sudah ada atau membuat yang baru. Respons 400 dapat terjadi jika permintaan salah format atau jika metrik yang didorong tidak konsisten dengan metrik yang dikirim ke grup lain atau bertabrakan dengan metrik Pushgateway itu sendiri. Penjelasan dikembalikan di isi respons dan dicatat pada tingkat kesalahan. 202 hanya dapat terjadi jika tanda --push.disable-consistency-check
disetel. Dalam hal ini, metrik yang didorong hanya dimasukkan ke dalam antrean dan tidak diperiksa konsistensinya. Namun, ketidakkonsistenan akan menyebabkan kegagalan, seperti dijelaskan di atas.
Dalam kasus yang jarang terjadi, ada kemungkinan bahwa Pushgateway berakhir dengan serangkaian metrik yang tidak konsisten yang telah diterapkan. Dalam hal ini, dorongan baru juga ditolak karena tidak konsisten meskipun pelakunya adalah metrik yang didorong sebelumnya. Hapus metrik yang mengganggu untuk keluar dari situasi tersebut.
Jika menggunakan format protobuf, jangan mengirim pesan proto MetricFamily duplikat (yaitu lebih dari satu dengan nama yang sama) sekaligus, karena akan saling menimpa.
Perhatikan bahwa Pushgateway tidak memberikan jaminan kuat apa pun bahwa metrik yang didorong akan disimpan ke disk. (Server crash dapat menyebabkan hilangnya data. Atau Pushgateway dikonfigurasi untuk tidak disimpan di disk sama sekali.)
Permintaan PUT
dengan isi kosong secara efektif menghapus semua metrik dengan kunci pengelompokan yang ditentukan. Namun, berbeda dengan permintaan DELETE
yang dijelaskan di bawah, permintaan ini memperbarui metrik push_time_seconds
.
POST
POST
bekerja persis seperti metode PUT
tetapi hanya metrik dengan nama yang sama dengan metrik yang baru dimasukkan yang diganti (di antara metrik dengan kunci pengelompokan yang sama).
Permintaan POST
dengan isi kosong hanya memperbarui metrik push_time_seconds
tetapi tidak mengubah metrik apa pun yang didorong sebelumnya.
DELETE
DELETE
digunakan untuk menghapus metrik dari Pushgateway. Permintaan tidak boleh berisi konten apa pun. Semua metrik dengan kunci pengelompokan yang ditentukan dalam URL akan dihapus.
Kode respons jika berhasil selalu 202. Permintaan penghapusan hanya dimasukkan dalam antrean pada saat itu. Tidak ada jaminan bahwa permintaan akan benar-benar dieksekusi atau hasilnya akan sampai ke lapisan persistensi (misalnya jika terjadi kerusakan server). Namun urutan permintaan PUT
/ POST
dan DELETE
dijamin, yaitu jika Anda sudah berhasil mengirimkan permintaan DELETE
lalu mengirimkan PUT
, dijamin DELETE
akan diproses terlebih dahulu (begitu pula sebaliknya).
Menghapus kunci pengelompokan tanpa metrik adalah tindakan yang dilarang dan tidak akan menghasilkan kesalahan.
Isi permintaan POST atau PUT mungkin dikompresi dengan gzip atau snappy. Tambahkan header Content-Encoding: gzip
atau Content-Encoding: snappy
untuk melakukannya.
Contoh:
echo " some_metric 3.14 " | gzip | curl -H ' Content-Encoding: gzip ' --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job
echo " some_metric 3.14 " | snzip | curl -H ' Content-Encoding: snappy ' --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job
Admin API menyediakan akses administratif ke Pushgateway, dan harus diaktifkan secara eksplisit dengan menyetel tanda --web.enable-admin-api
.
Port default yang didengarkan Pushgateway adalah 9091. Jalurnya terlihat seperti:
/api//admin/
HTTP_METHOD | API_VERSION | PENANGANAN | KETERANGAN |
---|---|---|---|
MELETAKKAN | v1 | menghapus | Menghapus semua metrik dari Pushgateway dengan aman. |
Misalnya untuk menghapus semua metrik dari Pushgateway:
curl -X PUT http://pushgateway.example.org:9091/api/v1/admin/wipe
API kueri memungkinkan mengakses metrik yang didorong serta informasi build dan runtime.
/api//
HTTP_METHOD | API_VERSION | PENANGANAN | KETERANGAN |
---|---|---|---|
MENDAPATKAN | v1 | status | Mengembalikan informasi pembangunan, tanda baris perintah, dan waktu mulai dalam format JSON. |
MENDAPATKAN | v1 | metrik | Mengembalikan kelompok metrik yang dikirim dalam format JSON. |
Misalnya :
curl -X GET http://pushgateway.example.org:9091/api/v1/status | jq
{
"status": "success",
"data": {
"build_information": {
"branch": "master",
"buildDate": "20200310-20:14:39",
"buildUser": "[email protected]",
"goVersion": "go1.13.6",
"revision": "eba0ec4100873d23666bcf4b8b1d44617d6430c4",
"version": "1.1.0"
},
"flags": {
"log.format": "logfmt",
"log.level": "info",
"persistence.file": "",
"persistence.interval": "5m0s",
"push.disable-consistency-check": "false",
"web.enable-admin-api": "false",
"web.enable-lifecycle": "false",
"web.external-url": "",
"web.listen-address": ":9091",
"web.route-prefix": "",
"web.telemetry-path": "/metrics"
},
"start_time": "2020-03-11T01:44:49.9189758+05:30"
}
}
curl -X GET http://pushgateway.example.org:9091/api/v1/metrics | jq
{
"status": "success",
"data": [
{
"labels": {
"job": "batch"
},
"last_push_successful": true,
"my_job_duration_seconds": {
"time_stamp": "2020-03-11T02:02:27.716605811+05:30",
"type": "GAUGE",
"help": "Duration of my batch job in seconds",
"metrics": [
{
"labels": {
"instance": "",
"job": "batch"
},
"value": "0.2721322309989773"
}
]
},
"push_failure_time_seconds": {
"time_stamp": "2020-03-11T02:02:27.716605811+05:30",
"type": "GAUGE",
"help": "Last Unix time when changing this group in the Pushgateway failed.",
"metrics": [
{
"labels": {
"instance": "",
"job": "batch"
},
"value": "0"
}
]
},
"push_time_seconds": {
"time_stamp": "2020-03-11T02:02:27.716605811+05:30",
"type": "GAUGE",
"help": "Last Unix time when changing this group in the Pushgateway succeeded.",
"metrics": [
{
"labels": {
"instance": "",
"job": "batch"
},
"value": "1.5838723477166057e+09"
}
]
}
}
]
}
Pushgateway menyediakan serangkaian API manajemen untuk memudahkan otomatisasi dan integrasi.
HTTP_METHOD | JALUR | KETERANGAN |
---|---|---|
MENDAPATKAN | /-/sehat | Mengembalikan 200 setiap kali Pushgateway sehat. |
MENDAPATKAN | /-/siap | Mengembalikan 200 setiap kali Pushgateway siap melayani lalu lintas. |
--web.enable-lifecycle
.HTTP_METHOD | JALUR | KETERANGAN |
---|---|---|
MELETAKKAN | /-/berhenti | Memicu penutupan Pushgateway dengan baik. |
Alternatifnya, pematian yang baik dapat dipicu dengan mengirimkan SIGTERM
ke proses Pushgateway.
Pushgateway menampilkan metrik berikut melalui --web.telemetry-path
yang dikonfigurasi (default: /metrics
):
push_time_seconds
dan push_failure_time_seconds
seperti dijelaskan di atas.process_...
go_...
promhttp_metric_handler_requests_...
# HELP pushgateway_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which pushgateway was built.
# TYPE pushgateway_build_info gauge
pushgateway_build_info{branch="master",goversion="go1.10.2",revision="8f88ccb0343fc3382f6b93a9d258797dcb15f770",version="0.5.2"} 1
# HELP pushgateway_http_push_duration_seconds HTTP request duration for pushes to the Pushgateway.
# TYPE pushgateway_http_push_duration_seconds summary
pushgateway_http_push_duration_seconds{method="post",quantile="0.1"} 0.000116755
pushgateway_http_push_duration_seconds{method="post",quantile="0.5"} 0.000192608
pushgateway_http_push_duration_seconds{method="post",quantile="0.9"} 0.000327593
pushgateway_http_push_duration_seconds_sum{method="post"} 0.001622878
pushgateway_http_push_duration_seconds_count{method="post"} 8
# HELP pushgateway_http_push_size_bytes HTTP request size for pushes to the Pushgateway.
# TYPE pushgateway_http_push_size_bytes summary
pushgateway_http_push_size_bytes{method="post",quantile="0.1"} 166
pushgateway_http_push_size_bytes{method="post",quantile="0.5"} 182
pushgateway_http_push_size_bytes{method="post",quantile="0.9"} 196
pushgateway_http_push_size_bytes_sum{method="post"} 1450
pushgateway_http_push_size_bytes_count{method="post"} 8
# HELP pushgateway_http_requests_total Total HTTP requests processed by the Pushgateway, excluding scrapes.
# TYPE pushgateway_http_requests_total counter
pushgateway_http_requests_total{code="200",handler="static",method="get"} 5
pushgateway_http_requests_total{code="200",handler="status",method="get"} 8
pushgateway_http_requests_total{code="202",handler="delete",method="delete"} 1
pushgateway_http_requests_total{code="202",handler="push",method="post"} 6
pushgateway_http_requests_total{code="400",handler="push",method="post"} 2
Secara umum, merupakan ide bagus untuk memperingatkan jika push_time_seconds
tertinggal jauh dari yang diharapkan. Ini akan menangkap dorongan yang gagal dan juga penekan yang turun sepenuhnya.
Untuk mendeteksi push yang gagal lebih awal, beri peringatan pada push_failure_time_seconds > push_time_seconds
.
Dorongan juga bisa gagal karena formatnya salah. Dalam hal ini, metrik tersebut tidak pernah menjangkau grup metrik mana pun sehingga tidak akan menetapkan metrik push_failure_time_seconds
apa pun. Dorongan tersebut masih dihitung sebagai pushgateway_http_requests_total{code="400",handler="push"}
. Anda dapat memperingatkan rate
metrik ini, namun Anda harus memeriksa log untuk mengidentifikasi pendorong yang melanggar.
Pushgateway mendukung TLS dan otentikasi dasar. Hal ini memungkinkan kontrol yang lebih baik terhadap berbagai titik akhir HTTP.
Untuk menggunakan TLS dan/atau autentikasi dasar, Anda perlu meneruskan file konfigurasi menggunakan parameter --web.config.file
. Format file dijelaskan dalam repositori toolkit eksportir.
Perhatikan bahwa pengaturan TLS dan autentikasi dasar memengaruhi semua titik akhir HTTP: /metrik untuk pengikisan, API untuk mendorong metrik melalui /metrik/..., API admin melalui /api/..., dan UI web.
Biner normal menyematkan file web di direktori resources
. Untuk tujuan pengembangan, akan berguna jika biner yang sedang berjalan menggunakan file-file tersebut secara langsung (sehingga Anda dapat melihat efek perubahannya dengan segera). Untuk beralih ke penggunaan langsung, tambahkan -tags dev
ke entri flags
di .promu.yml
, lalu make build
. Beralih kembali ke mode "normal" dengan mengembalikan perubahan ke .promu.yml
dan mengetik make assets
.
Pedoman gaya yang relevan adalah Komentar Tinjauan Kode Go dan bagian Pemformatan dan gaya dari Go: Praktik Terbaik untuk Lingkungan Produksi karya Peter Bourgon.