Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
ОБЛАСТЬ ПРИМЕНЕНИЯ: Разработчик | Премия
В этой статье описаны шаги по развертыванию компонента локального шлюза Управления API Azure в кластере Kubernetes и автоматической отправке всех метрик в сборщик OpenTelemetry.
Вы узнаете, как:
- Настройка и развертывание изолированного сборщика OpenTelemetry в Kubernetes.
- Разверните локальный шлюз с метриками OpenTelemetry.
- Создание метрик путем потребления API на локальном шлюзе.
- Используйте метрики из сборщика OpenTelemetry.
Предварительные условия
- Создание экземпляра службы управления API Azure
- Создайте кластер Azure Kubernetes с помощью Azure CLI, Azure PowerShell или портала Azure.
- Подготовьте ресурс независимого шлюза в экземпляре Управления API.
Введение в OpenTelemetry
OpenTelemetry — это набор средств и платформ с открытым кодом для ведения журналов, метрик и трассировки независимым от поставщика способом.
Локальный шлюз можно настроить для автоматического сбора и отправки метрик в сборщик OpenTelemetry. Это позволяет использовать собственное решение для сбора метрик и создания отчетов для локального шлюза.
Примечание.
OpenTelemetry — это проект экосистемы Cloud Native Computing Foundation (CNCF).
Метрики
Локальный шлюз автоматически начнет измерять следующие метрики:
- Запросы
- ДлительностьВМс
- BackendDurationInMs;
- ClientDurationInMs;
- GatewayDurationInMs.
Они автоматически экспортируются в настроенный сборщик OpenTelemetry каждую минуту с дополнительными измерениями.
Разверните сборщик OpenTelemetry
Начнем с развертывания изолированного сборщика OpenTelemetry в Kubernetes с помощью Helm.
Совет
Хотя мы будем использовать диаграмму сборщика Helm, также предоставляется оператор сборщика OpenTelemetry.
Для начала необходимо добавить репозиторий диаграмм Helm:
Добавьте репозиторий Helm.
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-chartsОбновите репозиторий, чтобы получить последние Helm charts.
helm repo updateПроверьте конфигурацию Helm, отобразив список всех доступных диаграмм.
$ 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
Теперь, когда у нас настроен репозиторий диаграмм, мы можем развернуть сборщик OpenTelemetry в нашем кластере:
Создайте локальный файл конфигурации
opentelemetry-collector-config.ymlсо следующей конфигурацией: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
Это позволяет нам использовать автономный сборщик с экспортером Prometheus, который доступен через порт 8889. Чтобы экспортировать метрики Prometheus, мы просим чарт Helm настроить LoadBalancer службу.
Примечание.
Мы отключаем компактный порт Jaeger, если он использует UDP, а служба LoadBalancer не позволяет одновременно использовать несколько протоколов.
Установите чарт Helm с нашей конфигурацией:
helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.ymlПроверьте установку, получив все ресурсы для диаграммы 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Запишите внешний IP-адрес службы, чтобы мы могли запросить его позже.
После установки сборщика OpenTelemetry теперь можно развернуть шлюз на собственном хостинге в нашем кластере.
Развертывание локального шлюза
Внимание
Подробные сведения о развертывании локального шлюза с помощью Helm и о том, как получить необходимую конфигурацию, приведены в этой статье.
В этом разделе мы развернем локальный шлюз в кластере с помощью Helm и настроим его для отправки метрик OpenTelemetry в сборщик OpenTelemetry.
Установите диаграмму Helm и настройте ее для использования метрик 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
Примечание.
opentelemetry-collector в приведенной выше команде — имя сборщика OpenTelemetry. Измените имя, если у службы оно другое.
Проверьте установку, получив все ресурсы для чарта 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Запишите внешний IP-адрес службы локального шлюза, чтобы мы могли запросить его позже.
Создание и использование метрик OpenTelemetry
Теперь, когда развернуты как сборщик OpenTelemetry, так и локальный шлюз, можно начать использовать API для создания метрик.
Примечание.
В этом пошаговом руководстве мы будем использовать стандартный API Echo.
Настройте его таким образом, чтобы он:
- разрешал HTTP-запросы;
- Разрешите вашему автономному шлюзу открыть доступ к нему.
Запрашивать API Echo в самостоятельно размещённом шлюзе.
$ 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
Теперь локальный шлюз будет измерять запрос и отправлять метрики в сборщик OpenTelemetry.
Запросите конечную точку Prometheus на коллекторе
http://<collector-service-ip>:8889/metrics. Метрики должны иметь следующий вид:# 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
Очистка
Вы прошли учебник и теперь можете легко очистить кластер описанным ниже образом.
Удалите диаграмму Helm для самостоятельно размещённого шлюза.
helm uninstall apim-gatewayУдалите сборщик OpenTelemetry:
helm uninstall opentelemetry-collector
Связанный контент
- Дополнительные сведения о независимом шлюзе см. в разделе Обзор независимого шлюза.
- Дополнительные сведения о функциях наблюдаемости шлюзов API Azure.