Wdrażanie własnej bramy na platformie Kubernetes przy użyciu integracji openTelemetry

DOTYCZY: Developer | Premium

W tym artykule opisano kroki wdrażania składnika bramy własnej bramy usługi Azure API Management w klastrze Kubernetes i automatycznego wysyłania wszystkich metryk do modułu zbierającego OpenTelemetry.

Ważne

Obsługa protokołu OpenTelemetry dla własnej bramy usługi Azure API Management jest obecnie dostępna w wersji zapoznawczej i wymaga 2.0.0 tagu lub nowszego.

Dowiedz się, jak odbywa się:

  • Konfigurowanie i wdrażanie autonomicznego modułu zbierającego OpenTelemetry na platformie Kubernetes
  • Wdróż bramę hostowaną samodzielnie przy użyciu metryk OpenTelemetry.
  • Generowanie metryk przez korzystanie z interfejsów API w bramie hostowanej samodzielnie.
  • Użyj metryk z modułu zbierającego OpenTelemetry.

Wymagania wstępne

Wprowadzenie do platformy OpenTelemetry

OpenTelemetry to zestaw narzędzi i struktur typu open source do rejestrowania, metryk i śledzenia w sposób neutralny dla dostawcy.

Ważne

Obsługa protokołu OpenTelemetry dla własnej bramy usługi Azure API Management jest obecnie dostępna w wersji zapoznawczej i wymaga 2.0.0 tagu lub nowszego.

Bramę hostowaną samodzielnie można skonfigurować tak, aby automatycznie zbierała i wysyłała metryki do modułu zbierającego OpenTelemetry. Dzięki temu możesz korzystać z własnego rozwiązania do zbierania metryk i raportowania dla własnej bramy.

Uwaga

OpenTelemetry to inkubujący projekt ekosystemu Cloud Native Computing Foundation (CNCF).

Metryki

Brama hostowana samodzielnie automatycznie zacznie mierzyć następujące metryki:

  • Żądania
  • DurationInMs
  • BackendDurationInMs
  • ClientDurationInMs
  • GatewayDurationInMs

Są one automatycznie eksportowane do skonfigurowanego modułu zbierającego OpenTelemetry co 1 minutę z dodatkowymi wymiarami.

Wdrażanie modułu zbierającego OpenTelemetry

Zaczniemy od wdrożenia autonomicznego modułu zbierającego OpenTelemetry na platformie Kubernetes przy użyciu programu Helm.

Napiwek

Chociaż będziemy używać wykresu Helm modułu zbierającego moduł zbierający, udostępniają również operator modułu zbierającego OpenTelemetry

Aby zacząć od, musimy dodać repozytorium pakietu Helm:

  1. Dodawanie repozytorium Helm

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
  2. Zaktualizuj repozytorium, aby pobrać najnowsze wykresy programu Helm.

    helm repo update
    
  3. Zweryfikuj konfigurację programu Helm, wyświetlając listę wszystkich dostępnych wykresów.

    $ 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
    

Po skonfigurowaniu repozytorium wykresów możemy wdrożyć moduł zbierający OpenTelemetry w klastrze:

  1. Utwórz lokalny plik konfiguracji o nazwie opentelemetry-collector-config.yml z następującą konfiguracją:

    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
    

Dzięki temu możemy użyć autonomicznego modułu zbierającego z eksporterem Prometheus udostępnianym na porcie 8889. Aby uwidocznić metryki Rozwiązania Prometheus, prosimy o skonfigurowanie LoadBalancer usługi za pomocą wykresu Helm.

Uwaga

Wyłączamy kompaktowy port Jaeger, ponieważ używa protokołu UDP, a LoadBalancer usługa nie zezwala na jednoczesne używanie wielu protokołów.

  1. Zainstaluj pakiet Helm przy użyciu naszej konfiguracji:

    helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.yml
    
  2. Zweryfikuj instalację, uzyskując wszystkie zasoby dla wykresu programu 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
    
  3. Zanotuj zewnętrzny adres IP usługi, abyśmy mogli wysłać do niej zapytanie później.

Po zainstalowaniu modułu zbierającego OpenTelemetry możemy teraz wdrożyć bramę hostowaną samodzielnie w naszym klastrze.

Wdrażanie bramy hostowanej samodzielnie

Ważne

Aby zapoznać się ze szczegółowym omówieniem sposobu wdrażania własnej bramy za pomocą programu Helm i sposobu uzyskiwania wymaganej konfiguracji, zalecamy przeczytanie tego artykułu.

W tej sekcji wdrożymy bramę hostowaną samodzielnie w klastrze za pomocą programu Helm i skonfigurujemy ją tak, aby wysyłała metryki OpenTelemetry do modułu zbierającego OpenTelemetry.

  1. Zainstaluj pakiet Helm i skonfiguruj go do używania metryk 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
    

Uwaga

opentelemetry-collector w powyższym poleceniu jest nazwą modułu zbierającego OpenTelemetry. Zaktualizuj nazwę, jeśli usługa ma inną nazwę.

  1. Zweryfikuj instalację, uzyskując wszystkie zasoby dla wykresu programu 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
    
  2. Zanotuj zewnętrzny adres IP usługi własnej bramy, abyśmy mogli wysłać do niego zapytanie później.

Generowanie i używanie metryk OpenTelemetry

Po wdrożeniu zarówno modułu zbierającego OpenTelemetry, jak i własnej bramy, możemy rozpocząć korzystanie z interfejsów API w celu wygenerowania metryk.

Uwaga

Na potrzeby tego przewodnika będziemy używać domyślnego interfejsu API echa.

Upewnij się, że jest on skonfigurowany do:

  • Zezwalaj na żądania HTTP
  • Zezwól własnej bramie na uwidocznienie jej
  1. Wykonaj zapytanie względem interfejsu API echo w bramie 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
    

Brama hostowana samodzielnie będzie teraz mierzyć żądanie i wysyłać metryki do modułu zbierającego OpenTelemetry.

  1. Wykonaj zapytanie dotyczące punktu końcowego Prometheus w modułze zbierającym w systemie http://<collector-service-ip>:8889/metrics. Powinny zostać wyświetlone metryki podobne do następujących:

    # 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
    

Czyszczenie

Teraz, gdy samouczek się skończył, możesz łatwo wyczyścić klaster w następujący sposób:

  1. Odinstaluj wykres helm bramy hostowanej samodzielnie:

    helm uninstall apim-gateway
    
  2. Odinstaluj moduł zbierający OpenTelemetry:

    helm uninstall opentelemetry-collector
    

Następne kroki

  • Aby dowiedzieć się więcej na temat własnej bramy, zobacz Omówienie własnej bramy.