تتبّع توزيعه باستخدام ميزة Spring Cloud Sleuth وStackdriver Trace

تتبّع توزيعه باستخدام ميزة Spring Cloud Sleuth وStackdriver Trace

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: فبراير 10, 2020
account_circleتأليف موظف Google

1. نظرة عامة

التتبُّع الموزَّع مهم للحصول على إحصاءات وملاحظة في بنية الخدمات الصغيرة متعددة المستويات. عند ربط الخدمة بسلاسل الخدمة، بدءًا من الخدمة (أ) ووصولاً إلى الخدمة (ب) ووصولاً إلى الخدمة (ج)، من المهم معرفة أن المكالمات قد تمت بنجاح وكذلك وقت الاستجابة في كل خطوة.

وفي الربيع، يمكنك استخدام Spring Cloud Sleuth لإضافة أداة التتبع الموزَّعة إلى تطبيقك بسلاسة. بشكل تلقائي، يمكنه إعادة توجيه بيانات التتبُّع إلى Zipkin.

تتضمن Google Cloud Platform أداة Stackdriver Trace، وهي خدمة مُدارة تسمح لك بتخزين بيانات التتبُّع بدون الحاجة إلى إدارة مثيل Zipkin أو مساحة التخزين الخاصة بك. يمكن أن ينشئ Stackdriver Trace أيضًا تقارير توزيع وقت الاستجابة ويكتشف تلقائيًا التراجع في الأداء.

لديك خياران لاستخدام تتبع Stackdriver من تطبيق Spring Bot:

  1. استخدام وكيل Stackdriver Trace Zipkin وإعداد Spring Cloud Sleuth لاستخدام هذا الخادم الوكيل كنقطة نهاية Zipkin
  2. أو يمكنك استخدام تتبع Spring Cloud Cloud Platform الذي يتكامل بسلاسة مع Spring Cloud Sleuth ويعيد توجيه بيانات التتبع مباشرة إلى Stackdriver Trace.

في هذا الدرس التطبيقي حول الترميز، ستتعلّم طريقة إنشاء تطبيق Spring Bot جديد واستخدام تتبّع Spring Cloud Cloud للتتبّع الموزَّع.

ما ستتعرّف عليه

  • كيفية إنشاء تطبيق Spring Kiosk Java وضبط تتبّع Stackdriver.

المتطلبات اللازمة

  • مشروع Google Cloud Platform
  • متصفح، مثل Chrome أو Firefox
  • الإلمام بأدوات تحرير النصوص في Linux مثل Vim أو EMACs أو Nano

كيف ستستخدم هذا البرنامج التعليمي؟

كيف تقيّم تجربة تصميم تطبيقات HTML/CSS على الويب؟

كيف تقيّم تجربتك في استخدام خدمات Google Cloud Platform؟

2. الإعداد والمتطلّبات

إعداد البيئة الذاتية

إذا لم يكن لديك حساب على Google (Gmail أو Google Apps)، يجب إنشاء حساب. تسجيل الدخول إلى وحدة تحكُّم Google Cloud Platform (console.cloud.google.com) وإنشاء مشروع جديد:

لقطة شاشة من 2016-02-10 الساعة 12:45:26.png

عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان PROJECT_ID.

بعد ذلك، ستحتاج إلى تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

من المفترض ألا يكلفك العمل على هذا الدرس التطبيقي أكثر من بضعة دولارات، ولكن قد يترتّب عليك أكثر إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل (راجع قسم "عرض الأسعار التقديري" في نهاية هذا المستند).

يكون المستخدمون الجدد لخدمة Google Cloud Platform مؤهَّلين للاستفادة من فترة تجريبية مجانية تبلغ 300 دولار أمريكي.

Google Cloud Shell

يمكن تشغيل Google Cloud وKubernetes عن بُعد من الكمبيوتر المحمول، وفي هذا الدرس التطبيقي حول الترميز، سنستخدم Google Cloud Shell، وهو عبارة عن بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

تفعيل Google Cloud Shell

من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

ثم انقر على "بدء Cloud Shell":

ينبغي ألا تستغرق إدارة الحسابات والاتصال بالبيئة أكثر من بضع لحظات.

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفِّر هذه الآلة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتمّ تشغيله على Google Cloud، ما يحسّن كثيرًا أداء الشبكة والمصادقة. ويمكن إتمام معظم عملك إن لم يكن كلّه في هذا الدرس ببساطة من خلال متصفّح أو جهاز Google Chromebook فقط.

عند الاتصال بخدمة Cloud Shell، من المفترض أن تتم مصادقتها وأنّ المشروع قد سبق وتم ضبطه على PROJECT_ID.

شغِّل الأمر التالي في Cloud Shell لتأكيد أنّك تمت مصادقته:

gcloud auth list

مخرجات الأوامر

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

مخرجات الأوامر

[core]
project = <PROJECT_ID>

إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:

gcloud config set project <PROJECT_ID>

مخرجات الأوامر

Updated property [core/project].

3. إنشاء خدمة REST لموسم الربيع

بعد إطلاق Cloud Shell، يمكنك استخدام سطر الأوامر لإنشاء تطبيق Spring Bot جديد باستخدام Spring Initializr:

$ curl https://start.spring.io/starter.tgz -d packaging=jar \
 
-d dependencies=web,lombok,cloud-gcp,cloud-starter-sleuth \
 
-d baseDir=trace-service-one | tar -xzvf - \
 
&& cd trace-service-one

إنشاء وحدة تحكُّم REST جديدة من خلال إضافة فئة جديدة:

src/main/java/com/example/demo/WorkController.java

package com.example.demo;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Random;

@RestController
@Slf4j
public class WorkController {
 
Random r = new Random();

 
public void meeting() {
   
try {
      log
.info("meeting...");
     
// Delay for random number of milliseconds.
     
Thread.sleep(r.nextInt(500));
   
} catch (InterruptedException e) {
   
}
 
}

 
@GetMapping("/")
 
public String work() {
   
// What is work? Meetings!
   
// When you hit this URL, it'll call meetings() 5 times.
   
// Each time will have a random delay.
    log
.info("starting to work");
   
for (int i = 0; i < 5; i++) {
     
this.meeting();
   
}
    log
.info("finished!");
   
return "finished work!";
 
}
}

يمكنك بدء تشغيل تطبيق Spring Bot عادةً باستخدام المكون الإضافي Spring Bot. لنتخطّى اختبارات هذا الدرس التطبيقي:

$ ./mvnw -DskipTests spring-boot:run

بعد بدء تشغيل التطبيق، انقر على رمز معاينة الويب في شريط أدوات Cloud Shell واختَر preview على المنفذ 8080.

بعد الانتظار لفترة قصيرة، من المفترض أن تظهر النتيجة:

في Cloud Shell، من المفترض أن تظهر لك أيضًا رسائل السجلّ التي تحتوي على رقم تعريف التتبُّع ورقم تعريف الامتداد:

4. استخدام تتبّع Stackdriver

تفعيل واجهة برمجة تطبيقات تتبع Stackdriver

تحتاج إلى تفعيل واجهة برمجة تطبيقات تتبع Stackdriver أولاً لاستخدام تتبع Stackdriver لتخزين بيانات التتبع. لتفعيل واجهة برمجة التطبيقات، انتقِل إلى خدمات واجهة برمجة التطبيقات → المكتبة

ابحث عن Stackdriver Trace.

انقر على Stackdriver Trace API، ثم انقر على Enable (تفعيل) إذا لم يسبق لك تفعيله.

إعداد بيانات الاعتماد التلقائية للتطبيق

في هذا الدرس التطبيقي، عليك ضبط بيانات اعتماد تلقائية للتطبيق. سيتم اختيار بيانات الاعتماد هذه تلقائيًا من خلال إجراء تفعيل تتبُّع Cloud Platform في Spring Cloud.

أولاً، تسجيل الدخول:

$ gcloud auth application-default login
You are running on a Google Compute Engine virtual machine.
The service credentials associated with this virtual machine
will automatically be used
by Application Default
Credentials, so it is not necessary to use this command.
If you decide to proceed anyway, your user credentials may be visible
to others
with access to this virtual machine. Are you sure you want
to authenticate
with your personal account?
Do you want to continue (Y/n)? Y

Go to the following link in your browser:
    https
://accounts.google.com/o/oauth2/auth...
Enter verification code: ...

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

بعد ذلك، انسخ رمز التحقق والصقه مرة أخرى في Cloud Shell واضغط على Enter. من المفترض أن يظهر لك ما يلي:

Credentials saved to file: [/tmp/tmp.jm9bnQ4R9Q/application_default_credentials.json]
These credentials will be used by any library that requests
Application Default Credentials.

إضافة بيانات Spring Cloud Cloud Trace

في هذه الخدمة، استخدمنا Spring Cloud Sleuth في التتبع. لنبدأ في تفعيل إجراء تفعيل تتبُّع Spring Cloud Cloud لإعادة توجيه البيانات إلى تتبع Stackdriver.

أضِف الاعتمادية لتتبُّع سحابة Spring Cloud Cloud:

pom.xml

<project>
  ...
 
<dependencies>
    ...
   
<!-- Add Stackdriver Trace Starter -->
   
<dependency>
     
<groupId>org.springframework.cloud</groupId>
     
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
   
</dependency>
 
</dependencies>
  ...
</project>

لا يحدّد تطبيق Spring Cloud Sleuth تلقائيًا كل طلب. ولتسهيل عملية الاختبار، ارفع نسبة العينة إلى 100% في application.properties لضمان الاطّلاع على بيانات التتبُّع بالإضافة إلى تجاهل بعض عناوين URL التي لا تهمّنا:

$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
"
> src/main/resources/application.properties

شغِّل التطبيق مرة أخرى، واستخدِم معاينة Cloud Shell Web لعرض التطبيق:

$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$
./mvnw -DskipTests spring-boot:run

يتم تلقائيًا تجميع بيانات تتبُّع Spring Cloud Platform مع بيانات التتبُّع وإرسالها مرة كل 10 ثوانٍ، أو عند تلقّي حد أدنى لعدد بيانات التتبُّع. يمكن ضبط هذا الإعداد ويمكنك الرجوع إلى مستندات مرجع تتبُّع Cloud Platform في Spring للحصول على مزيد من المعلومات.

تقديم طلب إلى الخدمة:

$ curl localhost:8080

في Cloud Console، انتقِل إلى StackdriverTraceTrace list.

في أعلى الصفحة، ضيِّق النطاق الزمني على ساعة واحدة. تكون إعادة التحميل التلقائي مفعّلة بشكل تلقائي. لذا عند وصول بيانات التتبُّع، من المفترض أن تظهر في وحدة التحكُّم.

من المفترض أن تظهر بيانات التتبُّع خلال 30 ثانية تقريبًا.

انقر على النقطة الزرقاء لمشاهدة تفاصيل التتبع:

كانت العملية بسيطة جدًا.

5. إنشاء تطبيق ثانٍ لبدء تشغيل Spring

افتح جلسة Cloud Shell جديدة بالنقر على الرمز +:

في الجلسة الجديدة، أنشِئ تطبيق Spring Bot الثاني:

$ curl https://start.spring.io/starter.tgz -d packaging=jar \
 
-d dependencies=web,lombok,cloud-gcp,cloud-starter-sleuth \
 
-d baseDir=trace-service-two | tar -xzvf - \
 
&& cd trace-service-two

إنشاء وحدة تحكُّم REST جديدة من خلال إضافة فئة جديدة:

src/main/java/com/example/demo/MeetingController.java

package com.example.demo;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Random;

@RestController
@Slf4j
public class MeetingController {
 
Random r = new Random();

 
@GetMapping("/meet")
 
public String meeting() {
   
try {
      log
.info("meeting...");
     
Thread.sleep(r.nextInt(500 - 20 + 1) + 20);
   
} catch (InterruptedException e) {
   
}
   
return "finished meeting";
 
}
}

إضافة تتبع Spring Cloud Cloud إلى pom.xml

pom.xml

<project>
  ...
 
<dependencies>
    ...
   
<!-- Add Stackdriver Trace starter -->
   
<dependency>
     
<groupId>org.springframework.cloud</groupId>
     
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
   
</dependency>
 
</dependencies>
  ...
</project>

ضبط Sleuth بحيث يستخدم عينة بنسبة 100% من الطلبات:

src/main/resources/application.properties

$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
"
> src/main/resources/application.properties

أخيرًا، يمكنك بدء تشغيل تطبيق Spring Kiosk على المنفذ 8081 باستخدام المكوِّن الإضافي Spring Kiosk.

$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$
./mvnw -DskipTests spring-boot:run -Dserver.port=8081

6. تحديث الخدمة الأولى لاستهلاك الخدمة الثانية

أثناء تشغيل trace-service-two، ارجع إلى نافذة جلسة Cloud Shell الأولى وأجرِ تعديلاً على trace-service-one.

أولاً، إعداد حبوب RestTemplate جديدة:

src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

...

import org.springframework.web.client.RestTemplate;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {
       
@Bean
       
public RestTemplate restTemplate() {
               
return new RestTemplate();
       
}
       
       
public static void main(String[] args) {
               
SpringApplication.run(DemoApplication.class, args);
       
}
}

في WorkController.meeting()، يمكنك الاتصال بخدمة الاجتماعات.

src/main/java/com/example/demo/WorkController.java

package com.example.demo;

...
import org.springframework.web.client.RestTemplate;
import org.springframework.beans.factory.annotation.Autowired;

@RestController
@Slf4j
public class WorkController {
 
@Autowired
 
RestTemplate restTemplate;

 
public void meeting() {
   
String result = restTemplate.getForObject("http://localhost:8081/meet", String.class);
    log
.info(result);
 
}

 
...
}

بدء الخدمة مرة أخرى وتشغيل نقطة النهاية من معاينة الويب:

$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$
./mvnw -DskipTests spring-boot:run

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

في قائمة تتبّع Stackdriver's، من المفترض أن ترى التتبع الثاني:

يمكنك النقر على النقطة الجديدة الزرقاء والاطّلاع على تفاصيل التتبّع:

يمكنك أيضًا النقر على أي امتداد في هذا الرسم البياني للاطّلاع على تفاصيل الامتداد.

7. توزيع وقت الاستجابة وتقرير الأداء

عند استخدام تتبُّع Stackdriver كمساحة تخزين بيانات التتبُّع، يمكن أن يستخدم Stackdriver Trace البيانات لإنشاء تقرير توزيع وقت الاستجابة. ستحتاج إلى أكثر من 100 تتبّع لإنشاء التقرير على النحو التالي:

بالإضافة إلى ذلك، يمكن أن يكتشف Stackdriver Trace تلقائيًا انخفاض الأداء في نفس الخدمة خلال فترتين زمنيتين مختلفتين ضمن تقرير التحليل.

8. الملخّص

في هذا الدرس التطبيقي، أنشأت خدمتين بسيطتين وأضفت تتبّعًا موزعًا باستخدام Spring Cloud Sleuth، واستخدمت Spring Cloud Cloud لإعادة توجيه معلومات التتبع إلى Stackdriver Trace.

9. تهانينا.

لقد تعلمت كيفية كتابة أول تطبيق ويب لـ App Engine!

مزيد من المعلومات

الترخيص

يخضع هذا العمل لترخيص بموجب رخصة المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0.