Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
适用于:开发人员 | 高级
本文介绍将 Azure API 管理自承载网关组件部署到 Kubernetes 群集并自动将所有指标发送到 OpenTelemetry 收集器的步骤。
你将学会如何:
- 在 Kubernetes 上配置和部署独立的 OpenTelemetry 收集器
- 使用 OpenTelemetry 指标部署自承载网关。
- 通过在自承载网关上使用 API 来生成指标。
- 从 OpenTelemetry 收集器中获取指标。
先决条件
- 创建一个 Azure API 管理实例
- 使用 Azure CLI、使用 Azure PowerShell 或使用 Azure 门户创建 Azure Kubernetes 群集。
- 在 API 管理实例中预配自承载网关资源。
OpenTelemetry 简介
OpenTelemetry 是一组开源工具和框架,用于以非供应商中立的方式记录、指标和跟踪。
可以将自承载网关配置为自动收集指标并将其发送到 OpenTelemetry 收集器。 这使您能够为自主托管网关提供您自己的指标收集和报告解决方案。
注释
OpenTelemetry 是 Cloud Native Computing Foundation (CNCF) 生态系统的孵化项目。
Metrics
自承载网关将自动开始测量以下指标:
- 请求
- 毫秒持续时间
- BackendDurationInMs (后端持续时间以毫秒为单位)
- ClientDurationInMs
- GatewayDurationInMs
它们每隔 1 分钟被自动导出到配置的 OpenTelemetry 收集器,附带额外的维度。
部署 OpenTelemetry 收集器
我们将首先使用 Helm 在 Kubernetes 上部署独立的 OpenTelemetry 收集器。
小窍门
虽然我们将使用收集器 Helm 图表,但它们还提供 OpenTelemetry 收集器控制器
首先,必须添加 Helm 图表存储库:
添加 Helm 存储库
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts更新存储库以提取最新的 Helm 图表。
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
这样,我们可以使用一个独立的收集器,并在端口 8889 上公开 Prometheus 导出程序。 为了暴露 Prometheus 指标,我们要求 Helm Chart 配置 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 数据收集器。
小窍门
以下步骤将自承载网关部署到 Kubernetes,并使用网关访问令牌(身份验证密钥)对 API Management 实例启用身份验证。 还可以使用 Microsoft Entra ID 将自托管网关部署到 Kubernetes,并启用对 API 管理实例的身份验证。 有关详细信息,请参阅 自承载网关身份验证选项。
安装 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 来生成指标了。
注释
本次演练将调用默认的“Echo API”。
请确保它已配置为:
- 允许 HTTP 请求
- 允许自承载网关公开它
在自托管网关中查询 Echo API:
$ 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.chinacloudapp.cn 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 收集器。
在
http://<collector-service-ip>:8889/metrics上的收集器查询 Prometheus 终结点。 可得到类似于下面的指标:# 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 Chart:
helm uninstall apim-gateway卸载 OpenTelemetry 收集器:
helm uninstall opentelemetry-collector
相关内容
- 若要了解有关自承载网关的详细信息,请参阅 自承载网关概述。
- 详细了解 Azure API 管理网关的可观测性功能。