Menyebarkan gateway yang dihost sendiri ke Kubernetes dengan integrasi OpenTelemetry
BERLAKU UNTUK: Pengembang | Premi
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
- Buat sebuah instans API Management Azure
- Buat kluster Azure Kubernetes menggunakan Azure CLI, menggunakan Azure PowerShell, atau menggunakan portal Azure.
- Sediakan sumber daya gateway yang dihost sendiri di instans API Management Anda.
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:
Menambahkan repositori Helm
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
Perbarui repositori untuk mengambil bagan Helm terbaru.
helm repo update
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:
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.
Instal bagan Helm dengan konfigurasi kita:
helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.yml
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
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.
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.
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
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
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.
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:
Hapus instalan gateway yang dihost sendiri menggunakan bagan Helm:
helm uninstall apim-gateway
Hapus instalan OpenTelemetry Collector:
helm uninstall opentelemetry-collector
Langkah berikutnya
- Untuk mempelajari selengkapnya tentang gateway yang dihost sendiri, lihat Gambaran umum gateway yang dihost sendiri.
- Untuk mempelajari selengkapnya tentang kemampuan observabilitas gateway Azure API Management.