توزيع البوابة ذاتية الاستضافة إلى Kubernetes من خلال تكامل OpenTelemetry
ينطبق على: المطور | بريميوم
توضّح هذه المقالة خطوات توزيع مكون البوابة ذاتية الاستضافة لـ Azure APIM إلى مجموعة Kubernetes وإرسال جميع المقاييس تلقائيا إلى OpenTelemetry Collector.
هام
دعم OpenTelemetry لبوابة Azure APIM المستضافة ذاتيا قيد المعاينة حاليًا ويتطلّب 2.0.0
علامة أو عنصر أعلى.
ستتعلم كيفية:
- تكوين OpenTelemetry Collector وتوزيعه مستقل على Kubernetes
- نشر البوابة المستضافة ذاتيا باستخدام قياسات OpenTelemetry.
- إنشاء القياسات عن طريق استهلاك واجهات برمجة التطبيقات على البوابة المستضافة ذاتيا.
- استخدم القياسات من OpenTelemetry Collector.
المتطلبات الأساسية
- إنشاء مثيل إدارة Azure API
- أنشئ نظام مجموعة Azure Kubernetes باستخدام Azure CLI أو باستخدام Azure PowerShell أو باستخدام مدخل Microsoft Azure.
- قم بتوفير مورد بوابة مستضافة ذاتيًا في مثيل API Management لديك.
مدخل إلى 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:
إضـافة مستودع 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 Collector إلى مجموعتنا:
إنشاء ملف تكوين محلي يُسمى
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
بالحصول على بروتوكولات متعددة في نفس الوقت.
تثبيت مخطط 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 Collector، يمكننا الآن توزيع البوابة المستضافة ذاتيا إلى مجموعتنا.
توزيع البوابة المستضافة ذاتيًا
هام
للحصول على نظرة عامة مفصلة حول كيفية نشر البوابة المستضافة ذاتيا من خلال مخطط Helm وكيفية الحصول على التكوين المطلوب، نوصي بقراءة هذه المقالة.
في هذا القسم، سننشر البوابة المستضافة ذاتيا إلى مجموعتنا من خلال مخطط Helm وتكوينها لإرسال مقاييس OpenTelemetry إلى OpenTelemetry Collector.
ثبّت مخطط 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. حدّث الاسم إذا كان للخدمة اسم مختلف.
تحقق من التثبيت عن طريق الحصول على جميع الموارد لمخطط 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 Collector والبوابة المستضافة ذاتيا، يمكننا البدء في استهلاك واجهات برمجة التطبيقات لإنشاء مقاييس.
إشعار
سنستهلك "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.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.
استعلم عن نقطة نهاية 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 Collector:
helm uninstall opentelemetry-collector
الخطوات التالية
- لمعرفة المزيد حول البوابة ذاتية الاستضافة، راجع نظرة عامة على البوابة ذاتية الاستضافة.
- لمعرفة المزيد بشأن قدرات المراقبة لبوابات APIM في Azure.