Dela via


Distribuera en lokalt installerad gateway till Kubernetes med OpenTelemetry-integrering

GÄLLER FÖR: Utvecklare | Premium

Den här artikeln beskriver stegen för att distribuera den lokala gatewaykomponenten i Azure API Management till ett Kubernetes-kluster och automatiskt skicka alla mått till en OpenTelemetry-insamlare.

Viktigt!

OpenTelemetry-stöd för en lokalt installerad Azure API Management-gateway är för närvarande i förhandsversion och kräver 2.0.0 tagg eller högre.

Du lär dig att:

  • Konfigurera och distribuera en fristående OpenTelemetry-insamlare i Kubernetes
  • Distribuera den lokalt installerade gatewayen med OpenTelemetry-mått.
  • Generera mått genom att använda API:er på den lokala gatewayen.
  • Använd måtten från OpenTelemetry Collector.

Förutsättningar

Introduktion till OpenTelemetry

OpenTelemetry är en uppsättning verktyg och ramverk med öppen källkod för loggning, mått och spårning på ett leverantörsneutralt sätt.

Viktigt!

OpenTelemetry-stöd för en lokalt installerad Azure API Management-gateway är för närvarande i förhandsversion och kräver 2.0.0 tagg eller högre.

Den lokalt installerade gatewayen kan konfigureras för att automatiskt samla in och skicka mått till en OpenTelemetry-insamlare. På så sätt kan du ta med din egen lösning för insamling och rapportering av mått för den lokala gatewayen.

Kommentar

OpenTelemetry är ett inkuberingsprojekt i CNCF-ekosystemet (Cloud Native Computing Foundation).

Mått

Den lokalt installerade gatewayen börjar automatiskt mäta följande mått:

  • begäranden
  • DurationInMs
  • BackendDurationInMs
  • ClientDurationInMs
  • GatewayDurationInMs

De exporteras automatiskt till den konfigurerade OpenTelemetry Collector var 1 minut med ytterligare dimensioner.

Distribuera OpenTelemetry Collector

Vi börjar med att distribuera en fristående OpenTelemetry Collector på Kubernetes med hjälp av Helm.

Dricks

Även om vi kommer att använda diagrammet Collector Helm tillhandahåller de även en OpenTelemetry Collector Operator

Till att börja med måste vi lägga till Helm-diagramlagringsplatsen:

  1. Lägg till Helm-lagringsplatsen

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
  2. Uppdatera lagringsplatsen för att hämta de senaste Helm-diagrammen.

    helm repo update
    
  3. Verifiera Helm-konfigurationen genom att visa alla tillgängliga diagram.

    $ 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
    

Nu när vi har konfigurerat diagramlagringsplatsen kan vi distribuera OpenTelemetry Collector till vårt kluster:

  1. Skapa en lokal konfigurationsfil med namnet opentelemetry-collector-config.yml med följande konfiguration:

    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
    

På så sätt kan vi använda en fristående insamlare där Prometheus-exportören exponeras på port 8889. För att exponera Prometheus-måtten ber vi Helm-diagrammet att konfigurera en LoadBalancer tjänst.

Kommentar

Vi inaktiverar den kompakta Jaeger-porten eftersom den använder UDP och LoadBalancer tjänsten tillåter inte att du har flera protokoll samtidigt.

  1. Installera Helm-diagrammet med vår konfiguration:

    helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.yml
    
  2. Verifiera installationen genom att hämta alla resurser för vårt Helm-diagram

    $ 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. Anteckna tjänstens externa IP-adress så att vi kan fråga den senare.

Med vår OpenTelemetry Collector installerad kan vi nu distribuera den lokalt installerade gatewayen till vårt kluster.

Distribuera den lokalt installerade gatewayen

Viktigt!

För en detaljerad översikt över hur du distribuerar den lokalt installerade gatewayen med Helm och hur du hämtar den konfiguration som krävs rekommenderar vi att du läser den här artikeln.

I det här avsnittet distribuerar vi den lokalt installerade gatewayen till vårt kluster med Helm och konfigurerar den för att skicka OpenTelemetry-mått till OpenTelemetry Collector.

  1. Installera Helm-diagrammet och konfigurera det så att det använder OpenTelemetry-mått:

    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
    

Kommentar

opentelemetry-collector i kommandot ovan är namnet på OpenTelemetry Collector. Uppdatera namnet om tjänsten har ett annat namn.

  1. Verifiera installationen genom att hämta alla resurser för vårt Helm-diagram

    $ 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. Anteckna den externa IP-adressen för den lokalt installerade gatewayens tjänst, så att vi kan fråga den senare.

Generera och använda OpenTelemetry-måtten

Nu när både vår OpenTelemetry Collector och den lokalt installerade gatewayen har distribuerats kan vi börja använda API:erna för att generera mått.

Kommentar

Vi kommer att använda standardvärdet "Echo API" för den här genomgången.

Kontrollera att den är konfigurerad för att:

  • Tillåt HTTP-begäranden
  • Tillåt att din egen värdbaserade gateway exponerar den
  1. Fråga Echo-API:et i den lokala gatewayen:

    $ 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
    

Den lokalt installerade gatewayen mäter nu begäran och skickar måtten till OpenTelemetry Collector.

  1. Fråga Prometheus-slutpunkten på insamlaren på http://<collector-service-ip>:8889/metrics. Du bör se mått som liknar följande:

    # 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
    

Rensning

Nu när självstudien är över kan du enkelt rensa klustret enligt följande:

  1. Avinstallera Helm-diagrammet för den lokalt installerade gatewayen:

    helm uninstall apim-gateway
    
  2. Avinstallera OpenTelemetry Collector:

    helm uninstall opentelemetry-collector
    

Nästa steg

  • Mer information om den lokalt installerade gatewayen finns i Översikt över lokalt installerad gateway.