Menyebarkan gateway yang dihost sendiri ke Kubernetes dengan integrasi OpenTelemetry

BERLAKU UNTUK: Pengembang | Premium

Artikel ini menjelaskan langkah-langkah untuk menyebarkan komponen gateway yang dihost sendiri dari Azure API Management ke kluster Kubernetes dan secara otomatis mengirim semua metrik ke OpenTelemetry Collector.

Penting

Dukungan OpenTelemetry untuk gateway yang dihost sendiri Azure API Management saat ini dalam pratinjau dan memerlukan 2.0.0 tag atau yang lebih tinggi.

Anda akan mempelajari cara untuk:

  • Mengonfigurasi dan menyebarkan OpenTelemetry Collector mandiri di Kubernetes
  • Sebarkan gateway yang dihost sendiri dengan metrik OpenTelemetry.
  • Buat metrik dengan menggunakan API di gateway yang dihost sendiri.
  • Gunakan metrik dari OpenTelemetry Collector.

Prasyarat

Pengantar OpenTelemetry

OpenTelemetry adalah set alat dan kerangka kerja sumber terbuka untuk pengelogan, metrik, dan pelacakan dengan cara vendor-netral.

Penting

Dukungan OpenTelemetry untuk gateway yang dihost sendiri Azure API Management saat ini dalam pratinjau dan memerlukan 2.0.0 tag atau yang lebih tinggi.

Gateway yang dihost sendiri dapat dikonfigurasi untuk secara otomatis mengumpulkan dan mengirim metrik ke OpenTelemetry Collector. Ini memungkinkan Anda untuk membawa koleksi metrik Anda sendiri dan solusi pelaporan untuk gateway yang dihost sendiri.

Catatan

OpenTelemetry adalah proyek inkubating dari ekosistem Cloud Native Computing Foundation (CNCF).

Metrik

Gateway yang dihost sendiri akan secara otomatis mulai mengukur metrik berikut:

  • Permintaan
  • DurationInMs
  • BackendDurationInMs
  • ClientDurationInMs
  • GatewayDurationInMs

Mereka secara otomatis diekspor ke OpenTelemetry Collector yang dikonfigurasi setiap 1 menit dengan dimensi tambahan.

Menyebarkan OpenTelemetry Collector

Kita akan mulai dengan menyebarkan OpenTelemetry Collector mandiri di Kubernetes dengan menggunakan Helm.

Tip

Sementara kita akan menggunakan bagan Collector Helm, mereka juga menyediakan Operator OpenTelemetry Collector

Untuk memulainya, kita harus menambahkan repositori bagan Helm:

  1. Menambahkan repositori Helm

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
  2. Perbarui repositori untuk mengambil bagan Helm terbaru.

    helm repo update
    
  3. Verifikasi konfigurasi Helm Anda dengan mencantumkan semua bagan yang tersedia.

    $ helm search repo open-telemetry
    NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
    open-telemetry/opentelemetry-collector  0.8.1           0.37.1          OpenTelemetry Collector Helm chart for Kubernetes
    open-telemetry/opentelemetry-operator   0.4.0           0.37.0          OpenTelemetry Operator Helm chart for Kubernetes
    

Sekarang setelah repositori bagan dikonfigurasi, kita dapat menyebarkan OpenTelemetry Collector ke kluster kita:

  1. Buat file konfigurasi lokal bernama opentelemetry-collector-config.yml dengan konfigurasi berikut:

    mode: deployment
    config:
      exporters:
        prometheus:
          endpoint: "0.0.0.0:8889"
          namespace: azure_apim
          send_timestamps: true
      service:
        pipelines:
          metrics:
            exporters:
            - prometheus
    service:
      type: LoadBalancer
    ports:
      jaeger-compact:
        enabled: false
      prom-exporter:
        enabled: true
        containerPort: 8889
        servicePort: 8889
        protocol: TCP
    

Ini memungkinkan kita untuk menggunakan kolektor mandiri dengan pengekspor Prometheus yang terekspos di port 8889. Untuk mengekspos metrik Prometheus, kami meminta bagan Helm untuk mengonfigurasi LoadBalancer layanan.

Catatan

Kita menonaktifkan port Jaeger yang ringkas karena menggunakan UDP dan LoadBalancer layanan tidak memungkinkan Anda untuk memiliki beberapa protokol pada saat yang sama.

  1. Instal bagan Helm dengan konfigurasi kita:

    helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.yml
    
  2. Memverifikasi penginstalan dengan mendapatkan semua sumber daya untuk bagan Helm kita

    $ kubectl get all -l app.kubernetes.io/instance=opentelemetry-collector
    NAME                                           READY   STATUS    RESTARTS   AGE
    pod/opentelemetry-collector-58477c8c89-dstwd   1/1     Running   0          27m
    
    NAME                              TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                                                                                       AGE
    service/opentelemetry-collector   LoadBalancer   10.0.175.135   20.103.18.53   14250:30982/TCP,14268:32461/TCP,4317:31539/TCP,4318:31581/TCP,8889:32420/TCP,9411:30003/TCP   27m
    
    NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/opentelemetry-collector   1/1     1            1           27m
    
    NAME                                                 DESIRED   CURRENT   READY   AGE
    replicaset.apps/opentelemetry-collector-58477c8c89   1         1         1       27m
    
  3. Perhatikan IP eksternal layanan, sehingga kita dapat mengkuerinya nanti.

Dengan terinstalnya OpenTelemetry Collector, kita sekarang dapat menyebarkan gateway yang dihost sendiri ke kluster kita.

Menyebarkan gateway yang dihost sendiri

Penting

Untuk gambaran umum terperinci tentang cara menyebarkan gateway yang dihost sendiri dengan Helm dan cara mendapatkan konfigurasi yang diperlukan, sebaiknya baca artikel ini.

Di bagian ini, kita akan menyebarkan gateway yang dihost sendiri ke kluster kita dengan Helm dan mengonfigurasinya untuk mengirim metrik OpenTelemetry ke OpenTelemetry Collector.

  1. Instal bagan Helm dan konfigurasikan untuk menggunakan metrik OpenTelemetry:

    helm install azure-api-management-gateway \
                 --set gateway.configuration.uri='<your configuration url>' \
                 --set gateway.auth.key='<your auth token>' \
                 --set observability.opentelemetry.enabled=true \
                 --set observability.opentelemetry.collector.uri=http://opentelemetry-collector:4317 \
                 --set service.type=LoadBalancer \
                 azure-apim-gateway/azure-api-management-gateway
    

Catatan

opentelemetry-collector dalam perintah di atas adalah nama OpenTelemetry Collector. Perbarui nama jika layanan Anda memiliki nama yang berbeda.

  1. Memverifikasi penginstalan dengan mendapatkan semua sumber daya untuk bagan Helm kita

    $ kubectl get all -l app.kubernetes.io/instance=apim-gateway
    NAME                                                            READY   STATUS    RESTARTS   AGE
    pod/apim-gateway-azure-api-management-gateway-fb77c6d49-rffwq   1/1     Running   0          63m
    
    NAME                                                TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)                         AGE
    service/apim-gateway-azure-api-management-gateway   LoadBalancer   10.0.67.177   20.71.82.110   8080:32267/TCP,8081:32065/TCP   63m
    
    NAME                                                        READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/apim-gateway-azure-api-management-gateway   1/1     1            1           63m
    
    NAME                                                                  DESIRED   CURRENT   READY   AGE
    replicaset.apps/apim-gateway-azure-api-management-gateway-fb77c6d49   1         1         1       63m
    
  2. Perhatikan IP eksternal layanan gateway yang dihost sendiri, sehingga kita dapat mengkuerinya nanti.

Membuat dan menggunakan metrik OpenTelemetry

Sekarang setelah OpenTelemetry Collector dan gateway yang dihost sendiri disebarkan, kita dapat mulai menggunakan API untuk menghasilkan metrik.

Catatan

Kita akan menggunakan "Echo API" default untuk panduan ini.

Pastikan dikonfigurasi untuk:

  • Mengizinkan permintaan HTTP
  • Mengizinkan gateway yang dihost sendiri untuk mengeksposnya
  1. Mengkueri Echo API di gateway yang dihost sendiri:

    $ curl -i "http://<self-hosted-gateway-ip>:8080/echo/resource?param1=sample&subscription-key=abcdef0123456789"
    HTTP/1.1 200 OK
    Date: Mon, 20 Dec 2021 12:58:09 GMT
    Server: Microsoft-IIS/8.5
    Content-Length: 0
    Cache-Control: no-cache
    Pragma: no-cache
    Expires: -1
    Accept: */*
    Host: echoapi.cloudapp.net
    User-Agent: curl/7.68.0
    X-Forwarded-For: 10.244.1.1
    traceparent: 00-3192030c89fd7a60ef4c9749d6bdef0c-f4eeeee46f770061-01
    Request-Id: |3192030c89fd7a60ef4c9749d6bdef0c.f4eeeee46f770061.
    Request-Context: appId=cid-v1:c24f5e00-aa25-47f2-bbb5-035847e7f52a
    X-Powered-By: Azure API Management - http://api.azure.com/,ASP.NET
    X-AspNet-Version: 4.0.30319
    

Gateway yang dihost sendiri sekarang akan mengukur permintaan dan mengirim metrik ke OpenTelemetry Collector.

  1. Kuerikan titik akhir Prometheus pada kolektor di http://<collector-service-ip>:8889/metrics. Anda akan melihat metrik yang serupa dengan berikut ini:

    # HELP azure_apim_BackendDurationInMs 
    # TYPE azure_apim_BackendDurationInMs histogram
    azure_apim_BackendDurationInMs_bucket{Hostname="20.71.82.110",le="5"} 0 1640093731340
    [...]
    azure_apim_BackendDurationInMs_count{Hostname="20.71.82.110"} 22 1640093731340
    # HELP azure_apim_ClientDurationInMs 
    # TYPE azure_apim_ClientDurationInMs histogram
    azure_apim_ClientDurationInMs_bucket{Hostname="20.71.82.110",le="5"} 22 1640093731340
    [...]
    azure_apim_ClientDurationInMs_count{Hostname="20.71.82.110"} 22 1640093731340
    # HELP azure_apim_DurationInMs 
    # TYPE azure_apim_DurationInMs histogram
    azure_apim_DurationInMs_bucket{Hostname="20.71.82.110",le="5"} 0 1640093731340
    [...]
    azure_apim_DurationInMs_count{Hostname="20.71.82.110"} 22 1640093731340
    # HELP azure_apim_GatewayDurationInMs 
    # TYPE azure_apim_GatewayDurationInMs histogram
    azure_apim_GatewayDurationInMs_bucket{Hostname="20.71.82.110",le="5"} 0 1640093731340
    [...]
    azure_apim_GatewayDurationInMs_count{Hostname="20.71.82.110"} 22 1640093731340
    # HELP azure_apim_Requests 
    # TYPE azure_apim_Requests counter
    azure_apim_Requests{BackendResponseCode="200",BackendResponseCodeCategory="2xx",Cache="None",GatewayId="Docs",Hostname="20.71.82.110",LastErrorReason="None",Location="GitHub",ResponseCode="200",ResponseCodeCategory="2xx",Status="Successful"} 22 1640093731340
    

Membersihkan

Sekarang setelah tutorial selesai, Anda dapat dengan mudah membersihkan kluster Anda sebagai berikut:

  1. Hapus instalan gateway yang dihost sendiri menggunakan bagan Helm:

    helm uninstall apim-gateway
    
  2. Hapus instalan OpenTelemetry Collector:

    helm uninstall opentelemetry-collector
    

Langkah berikutnya