Memecahkan masalah Monitoring API

Untuk mendiagnosis error API, memperbaiki penolakan penyerapan metrik, dan menyelesaikan hasil kueri yang tidak ada saat menggunakan Monitoring API, Anda dapat menggunakan teknik pemecahan masalah dan penyelesaian error dalam panduan ini.

Monitoring API adalah bagian dari Cloud API. Untuk mengetahui daftar kode error bersama dan rekomendasi penanganan umum, lihat Menangani error.

Menggunakan API Explorer untuk proses debug

API Explorer adalah widget yang dibuat di halaman referensi untuk metode API. Dengan alat ini, Anda dapat memanggil metode dengan mengisi kolom; Anda tidak perlu menulis kode.

Jika Anda mengalami masalah saat memanggil metode, gunakan widget APIs Explorer (Coba API ini) di halaman referensi untuk metode tersebut guna men-debug masalah Anda. Untuk mengetahui informasi selengkapnya, lihat APIs Explorer.

Error API dan autentikasi umum

Bagian ini mencantumkan kode error yang dapat ditampilkan oleh berbagai metode Monitoring API.

401 UNAUTHENTICATED

Kode error 401 UNAUTHENTICATED menunjukkan kredensial OAuth2 atau IAM tidak ada, sudah tidak berlaku, atau tidak valid.

Dua pesan error umum untuk kode error ini adalah Request is missing required authentication credential dan User is not authorized to access the project (or metric).

  • Penyebab: Header Authorization: Bearer <token> tidak ada, token OAuth2 atau OIDC sudah tidak berlaku, atau kredensial akun layanan tidak valid.
  • Penyelesaian: Perbarui token autentikasi menggunakan Kredensial Default Aplikasi (ADC) atau gcloud auth print-access-token. Selain itu, pastikan kunci akun layanan valid.
Jika Anda tidak menggunakan APIs Explorer, coba gunakan. Jika panggilan API Anda berfungsi di API Explorer, kemungkinan ada masalah otorisasi di lingkungan tempat Anda melakukan panggilan API. Buka halaman pengelola API untuk memverifikasi bahwa Monitoring API diaktifkan untuk project Anda.

403 PERMISSION_DENIED untuk akses project dan penagihan

Kode error 403 PERMISSION_DENIED menunjukkan bahwa Anda tidak memiliki izin yang diperlukan untuk melakukan tindakan yang diminta.

Ada beberapa pesan error berbeda yang dapat dipasangkan dengan kode error ini. Dua pesan error umum adalah Billing check failed for project [PROJECT_ID] dan Billing account disabled:

  • Penyebab: Penagihan Cloud dinonaktifkan atau ditangguhkan padaGoogle Cloud proyek. Penyerapan metrik kustom memerlukan akun penagihan yang aktif.
  • Penyelesaian: Tautkan akun Penagihan Cloud yang aktif ke project di konsol Google Cloud .

Jika Anda menerima kode error ini saat menulis data metrik, lihat juga 403 PERMISSION_DENIED saat menulis data metrik.

404 NOT_FOUND

Kode error 404 NOT_FOUND menunjukkan bahwa ID project target tidak ada, atau bahwa wilayah atau lokasi tidak dikenali.

Berikut adalah daftar pesan error umum untuk kode error ini:

  • Project [PROJECT_ID] not found

    • Penyebab: Project yang ditentukan dalam URI permintaan tidak ada atau telah dihapus.
    • Penyelesaian: Periksa ejaan project ID dan pastikan project aktif di konsol Google Cloud .
  • Unavailable region or location atau Unrecognized region or location

    • Penyebab: Lokasi resource yang dimonitor atau label region tidak valid atau tidak dikenali.
    • Penyelesaian: Gunakan nama region dan zona Google Cloud yang valid, seperti us-central1 atau us-central1-a.
  • The requested URL was not found on this server

    • Penyebab: Jalur resource di URL salah.
    • Penyelesaian: Bandingkan URL dengan URL untuk metode yang ditampilkan di halaman referensi metode. Error ini mungkin berarti ada kesalahan ejaan, seperti "project" dan bukan "projects", atau kesalahan kapitalisasi, seperti "TimeSeries" dan bukan "timeSeries".

500 INTERNAL, 503 UNAVAILABLE, 504 DEADLINE_EXCEEDED

Ada dua pesan error umum untuk kode error ini: Internal error encountered. Please retry after a few seconds dan The service is currently unavailable.

  • Penyebab: Error infrastruktur backend sementara, masalah jaringan, atau penyeimbangan ulang partisi database internal.
  • Resolusi: Terapkan backoff eksponensial terpotong dengan jitter pada percobaan ulang, mulai dari 1 detik hingga 32 detik. Tetapkan tenggat waktu klien RPC ke 15 detik atau lebih. Untuk mengetahui informasi selengkapnya, lihat Mencoba lagi error API.

Hasil tidak ada

Jika panggilan API menampilkan kode status 200 dan respons kosong, pertimbangkan hal berikut:

  • Jika panggilan menggunakan filter, filter mungkin tidak cocok dengan apa pun. Kecocokan filter peka huruf besar/kecil. Untuk mengatasi masalah filter, mulailah dengan menentukan hanya satu komponen filter, seperti metric.type, dan verifikasi bahwa Anda mendapatkan hasil. Tambahkan komponen filter lainnya satu per satu untuk membuat permintaan Anda.
  • Saat bekerja dengan metrik kustom, pastikan project yang menentukan metrik telah ditentukan.

Ada beberapa alasan mengapa titik data mungkin tidak ada saat Anda menggunakan metode timeSeries.list:

  • Data mungkin sudah tidak berlaku. Untuk mengetahui informasi selengkapnya, lihat Retensi data.

  • Data mungkin belum disebarkan ke Monitoring. Untuk mengetahui informasi selengkapnya, lihat Latensi data metrik.

  • Interval tidak valid:

    • Pastikan waktu berakhir sudah benar.
    • Pastikan waktu mulai sudah benar dan lebih awal dari waktu berakhir. Jika waktu mulai tidak ada atau salah format, API akan menetapkan waktu mulai ke waktu berakhir. Untuk metrik GAUGE, interval waktu ini hanya cocok dengan titik yang waktu mulai dan akhirnya sama persis dengan waktu akhir interval. Untuk metrik CUMULATIVE atau DELTA, yang mengukur di seluruh interval waktu, tidak ada titik yang cocok. Untuk mengetahui informasi selengkapnya, lihat Interval waktu.

Error saat membuat kueri data metrik

Bagian ini memberikan informasi tentang error yang dapat terjadi saat Anda membaca data metrik menggunakan metode seperti timeSeries.list.

400 INVALID_ARGUMENT saat mengkueri data metrik

Kode error 400 INVALID_ARGUMENT menunjukkan beberapa jenis error validasi sisi klien. Pesan error yang terkait dengan kode error memberikan informasi yang lebih mendetail dan khusus untuk metode API.

Misalnya, saat membuat kueri data metrik, Anda mungkin mendapatkan pesan berikut:

  • Field filter had an invalid value atau Field filter had an invalid value of "[FILTER]": [EXPLANATION]

    • Penyebab: Menunjukkan masalah pada filter pemantauan.
    • Penyelesaian: Untuk mengatasi masalah ini, verifikasi ejaan dan pemformatan filter. Untuk mengetahui informasi selengkapnya, lihat bagian Memantau filter.
  • Request was missing field interval.endTime atau Field interval.endTime had an invalid value

    • Penyebab: Menunjukkan bahwa permintaan tidak memiliki waktu berakhir atau nilai tidak memiliki format yang benar.
    • Penyelesaian: Jika Anda menggunakan APIs Explorer, jangan kutip nilai kolom waktu. Berikut adalah format yang valid:

      2026-05-11T01:23:45Z
      2026-05-11T01:23:45.678Z
      2026-05-11T01:23:45.678+05:00
      2026-05-11T01:23:45.678-04:30
      ```
      

Error saat menulis data metrik

Bagian ini memberikan informasi tentang error yang dapat terjadi saat Anda menggunakan metode timeSeries.create untuk menulis data metrik, termasuk yang berikut:

  • Ringkasan kode error.
  • Daftar pesan error yang terkait dengan setiap kode error. Entri ini mencakup penyebab dan informasi tentang penyelesaian. Error API umum juga berlaku untuk metode create.

Jika Anda tidak mengaktifkan log audit akses data untuk Monitoring, maka kegagalan dengan metode timeSeries.create mungkin tidak terlihat. Namun, Anda dapat melakukan hal berikut:

  • Gunakan Metrics Explorer untuk mendapatkan informasi tentang rasio error. Gunakan setelan berikut:

    • Metrik: monitoring.googleapis.com/api/request_count
    • Filter: method = "google.monitoring.v3.MetricService.CreateTimeSeries"
    • Agregasi: Kelompokkan menurut response_code
  • Gunakan Logs Explorer untuk mengirim kueri ke log Aktivitas Admin Anda, yang dibuat sistem saat sistem mencoba membuat deskriptor metrik secara otomatis dan tindakan tersebut gagal. Untuk melihat entri log ini, jalankan kueri berikut, setelah mengganti PROJECT_ID dengan ID project Google Cloud Anda:

    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="monitoring.googleapis.com"
    protoPayload.methodName="google.monitoring.v3.MetricService.CreateMetricDescriptor"
    severity>=ERROR
    
  • Gunakan Logs Explorer untuk membuat kueri log sisi klien.

Jika Anda mengaktifkan log audit akses data untuk Cloud Monitoring, sistem akan menulis entri log untuk setiap akses data. Khususnya, entri log ini mencakup detail tentang jumlah titik yang gagal ditulis dan penyebab kegagalan:

  • Untuk mengetahui informasi tentang cara mengaktifkan log audit akses data, lihat Mengonfigurasi log audit Akses Data.

  • Untuk melihat entri log ini, gunakan Logs Explorer dan jalankan kueri berikut, setelah mengganti PROJECT_ID dengan ID Google Cloud project Anda:

    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"
    protoPayload.serviceName="monitoring.googleapis.com"
    protoPayload.methodName="google.monitoring.v3.MetricService.CreateTimeSeries"
    severity>=ERROR
    

Ringkasan kode error timeSeries.create

Kode HTTP Kode Status gRPC Penyebab Utama
400 INVALID_ARGUMENT Kegagalan validasi payload—ukuran tumpukan, ukuran atau kunci label, pengurutan stempel waktu, ketidakcocokan skema atau jenis, struktur histogram distribusi.
400 FAILED_PRECONDITION Laju pengambilan sampel terlampaui, jenis metrik tidak didukung, atau kedatangan terlambat di luar periode retensi.
401 UNAUTHENTICATED Kredensial OAuth2 atau IAM tidak ada, sudah tidak berlaku, atau tidak valid.
403 PERMISSION_DENIED Tidak ada roles/monitoring.metricWriter peran IAM, Penagihan Cloud dinonaktifkan, atau upaya tidak sah untuk menulis ke domain metrik sistem yang dicadangkan.
404 NOT_FOUND Project ID target tidak ada, atau wilayah/lokasi tidak dikenali.
429 RESOURCE_EXHAUSTED Batas kardinalitas deret waktu aktif terlampaui pada resource yang dimonitor, batas deskriptor metrik project tercapai, atau batas rasio permintaan API terlampaui.
500 INTERNAL Kegagalan layanan skema atau penyimpanan internal.
503 UNAVAILABLE Layanan backend tidak tersedia untuk sementara.
504 DEADLINE_EXCEEDED Permintaan kehabisan waktu sebelum menulis titik data ke node penyimpanan.

400 INVALID_ARGUMENT saat menulis data metrik

400 INVALID_ARGUMENT menunjukkan error validasi sisi klien dalam struktur permintaan, metadata metrik, definisi label, penyelarasan stempel waktu, atau nilai titik.

Pelanggaran struktur permintaan dan batch

Berikut adalah daftar pesan error yang terkait dengan pelanggaran struktur dan batch:

  • Request was missing field timeSeries

    • Penyebab: Array time_series dalam permintaan kosong.
    • Penyelesaian: Sertakan setidaknya satu objek TimeSeries dalam setiap permintaan.
  • The maximum number of TimeSeries objects per Create request is 200

    • Penyebab: Permintaan berisi lebih dari 200 objek TimeSeries.
    • Penyelesaian: Batch tulis tidak lebih dari 200 deret waktu per permintaan.
  • Field points had an invalid value: Only one point can be written per TimeSeries per request

    • Penyebab: Satu objek TimeSeries berisi lebih dari satu entri di kolom points-nya.
    • Penyelesaian: Berikan tepat satu Point per objek TimeSeries per permintaan. Untuk menulis beberapa titik data dari waktu ke waktu untuk metrik yang sama, kirimkan dalam permintaan terpisah.
  • Duplicate TimeSeries encountered. Only one point can be written per TimeSeries per request

    • Penyebab: Dua atau beberapa objek TimeSeries dalam permintaan yang sama memiliki jenis metrik, label metrik, dan label resource yang dimonitor yang identik.
    • Penyelesaian: Hapus duplikat deret waktu dalam batch sisi klien sehingga setiap deret waktu unik muncul paling banyak satu kali per permintaan.
  • user defined metrics are not supported on the metric domain "[DOMAIN]"

    • Penyebab: Metrik yang ditentukan pengguna tidak didukung di domain yang ditentukan.
    • Penyelesaian: Tidak ada.

Label dan batasan penamaan

Berikut adalah daftar pesan error terkait label dan batasan penamaan:

  • Field metric.labels had an invalid value of "[KEY]": Label value exceeds the maximum string size of 1024 characters

    • Penyebab: Nilai label metrik atau resource melebihi 1.024 karakter.
    • Resolusi: Konfigurasi pengumpul atau aplikasi Anda untuk memangkas nilai label menjadi 1.024 karakter atau kurang. Hindari menyimpan teks bervolume tinggi di label metrik; tulis detail ini ke Cloud Logging.
  • Field metric.labels had an invalid value of "[KEY]": Label key contains invalid characters

    • Penyebab: Kunci label berisi karakter di luar pola yang diizinkan. Kunci dapat berisi karakter alfanumerik dan garis bawah, harus terdiri dari 100 karakter atau kurang, dan harus diawali dengan huruf.
    • Penyelesaian: Ganti nama kunci label agar hanya menggunakan karakter yang valid.
  • The metric type must be a URL-formatted string with a domain and non-empty path

    • Penyebab: metric.type salah format atau tidak memiliki awalan domain.
    • Penyelesaian: Format jenis metrik kustom sebagai custom.googleapis.com/<category>/<name> atau workload.googleapis.com/<name>.
  • Field metric.labels had an invalid value: The metric [METRIC_NAME] has more than [LIMIT] labels

    • Penyebab: Jumlah label pada deskriptor metrik kustom melebihi 30 atau, untuk metrik Prometheus, melebihi 200.
    • Penyelesaian: Hapus label yang tidak diperlukan agar tetap berada dalam batas deskriptor.
  • unrecognized metric label "[LABEL_KEY]"

    • Penyebab: Deskriptor metrik sudah ada, tetapi permintaan menyediakan kunci label yang tidak ditentukan dalam deskriptor.
    • Penyelesaian: Pastikan kunci label cocok dengan MetricDescriptor yang ada, atau buat deskriptor metrik baru jika modifikasi skema diperlukan.

Ketidakcocokan ID project dan ID resource

Berikut adalah daftar pesan error terkait ketidakcocokan ID project dan resource:

  • Field resource.labels.project_id had an invalid value of "[VAL]": if present, must be the project number or ID in the request name ([PROJECT]) atau Field resource.labels.project_id had an invalid value of "[VAL]": if present, must be the resource container ID in the request name [PROJECT]

    • Penyebab: Label project_id atau resource_container yang ditentukan dalam resource.labels tidak cocok dengan project ID atau nomor dalam nama permintaan.
    • Penyelesaian: Tetapkan label project_id resource agar cocok dengan project permintaan, atau hapus label project_id dari resource.labels sehingga secara default ditetapkan ke project permintaan.
  • unrecognized resource type "[RESOURCE_TYPE]" atau missing resource type

    • Penyebab: resource.type tidak dikenali oleh Cloud Monitoring, atau tidak disertakan untuk metrik non-kustom.
    • Penyelesaian: Gunakan jenis resource yang dimonitor yang valid, seperti gce_instance, k8s_container, generic_task, atau global.

Stempel waktu dan interval

Berikut adalah daftar pesan error yang terkait dengan stempel waktu dan interval:

  • Points must be written in order. One or more of the points specified had an older end time than the most recent point

    • Penyebab: end_time titik data lebih lama atau sama dengan stempel waktu titik data terbaru yang sebelumnya diserap untuk deret waktu tersebut.
    • Penyelesaian: Masukkan titik secara ketat dalam urutan kronologis.
  • Field points[0].interval.start_time had an invalid value of "[START]": The start time must be equal to the end time ([END]) for the gauge metric '[METRIC]'

    • Penyebab: Titik metrik GAUGE dikirimkan dengan start_time tidak sama dengan end_time.
    • Resolusi: Untuk metrik GAUGE, tetapkan start_time sama dengan end_time atau hapus start_time.
  • Field points[0].interval.start_time had an invalid value of "[START]": The start time must be before the end time ([END]) for the non-gauge metric '[METRIC]'

    • Penyebab: Titik metrik CUMULATIVE atau DELTA memiliki nilai start_time yang lebih besar dari atau sama dengan nilai end_time.
    • Penyelesaian: Pastikan nilai start_time kurang dari nilai end_time dan mewakili interval waktu bukan nol.
  • Field points[0].interval.end_time had an invalid value of "[TIME]": Data points cannot be written more than 5m into the future.

    • Penyebab: Stempel waktu titik lebih dari 5 menit lebih awal dari waktu server saat ini.
    • Resolusi: Sinkronkan jam sistem dengan NTP Publik Google (time.google.com).
  • Field points[0].interval.end_time had an invalid value of "[TIME]": Data points cannot be written more than approximately 24 hours in the past

    • Penyebab: Stempel waktu titik lebih lama dari cakrawala retensi dalam memori, yaitu 24 jam.
    • Penyelesaian: Tulis data real-time dalam waktu 24 jam setelah pembuatan.

Jenis dan distribusi nilai

Daftar berikut mencantumkan pesan error terkait jenis dan distribusi nilai:

  • value type for metric must be [EXPECTED], but is [ACTUAL] atau metric kind for metric must be [EXPECTED], but is [ACTUAL]

    • Penyebab: Jenis nilai masuk—INT64, DOUBLE, STRING, BOOL, DISTRIBUTION—atau jenis metrik—GAUGE, DELTA, CUMULATIVE—bertentangan dengan MetricDescriptor yang ada.
    • Penyelesaian: Pastikan jenis data cocok dengan deskriptor yang ada. Jenis nilai dan jenis metrik tidak dapat diubah setelah dibuat.
  • Field points[0].value had an invalid value: The metric value exceeds the maximum string size of 1024 characters

    • Penyebab: Titik metrik jenis nilai STRING melebihi 1024 karakter.
    • Resolusi: Pangkas nilai metrik string hingga 1.024 karakter atau kurang, atau kirim log ke Cloud Logging.
  • Field points[0].value had an invalid value: Bucket options must be specified for Distribution metric

    • Penyebab: Titik DISTRIBUTION tidak menentukan bucket_options.
    • Penyelesaian: Tentukan linear_buckets, exponential_buckets, atau explicit_buckets untuk metrik distribusi.
  • Field points[0].value.distributionValue had an invalid value: Distribution value has |bucket_counts| fields that sum to X which does not equal the |count| field value of Y

    • Penyebab: Jumlah hitungan di bucket_counts tidak sama dengan kolom count.
    • Penyelesaian: Pastikan jumlah semua jumlah bucket sama dengan sampel count.
  • Field points[0].value had an invalid value: Distribution metric has too many buckets

    • Penyebab: Jumlah bucket histogram melebihi 200.
    • Resolusi: Sesuaikan parameter bucket agar jumlah total bucket tetap 200 atau kurang.

400 FAILED_PRECONDITION

Berikut adalah daftar pesan error yang terkait dengan kode error ini:

  • One or more points were written more frequently than the maximum sampling period configured for the metric

    • Penyebab: Titik untuk deret waktu yang sama dikirimkan lebih cepat daripada rasio maksimum yang diizinkan, yaitu satu titik setiap 5 detik.
    • Resolusi: Batasi kecepatan penyerapan sehingga titik berurutan untuk deret waktu tertentu berjarak setidaknya 5 detik.
  • ingestion of prometheus delta metrics is not supported in this API

    • Penyebab: Permintaan mencoba menulis metrik DELTA Prometheus melalui timeSeries.create.
    • Resolusi: Gunakan metrik Prometheus GAUGE atau CUMULATIVE, atau serap melalui endpoint OTLP Google Cloud Managed Service for Prometheus.
  • One or more points arrived late outside of its aggregation window

    • Penyebab: Poin tiba setelah periode agregasi untuk metrik yang dikumpulkan dan diagregasi.
    • Penyelesaian: Lakukan flush dan streaming titik dengan latensi buffer yang lebih rendah.

403 PERMISSION_DENIED saat menulis data metrik

Saat menulis data metrik, Anda dapat menerima respons 403 PERMISSION_DENIED karena alasan yang terkait dengan akses project dan penagihan, dan karena alasan berikut:

  • Permission monitoring.timeSeries.create denied on resource (or it may not exist)

    • Penyebab: Pemanggil tidak memiliki izin monitoring.timeSeries.create pada project target.
    • Penyelesaian: Berikan peran Monitoring Metric Writer (roles/monitoring.metricWriter) ke akun layanan atau akun utama.
  • Billing check failed for project [PROJECT_ID] atau Billing account disabled

    • Penyebab: Penagihan Cloud dinonaktifkan atau ditangguhkan di Google Cloud project. Penyerapan metrik kustom memerlukan akun penagihan yang aktif.
    • Penyelesaian: Tautkan akun Penagihan Cloud yang aktif ke project di konsol Google Cloud .
  • User does not have permission to write to metric [METRIC]

    • Penyebab: Pemanggil mencoba menulis metrik kustom langsung ke domain yang dicadangkan sistem, seperti compute.googleapis.com atau storage.googleapis.com.
    • Resolusi: Gunakan domain metrik kustom seperti custom.googleapis.com/ atau workload.googleapis.com/.

429 RESOURCE_EXHAUSTED

Berikut adalah daftar pesan error yang terkait dengan kode error ini:

  • Monitored resource ([RESOURCE_ID]) has too many time series (custom metrics)

    • Penyebab: Batas deret waktu aktif terlampaui (kardinalitas tinggi). Jumlah deret waktu aktif untuk satu resource yang dipantau melampaui batas 200.000 deret aktif dalam jangka waktu 24 jam. Untuk metrik Prometheus, batasnya adalah 1.000.000 deret aktif. Hal ini biasanya terjadi saat ID sementara, seperti ID penampung, UUID pod, ID permintaan, ID pengguna, atau stempel waktu, disertakan dalam label metrik pada resource yang mengalami churn.
    • Penyelesaian:
      • Hapus label sementara atau kardinalitas tinggi dari metrik Anda.
      • Jika Anda harus melacak metrik untuk setiap tugas sementara, gunakan jenis resource yang dimonitor generic_task, bukan jenis spesifik per resource seperti dataflow_job. Petakan ID sementara ke label task_id dari resource generic_task.
  • Your Metric Ingestion quota has been exhausted

    • Penyebab: Project melampaui kuota kapasitas penyerapan API.
    • Penyelesaian: Tulis deret waktu batch hingga 200 deret per permintaan, atau minta penambahan kuota di halaman Quotas di konsol Google Cloud .
  • Your Metric Descriptors quota has been exhausted

    • Penyebab: Project mencapai batas maksimum 10.000 deskriptor metrik kustom per project. Untuk metrik Prometheus, batas ini adalah 25.000 per project.
    • Penyelesaian: Hapus deskriptor metrik yang tidak digunakan dengan menggunakan projects.metricDescriptors.delete atau kurangi penamaan metrik dinamis.
  • Rate of metric descriptor creation exceeded

    • Penyebab: Project mencoba membuat deskriptor metrik baru lebih cepat dari 6.000 per menit per project.
    • Penyelesaian: Hindari pembuatan jenis metrik baru secara dinamis selama penyerapan data; buat deskriptor terlebih dahulu jika memungkinkan.

Mencoba lagi error API

Dua kode error Cloud API menunjukkan situasi yang mungkin berguna untuk mencoba ulang permintaan:

  • 503 UNAVAILABLE: percobaan ulang berguna jika masalahnya bersifat singkat atau sementara.
  • 429 RESOURCE_EXHAUSTED: percobaan ulang berguna, setelah penundaan, untuk tugas latar belakang yang berjalan lama dengan kuota berbasis waktu seperti n panggilan per t detik. Percobaan ulang tidak berguna jika masalahnya adalah kondisi sementara atau berumur pendek, atau jika Anda telah menghabiskan kuota berbasis volume. Untuk kondisi sementara, pertimbangkan untuk mentoleransi kegagalan. Untuk masalah terkait kuota, pertimbangkan untuk mengurangi penggunaan kuota atau meminta penambahan kuota.

Saat menulis kode yang mungkin mencoba ulang permintaan, pastikan terlebih dahulu bahwa permintaan aman untuk dicoba ulang.

Apakah permintaan aman untuk dicoba lagi?

Jika permintaan Anda bersifat idempoten, maka aman untuk dicoba lagi. Tindakan idempoten adalah tindakan yang setiap perubahan statusnya tidak bergantung pada status saat ini. Contoh:

  • Membaca x bersifat idempoten; tidak ada perubahan pada nilai.
  • Menetapkan x ke 10 bersifat idempoten; hal ini dapat mengubah status, jika nilai belum 10, tetapi nilai saat ini tidak menjadi masalah. Dan tidak masalah berapa kali Anda mencoba menetapkan nilai.
  • Penambahan x tidak bersifat idempoten; nilai baru bergantung pada nilai saat ini.

Coba lagi dengan backoff eksponensial

Saat menerapkan kode untuk mencoba lagi permintaan, Anda tidak ingin mengeluarkan permintaan baru secara cepat tanpa batas. Jika sistem kelebihan beban, pendekatan ini akan memperparah masalah.

Sebagai gantinya, gunakan pendekatan backoff eksponensial yang dipangkas. Jika permintaan gagal karena kelebihan beban sementara, bukan karena tidak tersedia, solusinya adalah mengurangi beban. Backoff eksponensial terpotong mengikuti pola umum ini:

  • Tentukan berapa lama Anda bersedia menunggu saat mencoba lagi atau berapa kali Anda bersedia mencoba. Jika batas ini terlampaui, anggap layanan tidak tersedia dan tangani kondisi tersebut dengan tepat untuk aplikasi Anda. Hal inilah yang membuat penundaan terpotong; Anda berhenti mencoba lagi pada suatu titik.

  • Coba lagi permintaan dengan jeda yang semakin lama untuk mengurangi frekuensi percobaan ulang. Coba lagi hingga permintaan berhasil atau batas yang Anda tetapkan tercapai.

    Interval biasanya ditingkatkan dengan beberapa fungsi dari pangkat jumlah percobaan ulang, sehingga menjadikannya backoff eksponensial.

Ada banyak cara untuk menerapkan backoff eksponensial. Berikut adalah contoh yang menambahkan penundaan backoff yang meningkat hingga penundaan minimum 1000 md. Penundaan backoff awal adalah 2 md, dan akan meningkat menjadi 2retry_count md dengan setiap percobaan.

Tabel berikut menunjukkan interval percobaan ulang menggunakan nilai awal:

  • Penundaan minimum = 1 detik = 1000 ms
  • Backoff awal = 2 md
Jumlah percobaan ulang Penundaan tambahan (ms) Coba lagi setelah (mdtk)
0 20 = 1 1001
1 21 = 2 1002
2 22 = 4 1004
3 23 = 8 1008
4 24 = 16 1016
... ... ...
n 2n 1000 + 2n

Anda dapat memangkas siklus percobaan ulang dengan menghentikan setelah n percobaan atau saat waktu yang dihabiskan melebihi nilai yang wajar untuk aplikasi Anda.

Untuk mengetahui informasi selengkapnya, lihat artikel Wikipedia tentang Backoff eksponensial.