Zelf-hostende gateway implementeren in Kubernetes met OpenTelemetry-integratie

VAN TOEPASSING OP: Ontwikkelaar | Premium

In dit artikel worden de stappen beschreven voor het implementeren van het zelf-hostende gatewayonderdeel van Azure API Management naar een Kubernetes-cluster en automatisch alle metrische gegevens verzenden naar een OpenTelemetry Collector.

Belangrijk

OpenTelemetry-ondersteuning voor zelf-hostende gateway van Azure API Management is momenteel in preview en vereist 2.0.0 tag of hoger.

U leert het volgende:

  • Een zelfstandige OpenTelemetry Collector configureren en implementeren in Kubernetes
  • Implementeer de zelf-hostende gateway met metrische gegevens van OpenTelemetry.
  • Genereer metrische gegevens door API's te gebruiken op de zelf-hostende gateway.
  • Gebruik de metrische gegevens van de OpenTelemetry Collector.

Vereisten

Inleiding tot OpenTelemetry

OpenTelemetry is een set opensource-hulpprogramma's en frameworks voor logboekregistratie, metrische gegevens en tracering op een leverancierneutrale manier.

Belangrijk

OpenTelemetry-ondersteuning voor zelf-hostende gateway van Azure API Management is momenteel in preview en vereist 2.0.0 tag of hoger.

De zelf-hostende gateway kan worden geconfigureerd om automatisch metrische gegevens te verzamelen en te verzenden naar een OpenTelemetry Collector. Hiermee kunt u uw eigen metrische gegevensverzameling en rapportageoplossing gebruiken voor de zelf-hostende gateway.

Notitie

OpenTelemetry is een incubatingproject van het CNCF-ecosysteem (Cloud Native Computing Foundation).

Metrische gegevens voor

De zelf-hostende gateway begint automatisch met het meten van de volgende metrische gegevens:

  • Verzoeken
  • DurationInMs
  • BackendDurationInMs
  • ClientDurationInMs
  • GatewayDurationInMs

Ze worden elke 1 minuut automatisch geëxporteerd naar de geconfigureerde OpenTelemetry Collector met extra dimensies.

De OpenTelemetry Collector implementeren

We beginnen met het implementeren van een zelfstandige OpenTelemetry Collector in Kubernetes met behulp van Helm.

Tip

Hoewel we de Collector Helm-grafiek gaan gebruiken, bieden ze ook een Operator voor OpenTelemetry Collector

Om te beginnen moeten we de Helm-grafiekopslagplaats toevoegen:

  1. De Helm-opslagplaats toevoegen

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
  2. Werk de opslagplaats bij om de meest recente Helm-grafieken op te halen.

    helm repo update
    
  3. Controleer uw Helm-configuratie door alle beschikbare grafieken weer te nemen.

    $ 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 de grafiekopslagplaats is geconfigureerd, kunnen we de OpenTelemetry Collector implementeren in ons cluster:

  1. Maak een lokaal configuratiebestand met de naam opentelemetry-collector-config.yml met de volgende configuratie:

    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
    

Hierdoor kunnen we een zelfstandige collector gebruiken met de Prometheus-exporteur die beschikbaar wordt gesteld op de poort 8889. Om de prometheus-metrische gegevens beschikbaar te maken, vragen we de Helm-grafiek om een LoadBalancer service te configureren.

Notitie

We schakelen de compacte Jaeger-poort uit omdat deze gebruikmaakt van UDP en LoadBalancer de service staat niet toe dat u meerdere protocollen tegelijk hebt.

  1. Installeer de Helm-grafiek met onze configuratie:

    helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.yml
    
  2. Controleer de installatie door alle resources voor onze Helm-grafiek op te halen

    $ 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. Noteer het externe IP-adres van de service, zodat we deze later kunnen opvragen.

Nu onze OpenTelemetry Collector is geïnstalleerd, kunnen we nu de zelf-hostende gateway implementeren in ons cluster.

De zelf-hostende gateway implementeren

Belangrijk

Voor een gedetailleerd overzicht van het implementeren van de zelf-hostende gateway met Helm en het verkrijgen van de vereiste configuratie raden we u aan dit artikel te lezen.

In deze sectie implementeren we de zelf-hostende gateway naar ons cluster met Helm en configureren we deze om metrische gegevens van OpenTelemetry te verzenden naar de OpenTelemetry Collector.

  1. Installeer de Helm-grafiek en configureer deze om metrische gegevens van OpenTelemetry te gebruiken:

    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
    

Notitie

opentelemetry-collector in de bovenstaande opdracht is de naam van de OpenTelemetry Collector. Werk de naam bij als uw service een andere naam heeft.

  1. Controleer de installatie door alle resources voor onze Helm-grafiek op te halen

    $ 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. Noteer het externe IP-adres van de zelf-hostende gatewayservice, zodat we deze later kunnen opvragen.

Metrische gegevens van OpenTelemetry genereren en gebruiken

Nu zowel onze OpenTelemetry Collector als de zelf-hostende gateway zijn geïmplementeerd, kunnen we de API's gebruiken om metrische gegevens te genereren.

Notitie

We gebruiken de standaard 'Echo-API' voor dit scenario.

Zorg ervoor dat deze is geconfigureerd voor:

  • HTTP-aanvragen toestaan
  • Toestaan dat uw zelf-hostende gateway deze beschikbaar maakt
  1. Voer een query uit op de Echo-API in de zelf-hostende gateway:

    $ 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
    

De zelf-hostende gateway meet nu de aanvraag en verzendt de metrische gegevens naar de OpenTelemetry Collector.

  1. Query's uitvoeren op Prometheus-eindpunt op collector op http://<collector-service-ip>:8889/metrics. Als het goed is, ziet u metrische gegevens die er ongeveer als volgt uitzien:

    # 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
    

Opschonen

Nu de zelfstudie voorbij is, kunt u uw cluster eenvoudig als volgt opschonen:

  1. Verwijder de zelf-hostende Helm-grafiek van de gateway:

    helm uninstall apim-gateway
    
  2. Verwijder de OpenTelemetry Collector:

    helm uninstall opentelemetry-collector
    

Volgende stappen

  • Zie het overzicht van zelf-hostende gateways voor meer informatie over de zelf-hostende gateway.