全部产品
Search
文档中心

Container Service for Kubernetes:Penyesuaian Otomatis Pod Horizontal berdasarkan metrik Prometheus Alibaba Cloud

更新时间:Dec 31, 2025

Secara default, Horizontal Pod Autoscaler (HPA) mendukung penskalaan otomatis berdasarkan metrik CPU dan memori. Namun, metrik tersebut mungkin tidak cukup untuk skenario O&M yang kompleks. Topik ini menjelaskan cara mengonversi metrik kustom dan eksternal yang dikumpulkan oleh Prometheus menjadi metrik penskalaan yang dapat digunakan HPA dengan memperoleh data pemantauan dan menyiapkan konfigurasi penskalaan, sehingga menyediakan mekanisme penskalaan yang lebih fleksibel dan nyaman untuk aplikasi Anda.

Prasyarat

Fitur

Secara default, HPA hanya mendukung penskalaan otomatis berdasarkan CPU dan memori, yang mungkin tidak memenuhi kebutuhan O&M harian. Layanan Prometheus terintegrasi penuh dengan ekosistem Prometheus open source, mendukung pemantauan berbagai komponen, menyediakan banyak dasbor siap pakai, serta menawarkan layanan Prometheus yang sepenuhnya dikelola. Proses ini melibatkan tiga langkah utama:

  1. Ekspos metrik pemantauan menggunakan Layanan Prometheus di kluster ACK.

  2. Konversi metrik pemantauan Prometheus menjadi metrik agregasi Kubernetes yang dapat digunakan HPA menggunakan komponen ack-alibaba-cloud-metrics-adapter. Untuk informasi selengkapnya, lihat Penskalaan otomatis berdasarkan beberapa metrik dan metrik kustom.

  3. Konfigurasikan dan terapkan HPA untuk melakukan penskalaan elastis berdasarkan metrik dari langkah sebelumnya.

    Metrik dibagi menjadi dua jenis berdasarkan skenario:

    • Custom Metric: Melakukan penskalaan berdasarkan metrik yang terkait dengan objek target Kubernetes, seperti pod. Contohnya adalah metrik dari dimensi pod itu sendiri. Untuk informasi selengkapnya, lihat autoscaling-on-multiple-metrics-and-custom-metrics.

    • External Metric: Melakukan penskalaan berdasarkan metrik yang tidak terkait dengan objek target Kubernetes, seperti pod. Misalnya, Anda dapat menskalakan pod suatu workload berdasarkan metrik permintaan per detik (QPS) bisnis secara keseluruhan. Untuk informasi selengkapnya, lihat autoscaling-on-metrics-not-related-to-kubernetes-objects.

Bagian berikut menjelaskan cara mengonfigurasi ack-alibaba-cloud-metrics-adapter untuk mengonversi metrik Layanan Prometheus menjadi metrik yang kompatibel dengan HPA dan mengaktifkan penskalaan otomatis berdasarkan metrik tersebut.

Langkah 1: Peroleh data pemantauan Prometheus

Contoh 1: Gunakan metrik pemantauan kontainer default di ACK

Anda dapat menggunakan metrik default dari Layanan Prometheus, yang diinstal secara default di ACK, untuk penskalaan elastis HPA. Metrik yang didukung mencakup metrik pemantauan kontainer cAdvisor, metrik pemantauan infrastruktur Node-Exporter, metrik GPU-Exporter, dan semua metrik lain yang telah Anda hubungkan ke Layanan Prometheus. Untuk melihat metrik yang terhubung ke Layanan Prometheus, lakukan langkah-langkah berikut:

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih Operations > Prometheus Monitoring.

  3. Di pojok kanan atas, klik Go to Prometheus Service.

  4. Di panel navigasi kiri konsol Layanan Prometheus, klik Settings untuk melihat semua metrik yang terhubung ke Layanan Prometheus.

Contoh 2: Gunakan metrik Prometheus yang dilaporkan oleh pod

Terapkan aplikasi uji dan ekspos metriknya menggunakan metode standar Prometheus. Untuk informasi selengkapnya, lihat metric_type. Bagian berikut menjelaskan cara menerapkan aplikasi sample-app dan mengekspos metrik http_requests_total untuk melacak jumlah permintaan.

  1. Terapkan workload aplikasi.

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, klik Workloads > Deployments.

    3. Di sisi kanan halaman Stateless, klik Create From YAML. Pada halaman Create yang terbuka, untuk Sample Template, pilih Custom, masukkan YAML berikut, lalu klik Create.

      Expand to view YAML details

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sample-app
        labels:
          app: sample-app
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sample-app
        template:
          metadata:
            labels:
              app: sample-app
          spec:
            containers:
            - image: registry-cn-hangzhou.ack.aliyuncs.com/acs/autoscale-demo:v0.1.2-dfbc5fd-aliyun
              name: metrics-provider
              ports:
              - name: http
                containerPort: 8080
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sample-app
        namespace: default
        labels:
          app: sample-app
      spec:
        ports:
          - port: 8080
            name: http
            protocol: TCP
            targetPort: 8080
        selector:
          app: sample-app
        type: ClusterIP
  2. Tambahkan ServiceMonitor

    1. Masuk ke Konsol ARMS.

    2. Di panel navigasi kiri, klik Provisioning. Pada tab Provisioned, di bawah tab Container Environment, pilih wilayah tempat kluster berada, lalu klik nama lingkungan yang sesuai. Nama lingkungan sama dengan nama kluster.

    3. Pada halaman lingkungan kontainer, klik tab Metric Collection. Di panel navigasi kiri halaman saat ini, klik ServiceMonitor. Pada halaman ServiceMonitor, klik Add. Pada panel Add ServiceMonitor Config, klik YAML Edit, tambahkan konfigurasi ServiceMonitor berikut, lalu ikuti petunjuk di layar untuk membuat ServiceMonitor.

      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        annotations:
          arms.prometheus.io/discovery: 'true'
        name: sample-app
        namespace: default
      spec:
        endpoints:
        - interval: 30s
          port: http
          path: /metrics
        namespaceSelector:
          any: true
        selector:
          matchLabels:
            app: sample-app
  3. Konfirmasi status pemantauan.

    Klik tab Self-monitoring. Di bagian Targets, jika ditampilkan default/sample-app/0(1/1 up), berarti Layanan Prometheus berhasil memantau aplikasi yang diterapkan.

  4. Di dasbor Prometheus, kueri nilai http_requests_total untuk rentang waktu terbaru guna memastikan data pemantauan diperoleh dengan benar.

Langkah 2: Ubah konfigurasi komponen ack-alibaba-cloud-metrics-adapter

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, klik Applications > Helm.

  3. Pada halaman Helm, temukan ack-alibaba-cloud-metrics-adapter dan klik Update di kolom Actions.

  4. Pada panel Update Release, konfigurasikan YAML berikut, lalu klik OK.

    Expand to view YAML details

      AlibabaCloudMetricsAdapter:
      ......
        prometheus:
          enabled: true    # Setel ke true untuk mengaktifkan fitur adapter Prometheus secara keseluruhan.
          # Masukkan alamat Layanan Prometheus.
          url: https://cn-beijing.arms.aliyuncs.com:9443/api/v1/prometheus/xxxx/xxxx/xxxx/cn-beijing
        	# Jika Anda menggunakan Layanan Prometheus V1 dan mengaktifkan token autentikasi, Anda harus mengonfigurasi prometheusHeader Authorization.
          prometheusHeader:
          - Authorization: {Token}
          	# Jika Anda menggunakan Layanan Prometheus V2 dan tidak mengaktifkan akses tanpa kata sandi, Anda harus mengonfigurasi prometheusHeader Authorization.
          # prometheusHeader:
          # - Authorization: Basic <base64Encode(<accessKey:secretKey>)>
          metricsRelistInterval: 1m # Interval untuk mengambil ulang daftar metrik. Kami menyarankan mempertahankan nilai default 1 menit.
        	logLevel: 5								# Tingkat log debug untuk komponen. Kami menyarankan mempertahankan nilai default.
        
          adapter:
            rules:
              default: false  			# Konfigurasi pengambilan metrik default. Kami menyarankan mempertahankan nilai false.
              custom:
              
              # Contoh 1: ini adalah contoh konfigurasi metrik kustom.
              # Konfigurasi ini akan mengonversi metrik prometheus: container_memory_working_set_bytes menjadi metrik kustom container_memory_working_set_bytes_per_second
              # dan metrik cpu container_cpu_usage_seconds_total menjadi container_cpu_usage_core_per_second
              # Anda dapat menjalankan perintah untuk memeriksa nilai memori/cpu:
              # kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_memory_working_set_bytes_per_second"
              # kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_cpu_usage_core_per_second"
              # referensi dokumen: https://www.alibabacloud.com/help/document_detail/184519.html
      
              - seriesQuery: 'container_memory_working_set_bytes{namespace!="",pod!=""}'
                resources:
                  overrides:
                    namespace: { resource: "namespace" }
                    pod: { resource: "pod" }
                name:
                  matches: "^(.*)_bytes"
                  as: "${1}_bytes_per_second"
                metricsQuery: 'sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)' # labelSelector dalam konfigurasi metricsQuery tidak mewarisi label filter dari series_Query.
              - seriesQuery: 'container_cpu_usage_seconds_total{namespace!="",pod!=""}'
                resources:
                  overrides:
                    namespace: { resource: "namespace" }
                    pod: { resource: "pod" }
                name:
                  matches: "^(.*)_seconds_total"
                  as: "${1}_core_per_second"
                metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)'  # labelSelector dalam konfigurasi metricsQuery tidak mewarisi label filter dari series_Query.
              - seriesQuery: 'http_requests_total{namespace!="",pod!=""}'
                resources:
                  overrides:
                    namespace: {resource: "namespace"}
                    pod: {resource: "pod"}
                name:
                  matches: "^(.*)_total"
                  as: "${1}_per_second"
                metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)'
      
              # Contoh 2: ini adalah contoh konfigurasi metrik eksternal.
              
              # referensi dokumen: https://www.alibabacloud.com/help/document_detail/608768.html
      
              # Tambahkan aturan transformasi baru. Pastikan label metrik di Layanan Prometheus sesuai dengan yang ada di sini. Jika tidak, lihat cara mengubah label metrik di ARMS Prometheus.
              
              #- seriesQuery: http_requests_total{namespace!="",pod!=""}
              #  resources:
              #    overrides:
              #      # Resource di sini adalah Resource API Kubernetes. Anda dapat melihatnya dengan menjalankan kubectl api-resources -o wide.
              #      # Kunci di sini sesuai dengan LabelName dalam data Prometheus. Pastikan LabelName ini ada dalam data metrik Prometheus.
              #      namespace: {resource: "namespace"}
              #      pod: {resource: "pod"}
              #  name:
              #    matches: ^(.*)_total
              #   as: ${1}_per_second
              #  metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)
      
      
              # ini adalah contoh konfigurasi metrik eksternal.
              
              # referensi dokumen: https://www.alibabacloud.com/help/document_detail/608768.html
      
              #- seriesQuery: arms_app_requests_count
              #  metricsQuery: sum by (rpc) (sum_over_time(<<.Series>>{rpc="/demo/queryUser/{id}",service="arms-demo:arms-k8s-demo",prpc="__all__",ppid="__all__",endpoint="__all__",destId="__all__",<<.LabelMatchers>>}[1m]))
              #  name:
              #    as: ${1}_per_second_queryuser
              #    matches: ^(.*)_count
              #  resources:
              #    namespaced: false
      
      
              # ini adalah contoh metrik kustom dari metrik prometheus yang ditentukan pengguna: http_requests_total
              # referensi dokumen: https://www.alibabacloud.com/help/document_detail/184519.html
    
              # - seriesQuery: '{__name__=~"^some_metric_count$"}'
              #   resources:
              #     template: <<.Resource>>
              #   name:
              #     matches: ""
              #     as: "my_custom_metric"
              #   metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)
      
        ......

    Tabel berikut menjelaskan beberapa field. Untuk deskripsi lengkap file konfigurasi komponen ack-alibaba-cloud-metrics-adapter, lihat Deskripsi lengkap file konfigurasi komponen ack-alibaba-cloud-metrics-adapter.

    Field

    Deskripsi

    AlibabaCloudMetricsAdapter.prometheus.adapter.rules.custom

    Ubah isi field ini agar sesuai dengan isi pada contoh YAML.

    alibabaCloudMetricsAdapter.prometheus.url

    Alamat Layanan Prometheus. Untuk informasi cara memperoleh URL permintaan data Prometheus, lihat Cara memperoleh URL permintaan data Prometheus.

    AlibabaCloudMetricsAdapter.prometheus.prometheusHeader[].Authorization

    Informasi autentikasi. Untuk informasi selengkapnya, lihat Cara memperoleh URL permintaan data Prometheus.

    • Prometheus V1: Autentikasi tidak diperlukan secara default. Jika autentikasi token diaktifkan, Anda harus mengonfigurasi parameter ini.
      Prometheus V2: Autentikasi diaktifkan secara default. Jika akses tanpa kata sandi tidak diaktifkan, Anda harus mengonfigurasi parameter ini.

    AlibabaCloudMetricsAdapter.prometheus.adapter.rules.default

    Membuat metrik pradefinisi secara default. Kami menyarankan menonaktifkannya dengan mengatur nilai ke false.

Setelah Anda mengonfigurasi parameter komponen dan menerapkan komponen, Anda dapat menjalankan perintah berikut untuk memeriksa apakah API agregasi Kubernetes berhasil mengakses data.

Skalakan kontainer menggunakan Custom Metrics

  1. Jalankan kueri Custom Metrics untuk melihat detail dan daftar metrik HPA yang tersedia.

    kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/" | jq .
  2. Kueri nilai saat ini dari metrik container_memory_working_set_bytes_per_second dan container_cpu_usage_core_per_second di namespace kube-system.

    # Kueri container_memory_working_set_bytes_per_second untuk melihat ukuran memori kerja per detik pod di namespace kube-system.
    kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_memory_working_set_bytes_per_second" | jq .
    
    # Kueri container_cpu_usage_core_per_second untuk melihat penggunaan core CPU per detik pod di namespace kube-system.
    kubectl get --raw  "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/*/container_cpu_usage_core_per_second" | jq .

    Blok kode berikut menunjukkan contoh hasil kueri:

    {
      "kind": "MetricValueList",
      "apiVersion": "custom.metrics.k8s.io/v1beta1",
      "metadata": {
        "selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/kube-system/pods/%2A/container_cpu_usage_core_per_second"
      },
      "items": [
        {
          "describedObject": {
            "kind": "Pod",
            "namespace": "kube-system",
            "name": "ack-cost-exporter-7f44d55c66-cgtz7",
            "apiVersion": "/v1"
          },
          "metricName": "container_cpu_usage_core_per_second",
          "timestamp": "2025-12-30T03:30:21Z",
          "value": "4m",
          "selector": null
        }

Skalakan kontainer menggunakan External Metrics

  1. Jalankan kueri External Metrics untuk melihat detail dan daftar metrik HPA eksternal yang tersedia.

    kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/" | jq .
  2. Kueri nilai saat ini dari metrik http_requests_per_second di namespace default.

    kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/http_requests_per_second" | jq .

    Contoh:

    {
      "kind": "ExternalMetricValueList",
      "apiVersion": "external.metrics.k8s.io/v1beta1",
      "metadata": {},
      "items": [
        {
          "metricName": "http_requests_per_second",
          "metricLabels": {},
          "timestamp": "2025-12-30T03:29:40Z",
          "value": "328m"
        }
      ]
    }

Langkah 3: Konfigurasikan dan terapkan HPA untuk menskalakan berdasarkan metrik yang diperoleh

Versi saat ini mendukung ekspos Custom Metrics dan External Metrics dari Layanan Prometheus secara bersamaan. Anda dapat memilih salah satu metode berikut untuk menskalakan kontainer menggunakan HPA sesuai kebutuhan.

Custom Metrics

  1. Buat file hpa.yaml.

    kind: HorizontalPodAutoscaler
    apiVersion: autoscaling/v2
    metadata:
      name: sample-app-memory-high
    spec:
    # Deskripsi target penskalaan HPA. HPA akan secara dinamis mengubah jumlah pod untuk objek ini.
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: sample-app
    # Jumlah minimum dan maksimum pod untuk HPA.
      minReplicas: 1
      maxReplicas: 10
    # Array metrik yang dipantau. Beberapa jenis metrik dapat berdampingan.
      metrics:
      - type: Pods
        pods:
          # Gunakan metrik: pods/container_memory_working_set_bytes_per_second.
          metric: 
            name: container_memory_working_set_bytes_per_second
     # Nilai target bertipe AverageValue. Hanya target bertipe AverageValue yang didukung untuk metrik Pods.
          target:
            type: AverageValue
            averageValue: 1024000m       # Di sini, 1024000m merepresentasikan ambang batas memori 1 KB. Satuan metrik saat ini adalah byte/per detik. 'm' adalah satuan presisi Kubernetes. Saat titik desimal muncul dan Kubernetes memerlukan presisi tinggi, digunakan satuan seperti 'm' atau 'k'. Misalnya, 1001m=1.001, dan 1k=1000.
  2. Buat aplikasi HPA.

    kubectl apply -f hpa.yaml
  3. Setelah Anda mengaktifkan load balancing untuk Service, jalankan perintah berikut untuk melakukan uji stres.

    Ganti <EXTERNAL-IP> dengan alamat IP publik atau nama domain instance Server Load Balancer (SLB) untuk Service sample-app.

    Expand to view <EXTERNAL-IP> instructions

    1. Pada halaman ACK Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Network > Services.

    2. Di namespace default, temukan Service sample-app. Klik Update di kolom Actions. Ikuti petunjuk di layar untuk mengubah Type menjadi Server Load Balancer (SLB).

      Untuk informasi selengkapnya, lihat LoadBalancer.
    3. Setelah pembaruan selesai, tunggu hingga alamat IP publik ditampilkan di kolom External IP daftar Service.

    ab -c 50 -n 2000 http://<EXTERNAL-IP>:8080/
  4. Jalankan perintah berikut untuk melihat detail HPA.

    kubectl get hpa sample-app-memory-high

    Output yang diharapkan:

    NAME                     REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
    sample-app-memory-high   Deployment/sample-app   40886272/1024   1         10        1          22s

External Metrics

  1. Buat file hpa.yaml.

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: sample-app
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: sample-app
      minReplicas: 1
      maxReplicas: 10
      metrics:
        - type: External
          external:
            metric:
              name: http_requests_per_second
              selector:
                matchLabels:
                  job: "sample-app"
    # Hanya target bertipe Value dan AverageValue yang didukung untuk metrik External.
            target:
              type: AverageValue
              averageValue: 500m
  2. Buat aplikasi HPA.

    kubectl apply -f hpa.yaml
  3. Setelah Anda mengaktifkan load balancing untuk Service, jalankan perintah berikut untuk melakukan uji stres.

    Ganti <EXTERNAL-IP> dengan alamat IP publik atau nama domain instance Server Load Balancer (SLB) untuk Service sample-app.

    Expand to view <EXTERNAL-IP> details

    1. Pada halaman ACK Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Network > Services.

    2. Di namespace default, temukan Service sample-app. Klik Update di kolom Actions. Ikuti petunjuk di layar untuk mengubah Type menjadi Server Load Balancer (SLB).

      Untuk informasi selengkapnya, lihat LoadBalancer.
    3. Setelah pembaruan selesai, tunggu hingga alamat IP publik ditampilkan di kolom External IP daftar Service.

    ab -c 50 -n 2000 http://<EXTERNAL-IP>:8080/
  4. Jalankan perintah berikut untuk melihat detail HPA.

    kubectl get hpa sample-app

    Output yang diharapkan:

    NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    sample-app   Deployment/sample-app   33m/500m   1         10        1          7m

Deskripsi lengkap file konfigurasi komponen ack-alibaba-cloud-metrics-adapter

Komponen ack-alibaba-cloud-metrics-adapter mengonversi metrik Prometheus menjadi metrik yang kompatibel dengan HPA melalui langkah-langkah berikut:

  1. Discovery: Komponen ack-alibaba-cloud-metrics-adapter menemukan metrik yang tersedia dari Prometheus.

  2. Association: Mengaitkan metrik dengan resource Kubernetes, seperti pod, node, dan namespace.

  3. Naming: Menentukan nama metrik yang dikonversi agar kompatibel dengan HPA untuk direferensikan oleh HPA.

  4. Querying: Menentukan cara mengkueri data metrik dari Prometheus.

Contoh berikut menunjukkan file konfigurasi lengkap untuk komponen ack-alibaba-cloud-metrics-adapter yang mengonversi metrik http_requests_total yang diekspos oleh kontainer sample-app menjadi metrik http_requests_per_second di HPA.

- seriesQuery: http_requests_total{namespace!="",pod!=""}
  resources:
    overrides:
      namespace: {resource: "namespace"}
      pod: {resource: "pod"}
  name:
    matches: ^(.*)_total
    as: ${1}_per_second
  metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)

Field

Deskripsi

seriesQuery

Data permintaan Bahasa Kueri Prometheus (PromQL).

metricsQuery

Menjalankan operasi agregasi pada data permintaan PromQL di seriesQuery.

Catatan

labelSelector dalam konfigurasi metricsQuery tidak mewarisi label filter dari series_Query.

resources

Label data di PromQL yang dicocokkan dengan resource. resource di sini merujuk pada resource API dalam kluster, seperti pod, namespace, atau node. Anda dapat melihatnya dengan menjalankan perintah kubectl api-resources -o wide. Kunci sesuai dengan LabelName dalam data Prometheus. Pastikan LabelName ini ada dalam data metrik Prometheus.

name

Mengonversi nama metrik Prometheus menjadi nama metrik yang lebih mudah dibaca menggunakan ekspresi reguler. Di sini, http_requests_total dikonversi menjadi http_requests_per_second. Saat mengonversi metrik menggunakan External Metrics, jika nama metrik asli mengandung huruf kapital, ubah nama metrik menjadi huruf kecil saat membuat metrik baru.

  1. Discovery

    Menentukan metrik Prometheus yang akan dikonversi. Anda dapat menggunakan seriesFilters untuk memfilter metrik. seriesQuery dapat digunakan untuk mencari metrik berdasarkan label. Kode berikut memberikan contoh.

    seriesQuery: http_requests_total{namespace!="",pod!=""}
    seriesFilters:
        - isNot: "^container_.*_seconds_total"

    seriesFilters adalah field opsional yang dapat Anda gunakan untuk memfilter metrik:

    • is:<regex>: Mencocokkan metrik yang mengandung ekspresi reguler tertentu.

    • isNot:<regex>: Mencocokkan metrik yang tidak mengandung ekspresi reguler tertentu.

  2. Association

    Menetapkan pemetaan antara label metrik Prometheus dan resource Kubernetes. Label untuk metrik http_requests_total mencakup namespace!="" dan pod!="".

    - seriesQuery: http_requests_total{namespace!="",pod!=""}
      resources:
        overrides:
          namespace: {resource: "namespace"}
          pod: {resource: "pod"}
  3. Naming

    Mengonversi nama metrik Prometheus menjadi nama metrik HPA. Ini tidak mengubah nama metrik Prometheus asli. Jika Anda menggunakan metrik Prometheus asli, Anda tidak perlu mengonfigurasi parameter ini.

    Anda dapat menjalankan perintah kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" untuk melihat semua metrik HPA yang tersedia.

    - seriesQuery: http_requests_total{namespace!="",pod!=""}
      resources:
        overrides:
          namespace: {resource: "namespace"}
          pod: {resource: "pod"}
      name:
        matches: "^(.*)_total"
        as: "${1}_per_second"
  4. Querying

    Templat ini digunakan untuk mengkueri API Prometheus. Adapter ack-alibaba-cloud mengisi templat ini dengan parameter dari HPA, mengirim permintaan ke API Prometheus, dan mengembalikan nilai ke HPA untuk mengaktifkan penskalaan elastis.

    - seriesQuery: http_requests_total{namespace!="",pod!=""}
      resources:
        overrides:
          namespace: {resource: "namespace"}
          pod: {resource: "pod"}
      name:
        matches: ^(.*)_total
        as: ${1}_per_second
      metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[2m])) by (<<.GroupBy>>)

Cara memperoleh URL permintaan data Prometheus

Skenario 1: Pemantauan Prometheus Alibaba Cloud

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih Operations > Prometheus Monitoring.

  3. Di pojok kanan atas, klik Go to Prometheus Service. Di panel navigasi kiri konsol Layanan Prometheus, klik Settings. Lalu, klik tab Settings untuk memperoleh HTTP API Address (Grafana Read Address).

    Kami menyarankan menggunakan jaringan internal. Jika jaringan internal tidak tersedia, Anda dapat menggunakan jaringan publik.

    3.png

  4. Buat informasi autentikasi Prometheus.

    • Prometheus V1: Jika autentikasi token diaktifkan, Anda dapat langsung mengonfigurasi token di konfigurasi komponen.

      image

      ...
          prometheus:
            prometheusHeader:
            - Authorization: {Token}
      ...
    • Prometheus V2: Autentikasi berbasis Pasangan Kunci Akses diaktifkan secara default. Jika Anda belum mengaktifkan akses tanpa kata sandi di konsol Prometheus, Anda harus mengencode Base64 ID AccessKey dan Rahasia AccessKey, lalu memasukkan string yang diencode ke konfigurasi komponen ack-alibaba-cloud-metrics-adapter.

      1. Hasilkan string yang diencode Base64.

        Gabungkan ID AccessKey dan Rahasia AccessKey yang diperoleh dalam format AccessKey:AccessSecret, lalu encode string tersebut dengan Base64.

        echo -n 'accessKey:secretKey' | base64
      2. Konfigurasikan komponen.
        Masukkan string lengkap yang dihasilkan dalam format Basic <string yang diencode Base64> ke field Authorization dari prometheusHeader.

        ...
            prometheus:
              prometheusHeader:
              - Authorization: Basic YWxxxxeQ==
        ...

Skenario 2: Pemantauan Prometheus open source

Untuk pengaturan Prometheus self-managed open source, Anda harus mengekspos API akses Prometheus standar melalui Service. Kemudian, konfigurasikan API tersebut di parameter URL sumber data Prometheus komponen metrics-adapter. Hal ini menyelesaikan konfigurasi sumber data HPA berdasarkan data dari Prometheus open source.

Contoh berikut menggunakan aplikasi Helm Chart edisi komunitas ack-prometheus-operator dari App Marketplace ACK. Untuk informasi selengkapnya, lihat Pemantauan Prometheus open source.

  1. Terapkan solusi pemantauan Prometheus dan ekspos API Prometheus standar.

    • Masuk ke Konsol ACK. Di panel navigasi kiri, pilih Marketplace > Marketplace.

    • Pada halaman App Marketplace, cari dan klik ack-prometheus-operator. Di sisi kanan halaman, klik Deploy.

    • Pada halaman pembuatan, pilih Cluster dan Namespace, ubah Release Name sesuai kebutuhan, lalu klik Next. Ubah Parameters sesuai kebutuhan, lalu klik OK.

    • Lihat hasil penerapan.

      1. Ekspos API Prometheus standar melalui Service. Contoh ini menggunakan Service `ack-prometheus-operator-prometheus`.

      2. Buka `ServiceIP:9090` di browser. Untuk mengaktifkan akses jaringan publik untuk Service menggunakan instance SLB, buka konsol Prometheus.

      3. Di bilah menu bagian atas halaman, klik Status > Targets untuk melihat semua pekerjaan pengumpulan.image.png

        Jika status semua pekerjaan adalah UP, berarti semua pekerjaan pengumpulan berjalan normal.

        image.png

    • Lihat service dan namespace yang sesuai di bagian Labels.

      Contoh ini menggunakan ServiceName `ack-prometheus-operator-prometheus` dan ServiceNamespace `monitoring` untuk mengilustrasikan URL permintaan data Prometheus open source ini.

      http://ack-prometheus-operator-prometheus.monitoring.svc.cluster.local:9090
  2. Konfigurasikan parameter URL sumber data Prometheus komponen untuk memastikan komunikasi normal antara komponen dan Prometheus.

    Jika Anda memilih mengakses API Prometheus standar melalui jaringan publik, Anda dapat merujuk contoh konfigurasi berikut.

      AlibabaCloudMetricsAdapter:
      ......
        prometheus:
          enabled: true
          url: http://your_domain.com:9090   # Ganti your_domain.com dengan alamat IP publik Anda.

    Misalnya, jika Anda menggunakan solusi ack-prometheus-operator, nilai url adalah http://ack-prometheus-operator-prometheus.monitoring.svc.cluster.local:9090.

Untuk informasi selengkapnya tentang cara memperoleh data Prometheus, lihat Tambahkan sumber data Prometheus di Grafana.

Dokumen Terkait