Dokumen ini memperkenalkan struktur yang digunakan untuk merepresentasikan layanan dan SLO dalam SLO API serta memetakannya ke konsep yang dijelaskan secara umum dalam Konsep dalam pemantauan layanan.
SLO API digunakan untuk menyiapkan tujuan tingkat layanan (SLO) yang dapat digunakan untuk memantau kondisi layanan Anda.
Service Monitoring menambahkan resource berikut ke Monitoring API:
Untuk informasi tentang cara memanggil API, lihat Bekerja dengan API.
Service
Layanan diwakili oleh objek Service
.
Objek ini mencakup kolom berikut:
- Nama: Nama resource yang sepenuhnya memenuhi syarat untuk layanan ini
- Nama tampilan: Label untuk digunakan di komponen konsol
- Struktur untuk salah satu jenis
BasicService
. - Objek konfigurasi telemetri yang disediakan sistem
Untuk menetapkan layanan dasar, tentukan jenis layanan dan berikan kumpulan label khusus layanan yang menjelaskan layanan tersebut:
{ "serviceType": string, "serviceLabels": { string: string, ... } }
Bagian berikut memberikan contoh untuk setiap jenis layanan.
Jenis layanan dasar
Bagian ini memberikan contoh definisi layanan yang dibuat berdasarkan jenis
BasicService
, dengan nilai kolom
serviceType
adalah salah satu dari yang berikut:
APP_ENGINE
CLOUD_ENDPOINTS
CLUSTER_ISTIO
ISTIO_CANONICAL_SERVICE
CLOUD_RUN
Setiap jenis layanan ini menggunakan indikator tingkat layanan
BasicSli
.
App Engine
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "APP_ENGINE", "serviceLabels": { "module_id": "MODULE_ID" }, }, }
Cloud Endpoints
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "CLOUD_ENDPOINTS", "serviceLabels": { "service": "SERVICE" }, }, }
Cluster Istio
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "CLUSTER_ISTIO", "serviceLabels": { "location": "LOCATION", "cluster_name": "CLUSTER_NAME", "service_namespace": "SERVICE_NAMESPACE", "service_name": "SERVICE_NAME" }, }, }
Layanan Kanonis Istio
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "ISTIO_CANONICAL_SERVICE", "serviceLabels": { "mesh_uid": "MESH_UID", "canonical_service_namespace": "CANONICAL_SERVICE_NAMESPACE", "canonical_service": "CANONICAL_SERVICE" }, }, }
Cloud Run
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "CLOUD_RUN", "serviceLabels": { "service_name": "SERVICE_NAME", "location": "LOCATION" }, }, }
Jenis layanan GKE dasar
Bagian ini berisi contoh definisi layanan GKE
yang dibangun pada jenis BasicService
, dengan nilai
kolom serviceType
adalah salah satu dari berikut:
GKE_NAMESPACE
GKE_WORKLOAD
GKE_SERVICE
Anda harus menentukan SLI untuk jenis layanan ini. Mereka tidak dapat menggunakan
indikator tingkat layanan BasicSli
.
Untuk mengetahui informasi selengkapnya, lihat Indikator tingkat layanan.
Namespace GKE
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "GKE_NAMESPACE", "serviceLabels": { "project_id": "PROJECT_ID", "location": "LOCATION", "cluster_name": "CLUSTER_NAME", "namespace_name": "NAMESPACE_NAME" } }, }
Beban kerja GKE
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "GKE_WORKLOAD", "serviceLabels": { "project_id": "PROJECT_ID", "location": "LOCATION", "cluster_name": "CLUSTER_NAME", "namespace_name": "NAMESPACE_NAME", "top_level_controller_type": "TOPLEVEL_CONTROLLER_TYPE", "top_level_controller_name": "TOPLEVEL_CONTROLLER_NAME", } }, }
Layanan GKE
{ "displayName": "DISPLAY_NAME", "basicService": { "serviceType": "GKE_SERVICE", "serviceLabels": { "project_id": "PROJECT_ID", "location": "LOCATION", "cluster_name": "CLUSTER_NAME", "namespace_name": "NAMESPACE_NAME", "service_name": "SERVICE_NAME" } }, }
Layanan kustom
Anda dapat membuat layanan kustom jika tidak ada jenis layanan dasar yang cocok. Layanan kustom akan terlihat seperti berikut:
{ "displayName": "DISPLAY_NAME", "custom": {} }
Anda harus menentukan SLI untuk jenis layanan ini. Mereka tidak dapat menggunakan
indikator tingkat layanan BasicSli
.
Untuk mengetahui informasi selengkapnya, lihat Indikator tingkat layanan.
Indikator tingkat layanan
Indikator tingkat layanan (SLI) memberikan ukuran performa layanan. SLI didasarkan pada metrik yang diambil oleh layanan. Cara penentuan SLI akan bergantung pada jenis metrik yang digunakan sebagai metrik indikator, tetapi umumnya merupakan beberapa perbandingan antara hasil yang dapat diterima dan hasil total.
SLI direpresentasikan oleh
objek ServiceLevelIndicator
. Objek ini adalah cara kolektif untuk merujuk tiga jenis SiLI yang didukung:
SLI dasar, yang dibuat secara otomatis untuk instance jenis layanan
BasicService
. Jenis SLI ini dijelaskan dalam Tujuan tingkat layanan; diwakili oleh objekBasicSli
dan mengukur ketersediaan atau latensi.SLI berbasis permintaan, yang dapat Anda gunakan untuk menghitung peristiwa yang mewakili layanan yang dapat diterima. Penggunaan jenis SLI ini dijelaskan dalam SLO berbasis permintaan; yang diwakili oleh objek
RequestBasedSli
.SLI berbasis jendela, yang dapat Anda gunakan untuk menghitung periode waktu yang memenuhi beberapa kriteria kebaikan. Penggunaan jenis SLI ini dijelaskan dalam SLO berbasis Windows; yang diwakili oleh objek
WindowsBasedSli
.
Misalnya, kode berikut menunjukkan SLI ketersediaan dasar:
{ "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }
Struktur untuk SLI berbasis permintaan
SLI berbasis permintaan didasarkan pada metrik yang menghitung unit layanan sebagai rasio antara hasil tertentu dan total. Misalnya, jika menggunakan metrik yang menghitung permintaan, Anda dapat mem-build rasio antara jumlah permintaan yang berhasil menampilkan jumlah total permintaan.
Ada dua cara untuk mem-build SLI berbasis permintaan:
- Sebagai
TimeSeriesRatio
, saat rasio layanan yang baik terhadap total layanan dihitung dari dua deret waktu yang nilainya memiliki jenis metrikDELTA
atauCUMULATIVE
. - Sebagai
DistributionCut
, jika deret waktu memiliki jenis nilaiDISTRIBUTION
dan yang nilainya memiliki jenis metrikDELTA
atauCUMULATIVE
. Nilai layanan baik adalah jumlah item yang termasuk dalam bucket histogram dalam rentang yang ditentukan, dan totalnya adalah jumlah semua nilai dalam distribusi.
Berikut ini representasi JSON dari SLI yang menggunakan rasio deret waktu:
{ "requestBased": { "goodTotalRatio": { "totalServiceFilter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/request_count"", "goodServiceFilter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/request_count" metric.label.response_code_class=200", } } }
Deret waktu dalam rasio ini diidentifikasi berdasarkan pasangan jenis resource yang dipantau dan jenis metrik:
- Referensi:
https_lb_rule
- Jenis metrik:
loadbalancing.googleapis.com/https/request_count
Nilai untuk totalServiceFilter
direpresentasikan oleh pasangan
metrik dan jenis resource. Nilai untuk goodServiceFilter
direpresentasikan
oleh pasangan yang sama, tetapi beberapa label memiliki nilai tertentu; dalam hal ini,
jika nilai label response_code_class
adalah 200
.
Rasio antara filter mengukur jumlah permintaan yang menampilkan status HTTP 2xx dari jumlah total permintaan.
Berikut ini representasi JSON dari SLI yang menggunakan potongan distribusi:
{ "requestBased": { "distribution_cut": { "distribution_filter": "resource.type=https_lb_rule metric.type="loadbalancing.googleapis.com/https/backend_latencies" metric.label.response_code_class=200", "range": { "min": "-Infinity", "max": 500.0 } } } }
Deret waktu diidentifikasi berdasarkan jenis resource yang dipantau, jenis metrik, dan nilai untuk label metrik:
- Referensi:
https_lb_rule
- Jenis metrik:
loadbalancing.googleapis.com/https/backend_latencies
- Pasangan nilai-label:
response_code_class
=200
Rentang latensi yang dianggap baik ditentukan oleh kolom range
.
SLI ini menghitung rasio latensi respons class 2xx di bawah 500
terhadap latensi semua respons 200 class.
Struktur untuk SLI berbasis jendela
SLI berbasis jendela menghitung periode waktu saat layanan yang disediakan dianggap baik. Kriteria untuk menentukan seberapa baik layanan merupakan bagian dari definisi SLI.
Semua SLI berbasis jendela menyertakan periode periode, 60–86.400 detik (1 hari).
Ada dua cara untuk menentukan kriteria layanan yang baik untukSLI berbasis jendela:
- Buat string filter, yang dijelaskan di Filter pemantauan yang menampilkan deret waktu dengan nilai boolean. Jendela dianggap bagus jika nilai
untuk jendela tersebut adalah
true
. Filter ini disebutgoodBadMetricFilter
. Buat objek
PerformanceThreshold
yang mewakili nilai minimum untuk performa yang dapat diterima. Objek ini ditentukan sebagai nilaigoodTotalRatioThreshold
.Objek
PerformanceThreshold
menentukan nilai minimum dan SLI performa. Jika nilai SLI performa memenuhi atau melebihi nilai minimum, jangka waktu akan dihitung sebagai baik.Ada dua cara untuk menentukan SLI performa:
- Sebagai objek
BasicSli
di kolombasicPerformanceSli
. - Sebagai objek
RequestBasedSli
di kolomperformance
.
- Sebagai objek
Berikut ini representasi JSON dari SLI berbasis jendela yang dibuat berdasarkan nilai minimum performa untuk SLI ketersediaan dasar:
{ "windowsBased": { "goodTotalRatioThreshold": { "threshold": 0.9, "basicSliPerformance": { "availability": {}, "location": [ "us-central1-c" ] } }, "windowPeriod": "300s" } }
SLI ini menentukan performa yang baik sebagai periode 5 menit ketika ketersediaan mencapai 90% atau lebih baik. Struktur SLI dasar ditampilkan di Indikator tingkat layanan.
Anda juga dapat menyematkan SLI berbasis permintaan di SLI berbasis jendela. Untuk informasi selengkapnya tentang struktur tersemat, lihat Struktur untuk SLI berbasis permintaan.
Tujuan tingkat layanan
Tujuan tingkat layanan (SLO) direpresentasikan oleh objek ServiceLevelObjective
. Objek ini mencakup kolom berikut:
- Nama:
- Nama tampilan
- SLI target; objek
ServiceLevelIndicator
tersemat - Sasaran performa untuk SLI
- Periode kepatuhan untuk SLI
Berikut representasi JSON dari SLO yang menggunakan SLI ketersediaan dasar sebagai nilai kolom serviceLevelIndicator
:
{ "name": "projects/PROJECT_NUMBER/services/PROJECT_ID-zone-us-central1-c-csm-main-default-currencyservice/serviceLevelObjectives/3kavNVTtTMuzL7KcXAxqCQ", "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.98, "calendarPeriod": "WEEK", "displayName": "98% Availability in Calendar Week" }
SLO ini menetapkan sasaran performa pada ketersediaan 98 persen selama periode seminggu.