स्प्रिंग क्लाउड स्लथ और स्टैकड्राइवर ट्रेस की मदद से ट्रेस किया गया

स्प्रिंग क्लाउड स्लथ और स्टैकड्राइवर ट्रेस की मदद से ट्रेस किया गया

इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी

subjectपिछली बार फ़र॰ 10, 2020 को अपडेट किया गया
account_circleकिसी Googler ने लिखा है

1. खास जानकारी

डिस्ट्रिब्यूटेड ट्रेसिंग मल्टी-टियर माइक्रो सेवाओं के आर्किटेक्चर की जानकारी और निगरानी पाने के लिए ज़रूरी है. जब आपने सेवा कॉल के लिए सेवा सेवा से लेकर सेवा A से सेवा B तक को सेवा चेन में जोड़ा है, तब यह समझना ज़रूरी है कि कॉल सफल रहे. साथ ही, हर कदम पर इंतज़ार का समय भी समझना ज़रूरी है.

अपने ऐप्लिकेशन में डिस्ट्रिब्यूशन ट्रेसिंग सुविधा को आसानी से जोड़ने के लिए, Spring बूट स्लथ का इस्तेमाल किया जा सकता है. डिफ़ॉल्ट रूप से, यह ट्रेस डेटा को Zipkin पर फ़ॉरवर्ड कर सकता है.

Google Cloud Platform में Stackdriver Trace है, जो एक मैनेज की जाने वाली सेवा है. इसकी मदद से, आप खुद का Zipkin इंस्टेंस और स्टोरेज मैनेज किए बिना, ट्रेस डेटा स्टोर कर सकते हैं. स्टैकड्राइवर ट्रेस भी इंतज़ार के समय की डिस्ट्रिब्यूशन रिपोर्ट दे सकता है और परफ़ॉर्मेंस रिग्रेशन का अपने-आप पता लगा सकता है.

स्प्रिंग बूट ऐप्लिकेशन से स्टैकड्राइवर ट्रेस का इस्तेमाल करने के लिए आपके पास दो विकल्प हैं:

  1. स्टैकड्राइवर ट्रेस ज़िपकिन प्रॉक्सी का इस्तेमाल करें और इस प्रॉक्सी का इस्तेमाल ज़िपकिन एंडपॉइंट के तौर पर करने के लिए, बस स्प्रिंग क्लाउड स्लेथ को कॉन्फ़िगर करें
  2. इसके अलावा, Spring Cloud GCP ट्रेसर का इस्तेमाल करें, जो Spring Cloud Sleuth के साथ आसानी से इंटिग्रेट होता है. साथ ही, ट्रेस डेटा को सीधे Stackdriver Trase पर फ़ॉरवर्ड करता है.

इस कोडलैब में, आप नया स्प्रिंग बूट ऐप्लिकेशन बनाने और डिस्ट्रिब्यूशन का पता लगाने के लिए, Spring Cloud GCP ट्रेसर का इस्तेमाल करने का तरीका जानेंगे.

आप क्या #39;जानेंगे

  • Spring बूट Java ऐप्लिकेशन बनाने और स्टैकड्राइवर ट्रेस को कॉन्फ़िगर करने का तरीका.

आपको क्या चाहिए

  • Google Cloud Platform प्रोजेक्ट
  • ब्राउज़र, जैसे कि Chrome या Firefox
  • Vim, EMACs या नैनो जैसे मानक Linux टेक्स्ट एडिटर के बारे में जानकारी

आप इस ट्यूटोरियल का इस्तेमाल कैसे करेंगे?

एचटीएमएल/सीएसएस वेब ऐप्लिकेशन बनाने के अपने अनुभव को आप कितनी रेटिंग देंगे?

Google Cloud Platform सेवाओं के इस्तेमाल से जुड़े अपने अनुभव को आप कितनी रेटिंग देंगे?

2. सेट अप और ज़रूरी शर्तें

अपनी सुविधा के हिसाब से एनवायरमेंट सेट अप करना

अगर आपके पास पहले से कोई Google खाता (Gmail या Google Apps) नहीं है, तो आपको एक खाता बनाना होगा. Google Cloud Platform Console (console.cloud.google.com) में साइन इन करें और एक नया प्रोजेक्ट बनाएं:

10-02-2016 का स्क्रीनशॉट 12:45:26.png

प्रोजेक्ट आईडी याद रखें, सभी Google क्लाउड प्रोजेक्ट में दिया गया नाम (ऊपर दिया गया नाम पहले ही लिया जा चुका है और यह आपके लिए काम नहीं करेगा!). इसे बाद में इस कोडलैब (कोड बनाना सीखना) में PROJECT_ID के तौर पर बताया जाएगा.

इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग को चालू करना होगा.

इस कोडलैब के जवाब में कुछ डॉलर से ज़्यादा खर्च नहीं करना चाहिए. हालांकि, अगर आप संसाधनों का इस्तेमाल करना जारी रखते हैं या उन्हें चलाना बंद कर देते हैं, तो यह ज़्यादा भी हो सकता है.

Google Cloud Platform के नए उपयोगकर्ता, 300 डॉलर का मुफ़्त ट्रायल पा सकते हैं.

Google Cloud Shell

हालांकि, Google Cloud और Kubernetes को आपके लैपटॉप से कहीं से भी चलाया जा सकता है, लेकिन इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह क्लाउड कमांड में चल रहे कमांड लाइन एनवायरमेंट है.

Google Cloud Shell चालू करें

GCP Console पर सबसे ऊपर दाईं ओर मौजूद टूलबार में, Cloud Shell आइकॉन पर क्लिक करें:

इसके बाद, &Cont &Cloud Shell शुरू करें &कोटेशन पर क्लिक करें;:

प्रावधान करने और पर्यावरण से जुड़ने में सिर्फ़ कुछ समय लगना चाहिए:

इस वर्चुअल मशीन में डेवलपमेंट से जुड़े सभी टूल हैं#39. इसमें लगातार 5 जीबी की होम डायरेक्ट्री मिलती है. यह Google Cloud पर चलती है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती जाती है. इस लैब में, हो सकता है कि किसी ब्राउज़र या 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. नई Spring बूट REST सेवा बनाएं

Cloud Shell लॉन्च होने के बाद, कमांड लाइन का इस्तेमाल करके, Spring Initializer के साथ नया Spring बूट ऐप्लिकेशन जनरेट किया जा सकता है:

$ 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 बूट प्लग इन के साथ, सामान्य रूप से Spring बूट ऐप्लिकेशन शुरू कर सकते हैं. इस लैब के लिए टेस्ट छोड़ें:

$ ./mvnw -DskipTests spring-boot:run

ऐप्लिकेशन शुरू होने के बाद, Cloud Shell टूलबार में वेब की झलक दिखाने वाले आइकॉन पर क्लिक करें और पोर्ट 8080 पर झलक देखें.

कुछ देर इंतज़ार करने के बाद, आपको यह नतीजा दिखेगा:

Cloud Shell में, आपको लॉग आईडी और स्पैन आईडी और स्पैन आईडी के साथ भी मैसेज दिखेंगे:

4. स्टैकड्राइवर ट्रेस का इस्तेमाल करना

स्टैकड्राइवर ट्रेस एपीआई चालू करें

अपने ट्रेस डेटा को सेव करने के लिए Stackdriver Trace का इस्तेमाल करने के लिए आपको पहले Stackdriver Trace API को चालू करना होगा. एपीआई चालू करने के लिए, एपीआई सेवाएं → लाइब्रेरी पर जाएं

स्टैकड्राइव ट्रेस खोजें

स्टैकड्राइवर ट्रेस एपीआई पर क्लिक करें. इसके बाद, अगर यह पहले से चालू नहीं है, तो चालू करें पर क्लिक करें.

ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल को सेट अप करना

इस लैब के लिए, आपको एक ऐप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल कॉन्फ़िगर करना होगा. यह क्रेडेंशियल Spring Cloud GCP ट्रेसर अपने-आप पिक अप कर लेगा.

सबसे पहले, लॉगिन करें:

$ 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.

स्प्रिंग क्लाउड GCP ट्रेस जोड़ना

इस सेवा में, हम पहले से ही ट्रेस करने के लिए Spring Cloud Sleuth का इस्तेमाल कर रहे हैं. डेटा को Stackdriver ट्रेस में आगे बढ़ाने के लिए, चलिए स्प्रिंग क्लाउड GCP ट्रेस स्टार्टर को जोड़ते हैं.

Spring Cloud GCP ट्रेसर डिपेंडेंसी जोड़ें:

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 हर अनुरोध का नमूना नहीं लेता. हमारी जांच को थोड़ा आसान बनाने के लिए, application.properties में सैंपल रेट को 100% तक बढ़ाएं, ताकि हमें ट्रेस डेटा दिखे. साथ ही, कुछ ऐसे यूआरएल को अनदेखा करें जो हमारे लिए मायने नहीं रखते:

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

ऐप्लिकेशन को फिर से चलाएं और ऐप्लिकेशन देखने के लिए Cloud Shell वेब झलक का इस्तेमाल करें:

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

डिफ़ॉल्ट रूप से, Spring Cloud GCP ट्रेस डेटा को ट्रेस करता है और उन्हें हर 10 सेकंड में एक बार या कम से कम ट्रेस डेटा मिलने पर भेज देता है. इसे कॉन्फ़िगर किया जा सकता है और ज़्यादा जानकारी के लिए आप Spring Cloud GCP ट्रेस रेफ़रंस दस्तावेज़ देख सकते हैं.

सेवा के लिए अनुरोध करें:

$ curl localhost:8080

Cloud Console में, Stackdriver ट्रेसट्रेस की सूची पर जाएं

सबसे ऊपर, समयसीमा को एक घंटे तक सीमित करें. डिफ़ॉल्ट रूप से, अपने-आप फिर से लोड करना चालू होता है. इसलिए, जैसे ही ट्रेस डेटा आता है, वह कंसोल में दिखने लगता है!

ट्रेस डेटा ~30 सेकंड या उसके बाद दिखना चाहिए.

ट्रेस की जानकारी देखने के लिए नीले बिंदु पर क्लिक करें:

यह बहुत आसान था!

5. स्प्रिंग बूट वेब के लिए दूसरा ऐप्लिकेशन बनाएं

+ आइकॉन पर क्लिक करके, नया Cloud Shell सेशन खोलें:

नए सेशन में, दूसरा Spring बूट ऐप्लिकेशन बनाएं:

$ 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";
 
}
}

pom.xml में Spring Cloud GCP ट्रेस जोड़ें

pom.xml

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

अनुरोध को 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 बूट प्लग इन के साथ, पोर्ट 8081 पर Spring बूट ऐप्लिकेशन शुरू कर सकते हैं:

$ 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 Trace's ट्रेस सूची में, आपको दूसरा ट्रेस दिखेगा:

आप नए नीले बिंदु पर क्लिक करके ट्रेस की जानकारी देख सकते हैं:

स्पैन की जानकारी देखने के लिए, इस डायग्राम में किसी भी स्पैन पर क्लिक करें.

7. इंतज़ार के समय का वितरण और परफ़ॉर्मेंस रिपोर्ट

जब आप ट्रेस डेटा स्टोरेज के रूप में Stackdriver Trace का इस्तेमाल करते हैं, तो Stackdriver Trace, इंतज़ार के समय के डिस्ट्रिब्यूशन रिपोर्ट बनाने के लिए डेटा का इस्तेमाल कर सकता है. इस तरह की रिपोर्ट बनाने के लिए आपको 100 से ज़्यादा ट्रेस की ज़रूरत होगी:

इसके अलावा, स्टैकड्राइवर ट्रेस विश्लेषण रिपोर्ट के तहत दो अलग-अलग समयावधियों में एक ही सेवा के परफ़ॉर्मेंस रिग्रेशन का पता अपने-आप लगा सकता है.

8. खास जानकारी

इस लैब में, आपने दो आसान सेवाएं बनाईं और Spring Cloud Sleuth का इस्तेमाल करके, ट्रेस किए गए डेटा को जोड़ा. साथ ही, Stackdriver Trace को ट्रेस करने के लिए, Spring Cloud GCP का इस्तेमाल किया..

9. बधाई हो!

आपने अपना पहला App Engine वेब ऐप्लिकेशन लिखने का तरीका सीखा!

ज़्यादा जानें

लाइसेंस

यह काम, क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत मिला है.