Konstruksi di API

Dokumen ini memperkenalkan struktur yang digunakan untuk merepresentasikan layanan dan SLO di SLO API dan 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 Bekerja dengan API.

Layanan

Layanan direpresentasikan oleh objek Service. Objek ini mencakup kolom berikut:

  • Nama: Nama resource yang sepenuhnya memenuhi syarat 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 menentukan jenis layanan dan memberikan sekumpulan label khusus layanan yang mendeskripsikan layanan:

{
   "serviceType": string,
   "serviceLabels": {
      string: string,
      ...
   }
}

Bagian berikut memberikan contoh untuk setiap jenis layanan.

Jenis layanan dasar

Bagian ini memberikan contoh definisi layanan yang dibangun berdasarkan jenis BasicService, dengan nilai kolom serviceType adalah salah satu dari berikut ini:

  • 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 dibuat pada jenis BasicService, dengan nilai bidang serviceType adalah salah satu dari berikut ini:

  • GKE_NAMESPACE
  • GKE_WORKLOAD
  • GKE_SERVICE

Anda harus menentukan SLI untuk jenis layanan ini. Mereka 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"
          }
      },
    }

Workload 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 kustom jika tidak ada jenis layanan dasar yang sesuai. Layanan kustom akan terlihat seperti berikut:

    {
      "displayName": "DISPLAY_NAME",
      "custom": {}
    }

Anda harus menentukan SLI untuk jenis layanan ini. Mereka 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 berupa perbandingan antara hasil yang dapat diterima dan total hasil.

SLI diwakili 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 Service-level-objectives; direpresentasikan oleh objek BasicSli 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; SLI ini 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 Windows; SLI ini direpresentasikan oleh objek WindowsBasedSli.

Misalnya, 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 Anda menggunakan metrik yang menghitung permintaan, Anda dapat membuat rasio antara jumlah permintaan yang berhasil dan jumlah total permintaan.

Ada dua cara untuk membuat SLI berbasis permintaan:

  • Sebagai TimeSeriesRatio, saat rasio layanan baik terhadap total layanan dihitung dari dua deret waktu yang nilainya memiliki jenis metrik DELTA atau CUMULATIVE.
  • Sebagai DistributionCut, saat deret waktu memiliki jenis nilai DISTRIBUTION dan nilai-nilainya memiliki jenis metrik DELTA atau CUMULATIVE. Nilai layanan baik adalah jumlah item yang termasuk dalam bucket histogram dalam rentang tertentu, dan totalnya adalah jumlah semua nilai dalam distribusi.

Berikut ini menunjukkan representasi JSON 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 dimonitor dan jenis metrik:

  • Resource: https_lb_rule
  • Jenis metrik: loadbalancing.googleapis.com/https/request_count

Nilai untuk totalServiceFilter diwakili oleh pasangan jenis metrik dan resource. Nilai untuk goodServiceFilter ditampilkan oleh pasangan yang sama, tetapi dengan 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 dibandingkan dengan jumlah total permintaan.

Berikut ini menunjukkan representasi JSON 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 dimonitor, jenis metrik, dan nilai untuk label metrik:

  • Resource: https_lb_rule
  • Jenis metrik: loadbalancing.googleapis.com/https/backend_latencies
  • Pasangan label-nilai: response_code_class = 200

Rentang latensi yang dianggap baik ditentukan oleh kolom range. SLI ini menghitung rasio latensi respons kelas 2xx di bawah 500 terhadap latensi semua respons kelas 200.

Struktur untuk SLI berbasis rentang waktu

SLI berbasis jendela menghitung jendela waktu saat layanan yang diberikan 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 pemantauan yang menampilkan deret waktu dengan nilai boolean. Jendela dianggap baik jika nilai untuk jendela tersebut adalah true. Filter ini disebut goodBadMetricFilter.
  • Buat objek PerformanceThreshold yang mewakili nilai minimum untuk performa yang dapat diterima. Objek ini ditentukan sebagai nilai goodTotalRatioThreshold.

    Objek PerformanceThreshold menentukan nilai batas 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 BasicSli di kolom basicPerformanceSli.
    • Sebagai objek RequestBasedSli di kolom performance. Jika Anda menggunakan SLI berbasis permintaan, jenis metrik SLI Anda harus DELTA atau CUMULATIVE. Anda tidak dapat menggunakan metrik GAUGE dalam SLI berbasis permintaan.

Berikut ini menunjukkan representasi JSON SLI berbasis Windows yang dibangun 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 dengan ketersediaan mencapai 90% atau lebih baik. Struktur SLI dasar ditampilkan dalam Indikator tingkat layanan.

Anda juga dapat menyematkan SLI berbasis permintaan dalam SLI berbasis rentang waktu. Untuk mengetahui informasi selengkapnya tentang struktur sematan, lihat Struktur untuk SLI berbasis permintaan.

Tujuan tingkat layanan

Tujuan tingkat layanan (SLO) diwakili oleh objek ServiceLevelObjective. Objek ini mencakup kolom berikut:

Berikut menunjukkan representasi JSON 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 jangka waktu satu minggu.