Distribuire un gateway self-hosted in Kubernetes con l'integrazione di OpenTelemetry
SI APPLICA A: Sviluppatore | Premium
Questo articolo descrive i passaggi per distribuire il componente gateway self-hosted di Gestione API di Azure in un cluster Kubernetes e inviare automaticamente tutte le metriche a un agente di raccolta OpenTelemetry.
Importante
Il supporto di OpenTelemetry per il gateway self-hosted di Gestione API di Azure è attualmente in anteprima e richiede il tag 2.0.0
o versione successiva.
Scopri come:
- Configurare e distribuire un agente di raccolta OpenTelemetry autonomo in Kubernetes
- Distribuire il gateway self-hosted con le metriche OpenTelemetry.
- Generare metriche usando le API sul gateway self-hosted.
- Usare le metriche dell'agente di raccolta OpenTelemetry.
Prerequisiti
- Creare un'istanza di Gestione API di Azure
- Creare un cluster Azure Kubernetes usando l'interfaccia della riga di comando di Azure, usando Azure PowerShell o usando il portale di Azure.
- Effettuare il provisioning di una risorsa gateway self-hosted nell'istanza di Gestione API.
Introduzione a OpenTelemetry
OpenTelemetry è un set di strumenti e framework open source per la registrazione, le metriche e la traccia in modo indipendente dal fornitore.
Importante
Il supporto di OpenTelemetry per il gateway self-hosted di Gestione API di Azure è attualmente in anteprima e richiede il tag 2.0.0
o versione successiva.
Il gateway self-hosted può essere configurato per raccogliere e inviare automaticamente le metriche a un agente di raccolta OpenTelemetry. In questo modo è possibile usare la propria soluzione di raccolta e creazione di report delle metriche per il gateway self-hosted.
Nota
OpenTelemetry è un progetto di incubazione dell'ecosistema Cloud Native Computing Foundation (CNCF).
Metrica
Il gateway self-hosted inizierà automaticamente a misurare le metriche seguenti:
- Richieste
- DurationInMs
- BackendDurationInMs
- ClientDurationInMs
- GatewayDurationInMs
Queste vengono esportate automaticamente nell'agente di raccolta OpenTelemetry configurato ogni minuto, con dimensioni aggiuntive.
Distribuire l'agente di raccolta OpenTelemetry
Si inizierà distribuendo un agente di raccolta OpenTelemetry autonomo in Kubernetes usando Helm.
Suggerimento
Anche se si usa il grafico Helm dell'agente di raccolta, forniscono anche un operatore dell'agente di raccolta OpenTelemetry
Per iniziare, è necessario aggiungere il repository dei grafici Helm:
Aggiungere il repository Helm
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
Aggiornare il repository per recuperare i grafici Helm più recenti.
helm repo update
Verificare la configurazione Helm elencando tutti i grafici disponibili.
$ 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
Dopo aver configurato il repository dei grafici, è possibile distribuire sul cluster l’agente di raccolta OpenTelemetry:
Creare un file di configurazione locale denominato
opentelemetry-collector-config.yml
con la configurazione seguente: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
In questo modo è possibile usare un agente di raccolta autonomo con l'utilità di esportazione Prometheus esposta sulla porta 8889
. Per esporre le metriche Prometheus, viene chiesto al grafico Helm di configurare un servizio LoadBalancer
.
Nota
La porta Jaeger compatta viene disabilitata perché usa UDP e il servizio LoadBalancer
non consente di avere più protocolli contemporaneamente.
Installare il grafico Helm con la configurazione:
helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.yml
Verificare l'installazione ottenendo tutte le risorse per il grafico Helm
$ 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
Prendere nota dell'indirizzo IP esterno del servizio, in modo da poterlo interrogare in un secondo momento.
Con l'agente di raccolta OpenTelemetry installato, è ora possibile distribuire il gateway self-hosted nel cluster.
Distribuire il gateway self-hosted
Importante
Per una panoramica dettagliata su come distribuire il gateway self-hosted con Helm e su come ottenere la configurazione necessaria, è consigliabile leggere questo articolo.
In questa sezione, il gateway self-hosted verrà distribuito nel cluster con Helm e configurato per inviare le metriche OpenTelemetry all'agente di raccolta OpenTelemetry.
Installare il grafico Helm e configurarlo per l'uso delle metriche 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
Nota
opentelemetry-collector
nel comando precedente è il nome dell'agente di raccolta OpenTelemetry. Aggiornare il nome se il servizio ha un nome diverso.
Verificare l'installazione ottenendo tutte le risorse per il grafico Helm
$ 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
Prendere nota dell'indirizzo IP esterno del servizio del gateway self-hosted, in modo da poterlo interrogare in un secondo momento.
Generare e usare le metriche OpenTelemetry
Ora che sono stati distribuiti sia l'agente di raccolta OpenTelemetry che il gateway self-hosted, è possibile iniziare a usare le API per generare le metriche.
Nota
Per questa procedura dettagliata verrà usata l'API Echo predefinita.
Assicurarsi che sia configurata per:
- Consentire richieste HTTP
- Consentire al gateway self-hosted di esporla
Eseguire una query sull'API Echo nel gateway self-hosted:
$ 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
Il gateway self-hosted ora misurerà la richiesta e invierà le metriche all'agente di raccolta OpenTelemetry.
Eseguire una query sull'endpoint Prometheus in merito all’agente di raccolta in
http://<collector-service-ip>:8889/metrics
. Le metriche visualizzate saranno simili alle seguenti:# 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
Pulizia
Ora che l'esercitazione è finita, è possibile pulire facilmente il cluster come segue:
Disinstallare il grafico Helm del gateway self-hosted:
helm uninstall apim-gateway
Disinstallare l'agente di raccolta OpenTelemetry:
helm uninstall opentelemetry-collector
Passaggi successivi
- Per altre informazioni sul gateway self-hosted, vedere Panoramica del gateway self-hosted.
- Per altre informazioni sulle funzionalità di osservabilità dei gateway di Gestione API di Azure.