Wdrażanie własnej bramy na platformie Kubernetes przy użyciu integracji openTelemetry
DOTYCZY: Developer | Premia
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
- Utwórz wystąpienie usługi Azure API Management
- Utwórz klaster usługi Azure Kubernetes przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal.
- Aprowizuj zasób własnej bramy w wystąpieniu usługi API Management.
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.
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:
Dodawanie repozytorium Helm
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
Zaktualizuj repozytorium, aby pobrać najnowsze wykresy programu Helm.
helm repo update
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:
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.
Zainstaluj pakiet Helm przy użyciu naszej konfiguracji:
helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.yml
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
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.
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ę.
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
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
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: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 modułu zbierającego OpenTelemetry.
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:
Odinstaluj wykres helm bramy hostowanej samodzielnie:
helm uninstall apim-gateway
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.
- Aby dowiedzieć się więcej na temat możliwości obserwacji bram usługi Azure API Management.