OpenTelemetry tümleştirmesi ile Kubernetes'e şirket içinde barındırılan ağ geçidi dağıtma

ŞUNLAR IÇIN GEÇERLIDIR: Geliştirici | Premium

Bu makalede, Azure API Management'ın şirket içinde barındırılan ağ geçidi bileşenini bir Kubernetes kümesine dağıtma ve tüm ölçümleri otomatik olarak bir OpenTelemetry Toplayıcısı'na gönderme adımları açıklanmaktadır.

Önemli

Azure API Management şirket içinde barındırılan ağ geçidi için OpenTelemetry desteği şu anda önizleme aşamasındadır ve etiket veya daha yüksek bir değer gerektirir 2.0.0 .

Şunları yapmayı öğreneceksiniz:

  • Kubernetes'te tek başına OpenTelemetry Toplayıcısı yapılandırma ve dağıtma
  • OpenTelemetry ölçümleriyle şirket içinde barındırılan ağ geçidini dağıtın.
  • Şirket içinde barındırılan ağ geçidinde API'leri kullanarak ölçümler oluşturun.
  • OpenTelemetry Collector'ın ölçümlerini kullanın.

Önkoşullar

OpenTelemetry'ye giriş

OpenTelemetry , satıcıdan bağımsız bir şekilde günlüğe kaydetmeye, ölçümlere ve izlemeye yönelik açık kaynak araçlar ve çerçeveler kümesidir.

Önemli

Azure API Management şirket içinde barındırılan ağ geçidi için OpenTelemetry desteği şu anda önizleme aşamasındadır ve etiket veya daha yüksek bir değer gerektirir 2.0.0 .

Şirket içinde barındırılan ağ geçidi, ölçümleri otomatik olarak toplayacak ve OpenTelemetry Toplayıcısı'na gönderecek şekilde yapılandırılabilir. Bu, şirket içinde barındırılan ağ geçidi için kendi ölçüm toplama ve raporlama çözümünüzü getirmenizi sağlar.

Not

OpenTelemetry, Cloud Native Computing Foundation (CNCF) ekosisteminin bir inkübating projesidir.

Ölçümler

Şirket içinde barındırılan ağ geçidi otomatik olarak aşağıdaki ölçümleri ölçmeye başlar:

  • İstekler
  • DurationInMs
  • BackendDurationInMs
  • ClientDurationInMs
  • GatewayDurationInMs

Bunlar otomatik olarak yapılandırılmış OpenTelemetry Collector'a her 1 dakikada bir ek boyutlar ile dışarı aktarılır.

OpenTelemetry Toplayıcısı'nı dağıtma

Helm kullanarak Kubernetes'te tek başına bir OpenTelemetry Toplayıcısı dağıtarak başlayacağız.

İpucu

Toplayıcı Helm grafiğini kullanacağız ancak openTelemetry Collector işleci de sağlıyorlar

İlk olarak Helm grafik deposunu eklemeliyiz:

  1. Helm deposunu ekleme

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
  2. En son Helm grafiklerini getirmek için depoyu güncelleştirin.

    helm repo update
    
  3. Kullanılabilir tüm grafikleri listeleyerek Helm yapılandırmanızı doğrulayın.

    $ 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
    

Grafik deposunu yapılandırdığımıza göre, OpenTelemetry Collector'ı kümemize dağıtabiliriz:

  1. Aşağıdaki yapılandırmayla adlı opentelemetry-collector-config.yml bir yerel yapılandırma dosyası oluşturun:

    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
    

Bu, tek başına bir toplayıcı kullanmamıza izin verir Prometheus ihracatçısı bağlantı noktasında 8889kullanıma sunuldu. Prometheus ölçümlerini kullanıma açmak için Helm grafiğinden bir LoadBalancer hizmet yapılandırmasını istiyoruz.

Not

UDP kullandığından kompakt Jaeger bağlantı noktasını devre dışı bırakıyoruz ve LoadBalancer hizmet aynı anda birden çok protokole sahip olmanıza izin vermiyor.

  1. Helm grafiğini yapılandırmamızla yükleyin:

    helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.yml
    
  2. Helm grafiğimizin tüm kaynaklarını alarak yüklemeyi doğrulayın

    $ 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. Daha sonra sorgulayabilmemiz için hizmetin dış IP'sini not alın.

OpenTelemetry Collector'ı yükledikten sonra şirket içinde barındırılan ağ geçidini kümemize dağıtabiliriz.

Şirket içinde barındırılan ağ geçidini dağıtma

Önemli

Helm ile şirket içinde barındırılan ağ geçidini dağıtma ve gerekli yapılandırmayı alma hakkında ayrıntılı bir genel bakış için bu makaleyi okumanızı öneririz.

Bu bölümde helm ile kümemize şirket içinde barındırılan ağ geçidini dağıtacak ve OpenTelemetry ölçümlerini OpenTelemetry Collector'a gönderecek şekilde yapılandıracağız.

  1. Helm grafiğini yükleyin ve OpenTelemetry ölçümlerini kullanacak şekilde yapılandırın:

    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
    

Not

opentelemetry-collector yukarıdaki komutta OpenTelemetry Toplayıcısı'nın adıdır. Hizmetinizin adı farklıysa adı güncelleştirin.

  1. Helm grafiğimizin tüm kaynaklarını alarak yüklemeyi doğrulayın

    $ 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. Şirket içinde barındırılan ağ geçidi hizmetinin dış IP'sini not alarak daha sonra sorgulayabiliriz.

OpenTelemetry ölçümlerini oluşturma ve kullanma

Artık hem OpenTelemetry Toplayıcımız hem de şirket içinde barındırılan ağ geçidi dağıtıldığından, ölçümleri oluşturmak için API'leri kullanmaya başlayabiliriz.

Not

Bu kılavuz için varsayılan "Echo API'sini" tüketeceğiz.

Şu şekilde yapılandırıldığından emin olun:

  • HTTP isteklerine izin ver
  • Şirket içinde barındırılan ağ geçidinizin bunu kullanıma sunmasına izin verme
  1. Şirket içinde barındırılan ağ geçidinde Echo API'sini sorgula:

    $ 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
    

Şirket içinde barındırılan ağ geçidi artık isteği ölçecek ve ölçümleri OpenTelemetry Collector'a gönderecek.

  1. üzerinde toplayıcıda Prometheus uç noktasını sorgula http://<collector-service-ip>:8889/metrics. Aşağıdakine benzer ölçümler görmeniz gerekir:

    # 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
    

Temizleme

Öğretici sona erdiği için kümenizi aşağıdaki gibi kolayca temizleyebilirsiniz:

  1. Şirket içinde barındırılan ağ geçidi Helm grafiğini kaldırın:

    helm uninstall apim-gateway
    
  2. OpenTelemetry Toplayıcısı'nı kaldırın:

    helm uninstall opentelemetry-collector
    

Sonraki adımlar

  • Azure API Management ağ geçitlerinin gözlemlenebilirlik özellikleri hakkında daha fazla bilgi edinmek için.