دفق سجلات المكونات المدارة في Azure Spring Apps في الوقت الفعلي

إشعار

يعد Azure Spring Apps هو الاسم الجديد لخدمة Azure Spring Cloud. رغم أن الخدمة تحمل اسماً جديداً، سترى الاسم القديم في بعض الأماكن لفترة من الوقت بينما نعمل على تحديث الأصول مثل لقطات الشاشة، ومقاطع الفيديو، والرسوم التخطيطية.

تنطبق هذه المقالة على:❌ Basic/Standard ✔️ Enterprise

توضح هذه المقالة كيفية استخدام Azure CLI للحصول على سجلات في الوقت الحقيقي للمكونات المدارة لاستكشاف الأخطاء وإصلاحها. يمكنك أيضا استخدام إعدادات التشخيص لتحليل بيانات التشخيص في Azure Spring Apps. لمزيد من المعلومات، راجع تحليل السجلات والمقاييس باستخدام إعدادات التشخيص. لمزيد من المعلومات حول سجلات الدفق، راجع دفق سجلات وحدة تحكم تطبيق Azure Spring Apps في الوقت الفعلي وسجلات مهام Stream Azure Spring Apps في الوقت الفعلي.

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

  • Azure CLI مع ملحق Azure Spring Apps، الإصدار 1.24.0 أو أعلى. يمكنك تثبيت الملحق باستخدام الأمر التالي: az extension add --name spring.

المكونات المدارة المدعومة

يسرد الجدول التالي المكونات المدارة المدعومة حاليا، جنبا إلى جنب مع المكونات الفرعية الخاصة بها:

مكون مدار المكونات الفرعية
خدمة تكوين التطبيق application-configuration-service
flux-source-controller (مدعوم في إصدار ACS Gen2)
بوابة Spring Cloud spring-cloud-gateway
spring-cloud-gateway-operator
خادم تكوين Spring Cloud config-server

يمكنك استخدام الأمر التالي لسرد جميع المكونات الفرعية:

az spring component list
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name>

تعيين دور Azure

لدفق سجلات المكونات المدارة، يجب أن يكون لديك أدوار Azure ذات الصلة المعينة لك. يسرد الجدول التالي الأدوار المطلوبة والعمليات التي يتم منح هذه الأدوار لها الأذونات:

مكون مدار والدور المطلوب العمليات
خدمة تكوين التطبيق دور قارئ سجل خدمة تكوين تطبيق Azure Spring Apps Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action
بوابة Spring Cloud دور قارئ سجل بوابة Spring Cloud لتطبيقات Azure Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action
خادم تكوين Spring Cloud دور قارئ سجل خادم تكوين Spring Cloud في Azure Spring Apps Microsoft.AppPlatform/Spring/configService/logstream/action

استخدم الخطوات التالية لتعيين دور Azure باستخدام مدخل Microsoft Azure:

  1. افتح مدخل Azure.

  2. افتح مثيل خدمة Azure Spring Apps.

  3. في جزء التنقل، حدد Access Control (IAM).

  4. في صفحة Access Control (IAM)، حدد Add ثم حدد Add role assignment.

    لقطة شاشة لمدخل Azure تعرض صفحة التحكم في الوصول (IAM) مع تمييز خيار إضافة تعيين دور.

  5. في صفحة إضافة تعيين دور، في قائمة الاسم ، ابحث عن الدور الهدف وحدده ثم حدد التالي.

    لقطة شاشة لمدخل Azure تعرض صفحة إضافة تعيين دور مع تمييز اسم دور قارئ سجل خدمة تكوين التطبيق.

  6. حدد الأعضاء ثم ابحث عن اسم المستخدم وحدده.

  7. حدد مراجعة + تعيين.

سرد كافة المثيلات في مكون

استخدم الأمر التالي لسرد كافة المثيلات في مكون:

az spring component instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --component <component-name>

على سبيل المثال، لسرد كافة المثيلات في flux-source-controller إصدار ACS Gen2، استخدم الأمر التالي:

az spring component instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --component flux-source-controller

عرض سجلات الطرف

يوفر هذا القسم أمثلة على استخدام Azure CLI لإنتاج سجلات ذيل.

عرض سجلات الذيل لمثيل معين

لعرض سجلات الذيل لمثيل معين، استخدم az spring component logs الأمر مع الوسيطة -i/--instance ، كما هو موضح في القسم التالي.

عرض سجلات الطرف لمثيل خدمة تكوين التطبيق

استخدم الأمر التالي لعرض سجلات الذيل ل application-configuration-service:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name application-configuration-service \
    --instance <instance-name>

بالنسبة إلى ACS Gen2، يقوم الأمر بإرجاع سجلات مشابهة للمثال التالي:

...
2023-12-18T07:09:54.020Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8090 (https)
2023-12-18T07:09:54.116Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting service [Tomcat]
2023-12-18T07:09:54.117Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:54.522Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:54.524Z  INFO  16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 14100 ms
2023-12-18T07:09:56.920Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (https) with context path ''
2023-12-18T07:09:57.528Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2023-12-18T07:09:57.529Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting service [Tomcat]
2023-12-18T07:09:57.529Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:57.629Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:57.629Z  INFO  16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 603 ms
2023-12-18T07:09:57.824Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
2023-12-18T07:09:58.127Z  INFO  16715 --- [main] o.springframework.boot.StartupInfoLogger : Started ReconcilerApplication in 21.005 seconds (process running for 22.875)
...

عرض سجلات الذيل لمثيل flux-source-controller

استخدم الأمر التالي لعرض سجلات الذيل ل flux-source-controller:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name flux-source-controller \
    --instance <instance-name>

يقوم الأمر بإرجاع سجلات مشابهة للمثال التالي:

...
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"controller-runtime.metrics","msg":"Metrics server is starting to listen","addr":":8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"setup","msg":"starting manager"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","path":"/metrics","kind":"metrics","addr":"[::]:8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","kind":"health probe","addr":"[::]:9440"}
{"level":"info","ts":"2023-12-18T07:07:54.817Z","logger":"runtime","msg":"attempting to acquire leader lease flux-system/source-controller-leader-election...\n"}
{"level":"info","ts":"2023-12-18T07:07:54.830Z","logger":"runtime","msg":"successfully acquired lease flux-system/source-controller-leader-election\n"}
...

عرض سجلات الذيل لمثيل spring-cloud-gateway

استخدم الأمر التالي لعرض سجلات الذيل ل spring-cloud-gateway:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name spring-cloud-gateway \
    --instance <instance-name>

يقوم الأمر بإرجاع سجلات مشابهة للمثال التالي:

...
2023-12-11T14:13:40.310Z  INFO 1 --- [           main] i.p.s.c.g.s.SsoDeactivatedConfiguration  : SSO is deactivated, setting up default security filters
2023-12-11T14:13:40.506Z  INFO 1 --- [           main] .h.HazelcastReactiveSessionConfiguration : Configuring Hazelcast as a session management storage
2023-12-11T14:13:51.008Z  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8443
2023-12-11T14:13:51.810Z  INFO 1 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 7 endpoint(s) beneath base path '/actuator'
2023-12-11T14:13:52.410Z  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8090
2023-12-11T14:13:52.907Z  INFO 1 --- [           main] i.p.s.c.g.r.h.HazelcastRateLimitsRemover : Removing Hazelcast map 'GLOBAL_RATE_LIMIT' with rate limit information
2023-12-11T14:13:52.912Z  INFO 1 --- [           main] i.p.s.cloud.gateway.GatewayApplication   : Started GatewayApplication in 36.084 seconds (process running for 38.651)
...

عرض سجلات الذيل لمثيل عامل تشغيل spring-cloud-gateway

استخدم الأمر التالي لعرض سجلات الذيل ل spring-cloud-gateway-operator:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name spring-cloud-gateway-operator \
    --instance <instance-name>

يقوم الأمر بإرجاع سجلات مشابهة للمثال التالي:

...
2023-12-01T08:37:05.080Z  INFO 1 --- [           main] c.v.t.s.OperatorApplication              : Starting OperatorApplication v2.0.6 using Java 17.0.7 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2023-12-01T08:37:05.157Z  INFO 1 --- [           main] c.v.t.s.OperatorApplication              : No active profile set, falling back to 1 default profile: "default"
2023-12-01T08:37:14.379Z  INFO 1 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path '/actuator'
2023-12-01T08:37:15.274Z  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
2023-12-01T08:37:15.366Z  INFO 1 --- [           main] c.v.t.s.OperatorApplication              : Started OperatorApplication in 11.489 seconds (process running for 12.467)
...

عرض سجلات الذيل لمثيل خادم التكوين

استخدم الأمر التالي لعرض سجلات الذيل ل config-server:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name config-server \
    --instance <instance-name>

يقوم الأمر بإرجاع سجلات مشابهة للمثال التالي:

...
{"app":"config-server","ts":"2024-05-08T05:38:29.44Z","logger":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext","level":"INFO","class":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext","method":"prepareWebApplicationContext","file":"ServletWebServerApplicationContext.java","line":291,"thread":"main","message":"Root WebApplicationContext: initialization completed in 3771 ms"}
{"app":"config-server","ts":"2024-05-08T05:38:31.058Z","logger":"com.microsoft.azure.spring.service.CloudConfigServerApplication","level":"INFO","class":"org.springframework.boot.StartupInfoLogger","method":"logStarted","file":"StartupInfoLogger.java","line":57,"thread":"main","message":"Started CloudConfigServerApplication in 6.888 seconds (process running for 8.986)"}
...

عرض سجلات الذيل لكافة المثيلات في أمر واحد

لعرض سجلات الذيل لكافة المثيلات، استخدم الوسيطة --all-instances ، كما هو موضح في الأمر التالي. اسم المثيل هو بادئة كل سطر سجل. عند وجود مثيلات متعددة، تتم طباعة السجلات على دفعة لكل مثيل، لذلك لا يتم تداخل سجلات مثيل واحد مع سجلات مثيل آخر.

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --all-instances

دفق سجلات جديدة باستمرار

بشكل افتراضي، az spring component logs يطبع السجلات الموجودة فقط التي تم دفقها إلى وحدة التحكم ثم يخرج. إذا كنت تريد دفق سجلات جديدة، أضف الوسيطة -f/--follow .

عند استخدام -f/--follow الخيار لتعقب السجلات الفورية، ترسل خدمة تدفق سجل Azure Spring Apps سجلات كشف أخطاء الاتصال إلى العميل كل دقيقة ما لم يكن المكون يكتب السجلات باستمرار. تستخدم رسائل سجل رسالة كشف أخطاء الاتصال التنسيق التالي: 2023-12-18 09:12:17.745: No log from server.

دفق السجلات لمثيل معين

استخدم الأمر التالي لدفق السجلات لمثيل معين:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --instance <instance-name> \
    --follow

سجلات الدفق لجميع المثيلات

استخدم الأمر التالي لدفق السجلات لجميع المثيلات:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --all-instances \
    --follow

عند دفق سجلات لمثيلات متعددة في مكون، تتداخل سجلات مثيل واحد مع سجلات أخرى.

دفق السجلات في مثيل حقن الشبكة الظاهرية

بالنسبة لمثيل Azure Spring Apps المنشور في شبكة ظاهرية مخصصة، يمكنك الوصول إلى دفق السجل بشكل افتراضي من شبكة خاصة. لمزيد من المعلومات، راجع توزيع Azure Spring Apps في شبكة ظاهرية

تمكنك Azure Spring Apps أيضا من الوصول إلى سجلات المكونات المدارة في الوقت الحقيقي من شبكة عامة.

إشعار

يؤدي تمكين نقطة نهاية دفق السجل على الشبكة العامة إلى إضافة عنوان IP عام وارد إلى شبكتك الظاهرية. تأكد من توخي الحذر إذا كان هذا مصدر قلق بالنسبة لك.

استخدم الخطوات التالية لتمكين نقطة نهاية تدفق السجل على الشبكة العامة:

  1. حدد مثيل خدمة Azure Spring Apps المنشور في شبكتك الظاهرية ثم حدد Networking في قائمة التنقل.

  2. حدد علامة التبويب حقن Vnet.

  3. قم بتبديل حالة موارد Dataplane على الشبكة العامة إلى تمكين لتمكين نقطة نهاية تدفق السجل على الشبكة العامة. وتستغرق هذه العملية بضع دقائق.

    لقطة شاشة لمدخل Azure تعرض صفحة الشبكات مع تحديد علامة تبويب حقن الشبكة الظاهرية وتمييز قسم استكشاف الأخطاء وإصلاحها.

بعد تمكين نقطة النهاية العامة لدفق السجل، يمكنك الوصول إلى سجلات المكونات المدارة من شبكة عامة تماما كما يمكنك الوصول إلى مثيل عادي.

تأمين نسبة استخدام الشبكة إلى نقطة النهاية العامة لتدفق السجل

يستخدم دفق السجل للمكونات المدارة Azure RBAC لمصادقة الاتصالات بالمكونات. ونتيجة لذلك، يمكن فقط للمستخدمين الذين لديهم الأدوار المناسبة الوصول إلى السجلات.

لضمان أمان المكونات المدارة عند الكشف عن نقطة نهاية عامة لها، قم بتأمين نقطة النهاية عن طريق تصفية حركة مرور الشبكة إلى الخدمة الخاصة بك باستخدام مجموعة أمان الشبكة. لمزيد من المعلومات، راجع البرنامج التعليمي: تصفية نسبة استخدام الشبكة باستخدام مجموعة أمان الشبكة باستخدام مدخل Microsoft Azure. تحتوي مجموعة أمان الشبكة على قواعد أمان تسمح (أو ترفض) نسبة استخدام الشبكة الوارد (أو الصادر) إلى عدة أنواع من موارد Azure. يُمكنك تحديد، لكل قاعدة أمان، مصدر ووجهة ومنفذ وبروتوكول.

إشعار

إذا لم تتمكن من الوصول إلى سجلات المكونات المدارة في مثيل حقن الشبكة الظاهرية من الإنترنت بعد تمكين نقطة نهاية عامة لدفق السجل، فتحقق من مجموعة أمان الشبكة لمعرفة ما إذا كنت قد سمحت بنسبة استخدام الشبكة الواردة هذه.

يعرض الجدول التالي مثالا على قاعدة أساسية نوصي بها. يمكنك استخدام أوامر مثل nslookup مع نقطة <service-name>.private.azuremicroservices.io النهاية للحصول على عنوان IP الهدف للخدمة.

أولوية الاسم المنفذ البروتوكول المصدر الوجهة الإجراء
100 اسم القاعدة 80 TCP الإنترنت عنوان IP للخدمة السماح
110 اسم القاعدة 443 TCP الإنترنت عنوان IP للخدمة السماح

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