Udostępnij za pomocą


Wdrażanie bramy własnej na platformie Kubernetes z wykorzystaniem integracji OpenTelemetry

DOTYCZY: Developer | Premium

W tym artykule opisano kroki wdrażania składnika bramy w Azure API Management w klastrze Kubernetes oraz automatyczne wysyłanie wszystkich metryk do modułu zbierającego OpenTelemetry.

Nauczysz się, jak:

  • 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 kolektora 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.

Samohostowaną bramę można skonfigurować tak, aby automatycznie zbierała i wysyłała metryki do OpenTelemetry Collector. Dzięki temu możesz korzystać z własnego rozwiązania do zbierania i raportowania metryk dla samodzielnie zarządzanej 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
  • CzasTrwaniaWMs
  • BackendDurationInMs
  • ClientDurationInMs
  • GatewayDurationInMs

Są one automatycznie eksportowane do skonfigurowanego Kolektora OpenTelemetry co minutę z dodatkowymi wymiarami.

Wdrażanie kolektora 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 Collector, udostępniają również operator OpenTelemetry Collector.

Na początek musimy dodać repozytorium chartu Helm.

  1. Dodaj 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 Prometheus, prosimy o skonfigurowanie usługi LoadBalancer przy użyciu 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 chart 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 chart Helm i skonfiguruj go do korzystania z 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 samohostowanej bramy, abyśmy mogli wysłać później zapytanie.

Generowanie i używanie metryk OpenTelemetry

Po wdrożeniu zarówno Kolektora OpenTelemetry, jak i własnej bramy sieciowej, możemy rozpocząć używanie API w celu wygenerowania metryk.

Uwaga

Na potrzeby tego przewodnika będziemy korzystać z domyślnego "Echo API".

Upewnij się, że jest on skonfigurowany do:

  • Zezwalaj na żądania HTTP
  • Zezwól własnej bramie na uwidocznienie jej
  1. Sprawdź Echo API w bramie hostowanej lokalnie:

    $ 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:00001111-aaaa-2222-bbbb-3333cccc4444
    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 kolektora 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 Helm chart bramy samodzielnie hostowanej.

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

    helm uninstall opentelemetry-collector