توزيع البوابة ذاتية الاستضافة إلى Kubernetes من خلال تكامل OpenTelemetry

ينطبق على: المطور | بريميوم

توضّح هذه المقالة خطوات توزيع مكون البوابة ذاتية الاستضافة لـ Azure APIM إلى مجموعة Kubernetes وإرسال جميع المقاييس تلقائيا إلى OpenTelemetry Collector.

هام

دعم OpenTelemetry لبوابة Azure APIM المستضافة ذاتيا قيد المعاينة حاليًا ويتطلّب 2.0.0 علامة أو عنصر أعلى.

‏‫ستتعلم كيفية:

  • تكوين OpenTelemetry Collector وتوزيعه مستقل على Kubernetes
  • نشر البوابة المستضافة ذاتيا باستخدام قياسات OpenTelemetry.
  • إنشاء القياسات عن طريق استهلاك واجهات برمجة التطبيقات على البوابة المستضافة ذاتيا.
  • استخدم القياسات من OpenTelemetry Collector.

المتطلبات الأساسية

مدخل إلى OpenTelemetry

OpenTelemetry هي مجموعة من الأدوات وأطر العمل مفتوحة المصدر للتسجيل والقياس والتتبع بطريقة محايدة للمورّد.

هام

دعم OpenTelemetry لبوابة Azure APIM المستضافة ذاتيا قيد المعاينة حاليًا ويتطلّب 2.0.0 علامة أو عنصر أعلى.

يمكن تكوين البوابة المستضافة ذاتيا لجمع المقاييس وإرسالها بشكل تلقائي إلى OpenTelemetry Collector. يسمح لك ذلك بتقديم حل مجموعة المقاييس وإعداد التقارير الخاص بك للبوابة المستضافة ذاتيا.

إشعار

يعتبر OpenTelemetry مشروع احتضانللنظام البنائي Cloud Native Computing Foundation (CNCF).

المقاييس

ستبدأ البوابة المستضافة ذاتيا في اتخاذ المقاييس التالية بشكل تلقائي:

  • الطلبات
  • DurationInMs
  • BackendDurationInMs
  • ClientDurationInMs
  • GatewayDurationInMs

تُصدّر تلقائيا إلى OpenTelemetry Collector المكوّن كل دقيقة واحدة بأبعاد إضافية.

توزيع OpenTelemetry Collector

سنبدأ بتوزيع OpenTelemetry Collector بشكل مستقل على Kubernetes باستخدام Helm.

تلميح

بينما سنستخدم مخطط Collector Helm، فإنها توفر أيضا OpenTelemetry Collector Operator

للبدء، يجب علينا إضافة مستودع لمخطط Helm:

  1. إضـافة مستودع Helm

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
  2. تحديث المستودع لإحضار أحدث مخططات Helm البيانية.

    helm repo update
    
  3. تحقق من تكوين 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 Collector إلى مجموعتنا:

  1. إنشاء ملف تكوين محلي يُسمى 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 exporter كونه معرّضًا على المنفذ 8889. لعرض مقاييس Prometheus، نطلب من مخطط Helm تكوين LoadBalancer خدمة.

إشعار

نعطّل منفذ Jaeger المضغوط نظرا لأنه يستخدم UDP ولا تسمح لك خدمة LoadBalancer بالحصول على بروتوكولات متعددة في نفس الوقت.

  1. تثبيت مخطط Helm البياني من خلال التكوين الخاص بنا:

    helm install opentelemetry-collector open-telemetry/opentelemetry-collector --values .\opentelemetry-collector-config.yml
    
  2. تحقق من التثبيت عن طريق الحصول على جميع الموارد لمخطط 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. دوّن ملاحظة بشأن عنوان IP الخارجي للخدمة، حتى نتمكن من الاستعلام عنه لاحقا.

من خلال تثبيت OpenTelemetry Collector، يمكننا الآن توزيع البوابة المستضافة ذاتيا إلى مجموعتنا.

توزيع البوابة المستضافة ذاتيًا

هام

للحصول على نظرة عامة مفصلة حول كيفية نشر البوابة المستضافة ذاتيا من خلال مخطط Helm وكيفية الحصول على التكوين المطلوب، نوصي بقراءة هذه المقالة.

في هذا القسم، سننشر البوابة المستضافة ذاتيا إلى مجموعتنا من خلال مخطط Helm وتكوينها لإرسال مقاييس OpenTelemetry إلى OpenTelemetry Collector.

  1. ثبّت مخطط 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 Collector. حدّث الاسم إذا كان للخدمة اسم مختلف.

  1. تحقق من التثبيت عن طريق الحصول على جميع الموارد لمخطط 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. دوّن ملاحظة بشأن عنوان IP الخارجي لخدمة البوابة المستضافة ذاتيا حتى نتمكن من الاستعلام عنها لاحقا.

إنشاء مقـاييس OpenTelemetry واستهلاكها

الآن بعد توزيع كل من OpenTelemetry Collector والبوابة المستضافة ذاتيا، يمكننا البدء في استهلاك واجهات برمجة التطبيقات لإنشاء مقاييس.

إشعار

سنستهلك "Echo API" الافتراضي لهذه المعاينة السريعة.

تأكد من إجراء تكوينه إلى:

  • السَماح بطلبات HTTP
  • السمَاح للبوابة المستضافة ذاتيا بتعرّضها
  1. الاستعلام عن 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.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
    

ستجري البوابة المستضافة ذاتيا الآن قياس الطلب وإرسال المقاييس إلى OpenTelemetry Collector.

  1. استعلم عن نقطة نهاية 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
    

تنظيف

الآن بعد انتهاء البرنامج التعليمي، يمكنك تنظيف نظام المجموعة الخاص بك بسهولة كما يلي:

  1. إلغـاء تثبيت مخطط Helm البياني للبوابة المستضافة ذاتيا:

    helm uninstall apim-gateway
    
  2. إلغـاء تثبيت OpenTelemetry Collector:

    helm uninstall opentelemetry-collector
    

الخطوات التالية