Dokumen ini memperkenalkan struktur yang digunakan untuk merepresentasikan layanan dan SLO di 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.
Pemantauan Layanan menambahkan resource berikut ke Monitoring API:
Untuk mengetahui informasi tentang cara memanggil API, lihat Menggunakan API.
Layanan
Layanan direpresentasikan oleh Service objek.
Objek ini mencakup kolom berikut:
- Nama: Nama resource yang memenuhi syarat sepenuhnya untuk layanan ini
- Nama tampilan: Label untuk digunakan dalam komponen konsol
- Struktur untuk salah satu jenis
BasicService. - Objek konfigurasi telemetri yang disediakan sistem
Untuk menentukan layanan dasar, Anda harus menentukan jenis layanan dan memberikan sekumpulan label khusus layanan yang mendeskripsikan 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 berikut ini:
APP_ENGINECLOUD_ENDPOINTSCLUSTER_ISTIOISTIO_CANONICAL_SERVICECLOUD_RUN
Setiap jenis layanan ini menggunakan BasicSli
indikator tingkat layanan.
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 dibuat berdasarkan jenis BasicService, dengan nilai
kolom serviceType adalah salah satu dari berikut ini:
GKE_NAMESPACEGKE_WORKLOADGKE_SERVICE
Anda harus menentukan SLI untuk jenis layanan ini. SLI tidak dapat menggunakan
BasicSli indikator tingkat layanan.
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 khusus
Anda dapat membuat layanan khusus jika tidak ada jenis layanan dasar yang sesuai. Layanan khusus akan terlihat seperti berikut:
{
"displayName": "DISPLAY_NAME",
"custom": {}
}
Anda harus menentukan SLI untuk jenis layanan ini. SLI tidak dapat menggunakan
BasicSli indikator tingkat layanan.
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 SLI ditentukan bergantung pada jenis metrik yang digunakan sebagai metrik indikator, tetapi umumnya merupakan perbandingan antara hasil yang dapat diterima dan total hasil.
SLI direpresentasikan oleh objek
ServiceLevelIndicator. Objek ini adalah cara kolektif untuk merujuk tiga jenis SLI yang didukung:
SLI dasar, yang dibuat secara otomatis untuk instance jenis layanan
BasicService. Jenis SLI ini dijelaskan dalam Tujuan tingkat layanan; direpresentasikan oleh objekBasicSlidan 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; direpresentasikan oleh objek
RequestBasedSli.SLI berbasis jendela, yang dapat Anda gunakan untuk menghitung periode waktu yang memenuhi beberapa kriteria yang baik. Penggunaan jenis SLI ini dijelaskan dalam SLO berbasis jendela; direpresentasikan oleh objek
WindowsBasedSli.
Misalnya, berikut ini 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 Anda menggunakan metrik yang menghitung permintaan, Anda dapat membuat rasio antara jumlah permintaan yang menampilkan keberhasilan dan jumlah total permintaan.
Ada dua cara untuk membuat SLI berbasis permintaan:
- Sebagai
TimeSeriesRatio, saat rasio layanan yang baik terhadap total layanan dihitung dari dua deret waktu yang nilainya memiliki jenis metrikDELTAatauCUMULATIVE. - Sebagai
DistributionCut, saat deret waktu memiliki jenis nilaiDISTRIBUTIONdan nilainya memiliki jenis metrikDELTAatauCUMULATIVE. Nilai layanan yang baik adalah jumlah item yang termasuk dalam bucket histogram dalam rentang yang ditentukan, dan totalnya adalah jumlah semua nilai dalam distribusi.
Berikut ini menunjukkan 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 oleh pasangan jenis resource yang dipantau dan jenis metrik:
- Resource:
https_lb_rule - Jenis metrik:
loadbalancing.googleapis.com/https/request_count
Nilai untuk totalServiceFilter direpresentasikan oleh pasangan jenis metrik dan resource. Nilai untuk goodServiceFilter direpresentasikan
oleh pasangan yang sama, tetapi dengan beberapa label yang memiliki nilai tertentu; dalam hal ini,
saat nilai label response_code_class adalah 200.
Rasio antara filter mengukur jumlah permintaan yang menampilkan status HTTP 2xx terhadap jumlah total permintaan.
Berikut ini menunjukkan representasi JSON dari SLI yang menggunakan pemotongan 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:
- Resource:
https_lb_rule - Jenis metrik:
loadbalancing.googleapis.com/https/backend_latencies - Pasangan nilai label:
response_code_class=200
Rentang latensi yang dianggap baik ditetapkan oleh kolom range.
SLI ini menghitung rasio latensi respons kelas 2xx di bawah 500 terhadap latensi semua respons kelas 200.
Struktur untuk SLI berbasis jendela
SLI berbasis jendela menghitung jendela waktu saat layanan yang disediakan dianggap baik. Kriteria untuk menentukan seberapa baik layanan adalah bagian dari definisi SLI.
Semua SLI berbasis jendela mencakup periode jendela, 60–86.400 detik (1 hari).
Ada dua cara untuk menentukan kriteria layanan yang baik untuk SLI berbasis jendela:
- Buat string filter, yang dijelaskan dalam Filter Monitoring yang
menampilkan deret waktu dengan nilai boolean. Jendela dianggap baik jika nilai untuk jendela tersebut adalah
true. Filter ini disebutgoodBadMetricFilter. Buat objek
PerformanceThresholdyang mewakili nilai minimum untuk performa yang dapat diterima. Objek ini ditentukan sebagai nilaigoodTotalRatioThreshold.Objek
PerformanceThresholdmenentukan nilai minimum dan SLI performa. Jika nilai SLI performa memenuhi atau melebihi nilai minimum, jendela waktu akan dihitung sebagai baik.Ada dua cara untuk menentukan SLI performa:
- Sebagai objek
BasicSlidi kolombasicPerformanceSli. - Sebagai objek
RequestBasedSlidi kolomperformance. Jika Anda menggunakan SLI berbasis permintaan, jenis metrik SLI harusDELTAatauCUMULATIVE. Anda tidak dapat menggunakan metrikGAUGEdalam SLI berbasis permintaan.
- Sebagai objek
Berikut ini menunjukkan 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 jendela 5 menit saat ketersediaan mencapai 90% atau lebih baik. Struktur SLI dasar ditampilkan dalam Indikator tingkat layanan.
Anda juga dapat menyematkan SLI berbasis permintaan di SLI berbasis jendela. Untuk mengetahui informasi selengkapnya tentang struktur yang disematkan, lihat Struktur untuk SLI berbasis permintaan.
Tujuan tingkat layanan
Tujuan tingkat layanan (SLO) direpresentasikan oleh a
ServiceLevelObjective objek. Objek ini mencakup kolom berikut:
- Nama
- Nama tampilan
- SLI target; objek
ServiceLevelIndicatoryang disematkan - Sasaran performa untuk SLI
- Periode kepatuhan untuk SLI
Berikut ini menunjukkan 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 satu minggu.