1. खास जानकारी
डिस्ट्रिब्यूटेड ट्रेसिंग की मदद से, मल्टी-टीयर माइक्रोसर्विस आर्किटेक्चर के लिए अहम जानकारी और जांच की जा सकती है. अगर आपने सेवा A से सेवा कॉल और सेवा B से सेवा C तक एक-दूसरे से जुड़ी सेवाएं दी हैं, तो यह समझना ज़रूरी है कि कॉल पूरे हुए. साथ ही, हर चरण पर इंतज़ार का समय भी देखना ज़रूरी है.
Spring बूट में, आप अपने ऐप्लिकेशन में आसानी से डिस्ट्रिब्यूट किए गए ट्रेसिंग इंस्ट्रुमेंट जोड़ने के लिए Spring Cloud Sleuth का इस्तेमाल कर सकते हैं. डिफ़ॉल्ट रूप से, यह ट्रेस डेटा को Zipkin पर भेज सकता है.
Google Cloud Platform में Cloud Trace है, जो एक प्रबंधित सेवा है जो आपको अपना Zipkin इंस्टेंस और स्टोरेज मैनेज किए बिना ट्रेस डेटा को स्टोर करने देती है. Cloud Trace, इंतज़ार के समय के डिस्ट्रिब्यूशन की रिपोर्ट भी बना सकती है. साथ ही, यह परफ़ॉर्मेंस के रिग्रेशन का अपने-आप पता लगा सकती है.
Spring बूट ऐप्लिकेशन से Cloud Trace का इस्तेमाल करने के लिए, आपके पास दो विकल्प हैं:
- स्टैकड्राइवर ट्रेस ज़िपकिन प्रॉक्सी का इस्तेमाल करें और इस प्रॉक्सी को Zipkin एंडपॉइंट के तौर पर इस्तेमाल करने के लिए बस Spring Cloud Sleuth को कॉन्फ़िगर करें
- इसके अलावा, Spring Cloud GCP Trace का इस्तेमाल किया जा सकता है. यह Spring Cloud Sleuth के साथ आसानी से इंटिग्रेट होता है. साथ ही, ट्रेस डेटा को सीधे Cloud Trace पर भेजता है.
इस कोडलैब में, आपको नया Spring बूट ऐप्लिकेशन बनाने का तरीका पता चलेगा. साथ ही, डिस्ट्रिब्यूटेड ट्रेसिंग के लिए, Spring Cloud GCP ट्रेस इस्तेमाल करने का तरीका बताया जाएगा.
आपको इनके बारे में जानकारी मिलेगी
- Spring बूट Java ऐप्लिकेशन बनाने और Cloud Trace को कॉन्फ़िगर करने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud Platform प्रोजेक्ट
- ब्राउज़र, जैसे कि Chrome या Firefox
- Vim, EMAC या Nano जैसे स्टैंडर्ड Linux टेक्स्ट एडिटर के बारे में जानकारी
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
एचटीएमएल/सीएसएस वेब ऐप्लिकेशन बनाने के अपने अनुभव को आप कितनी रेटिंग देंगे?
Google Cloud Platform की सेवाएं इस्तेमाल करने का आपका अनुभव कैसा रहा?
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको अपना प्रोजेक्ट आईडी बताना होगा. आम तौर पर, इसकी पहचान
PROJECT_ID
के रूप में की जाती है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. दूसरा तरीका यह है कि आप खुद भी आज़माकर देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. साथ ही, यह प्रोजेक्ट के खत्म होने तक बना रहता है. - आपकी जानकारी के लिए, प्रोजेक्ट नंबर नाम की एक तीसरी वैल्यू दी गई है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, बिलिंग से बचने के लिए संसाधनों को बंद करें. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
Google Cloud शेल
Google Cloud और Kubernetes को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह कमांड लाइन एनवायरमेंट है जो क्लाउड में काम करता है.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें पर क्लिक करें.
अगर आपने Cloud Shell का इस्तेमाल पहली बार किया है, तो आपको बीच में आने वाली स्क्रीन दिखेगी. इसमें यह बताया जाएगा कि यह क्या है. अगर आपको बीच के लेवल पर मिलने वाली स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.
प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.
इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. इसमें लगातार पांच जीबी की होम डायरेक्ट्री मिलती है और यह Google Cloud में काम करती है. यह नेटवर्क की परफ़ॉर्मेंस और ऑथेंटिकेशन को बेहतर बनाने में मदद करती है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम ब्राउज़र से किया जा सकता है.
Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि हो चुकी है और प्रोजेक्ट आपके प्रोजेक्ट आईडी पर सेट है.
- यह पुष्टि करने के लिए Cloud Shell में नीचे दिया गया कमांड चलाएं कि आपकी पुष्टि हो गई है:
gcloud auth list
कमांड आउटपुट
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
gcloud config list project
कमांड आउटपुट
[core] project = <PROJECT_ID>
अगर ऐसा नहीं है, तो आप इसे इस निर्देश की मदद से सेट कर सकते हैं:
gcloud config set project <PROJECT_ID>
कमांड आउटपुट
Updated property [core/project].
3. नई स्प्रिंग बूट REST सेवा बनाएं
Cloud Shell के लॉन्च होने के बाद, कमांड लाइन का इस्तेमाल करके Spring Initializr वाला नया Spring बूट ऐप्लिकेशन जनरेट किया जा सकता है:
$ curl https://start.spring.io/starter.tgz -d packaging=jar \
-d bootVersion=2.7.6 \
-d dependencies=web,lombok,cloud-gcp,distributed-tracing \
-d jvmVersion=17 \
-d type=maven-project \
-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!";
}
}
पक्का करें कि आपके पास ऐप्लिकेशन के लिए सही JVM वर्शन है:
$ export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64
आप Spring बूट प्लग इन से Spring बूट ऐप्लिकेशन को सामान्य रूप से शुरू कर सकते हैं. आइए, इस लैब के लिए की जाने वाली जांचों को छोड़ दें:
$ ./mvnw -DskipTests spring-boot:run
ऐप्लिकेशन शुरू होने के बाद, Cloud Shell टूलबार में वेब झलक आइकॉन पर क्लिक करें और पोर्ट 8080 पर झलक देखें को चुनें.
थोड़ी देर इंतज़ार करने के बाद आपको नतीजा दिखेगा:
Cloud Shell में, आपको ट्रेस आईडी और स्पैन आईडी वाले लॉग मैसेज भी दिखेंगे:
4. Cloud ट्रेस का इस्तेमाल करना
Cloud Trace API चालू करें
अपने ट्रेस डेटा को सेव करने के लिए, Cloud Trace का इस्तेमाल करने से पहले आपको Cloud Trace API को चालू करना होगा. एपीआई को चालू करने के लिए, यह तरीका अपनाएं:
$ gcloud services enable cloudtrace.googleapis.com
ऐप्लिकेशन का डिफ़ॉल्ट क्रेडेंशियल सेट अप करें
इस लैब के लिए, आपको ऐप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल कॉन्फ़िगर करना होगा. 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.
Spring Cloud GCP ट्रेस जोड़ना
हम इस सेवा में, ट्रेस करने के लिए पहले ही Spring Cloud Sleuth का इस्तेमाल कर रहे हैं. डेटा को Cloud Trace पर भेजने के लिए, अब Spring Cloud GCP ट्रेस स्टार्टर को जोड़ें.
Spring Cloud GCP ट्रेस डिपेंडेंसी जोड़ें:
pom.xml
<project>
...
<dependencies>
...
<!-- Add Cloud Trace Starter -->
<dependency>
<groupId>com.google.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 Web Preview का इस्तेमाल करें:
$ 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 में, ऑपरेशन → ट्रेस → ट्रेस लिस्ट पर जाएं
सबसे ऊपर, समय सीमा को 1 घंटे तक सीमित करें. अपने-आप फिर से लोड होने की सुविधा डिफ़ॉल्ट रूप से चालू होती है. ट्रेस डेटा आते ही, यह कंसोल में दिखना चाहिए!
ट्रेस डेटा करीब 30 सेकंड में दिखना चाहिए.
ट्रेस की जानकारी देखने के लिए नीले बिंदु पर क्लिक करें:
यह काफ़ी आसान था!
5. दूसरा Spring बूट वेब ऐप्लिकेशन बनाएं
+ आइकॉन पर क्लिक करके, नया Cloud Shell सेशन खोलें:
नए सेशन में, दूसरा Spring बूट ऐप्लिकेशन बनाएं:
$ curl https://start.spring.io/starter.tgz -d packaging=jar \
-d bootVersion=2.7.6 \
-d dependencies=web,lombok,cloud-gcp,distributed-tracing \
-d jvmVersion=17 \
-d type=maven-project \
-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 में स्प्रिंग क्लाउड GCP ट्रेस जोड़ें
pom.xml
<project>
...
<dependencies>
...
<!-- Add Cloud Trace starter -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
</dependencies>
...
</project>
Sleuth को, सभी अनुरोधों का सैंपल लेने के लिए कॉन्फ़िगर करें:
src/main/resources/application.properties
$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
" > src/main/resources/application.properties
आखिर में, पोर्ट 8081 पर Spring बूट ऐप्लिकेशन को शुरू किया जा सकता है:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run -Dspring-boot.run.jvmArguments="-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)'`
# The '&' places the process in the background. Bring it back to the foreground with 'fg'.
$ ./mvnw -DskipTests spring-boot:run &
$ curl localhost:8080
दोनों सेशन विंडो में, आपको लॉग मैसेज दिखेंगे. साथ ही, ट्रेस आईडी एक सेवा से दूसरी सेवा पर लागू होता है.
Cloud Trace की ट्रेस सूची में, आपको दूसरा ट्रेस दिखेगा:
नए नीले बिंदु पर क्लिक करके, ट्रेस की जानकारी देखी जा सकती है:
इस डायग्राम में किसी भी स्पैन पर क्लिक करके, स्पैन की जानकारी भी देखी जा सकती है.
7. लेटेंसी डिस्ट्रिब्यूशन और प्रदर्शन रिपोर्ट
जब Cloud Trace का इस्तेमाल ट्रेस डेटा के स्टोरेज के तौर पर किया जाता है, तो Cloud Trace इस डेटा का इस्तेमाल इंतज़ार के समय के डिस्ट्रिब्यूशन की रिपोर्ट बनाने के लिए कर सकता है. इस तरह की रिपोर्ट बनाने के लिए, आपको 100 से ज़्यादा ट्रेस चाहिए:
hey का इस्तेमाल करके, शुरुआती 100 से ज़्यादा अनुरोध किए जा सकते हैं. यह Cloud Shell पर पहले से इंस्टॉल होता है!
$ hey localhost:8080 -n 150
इसके अलावा, Cloud Trace विश्लेषण रिपोर्ट में दो अलग-अलग समयावधि के लिए, एक ही सेवा की परफ़ॉर्मेंस रिग्रेशन का अपने-आप पता लगा सकता है.
8. खास जानकारी
इस लैब में, आपने दो आसान सेवाएं बनाईं और Spring Cloud Sleuth की मदद से ट्रेसिंग को जोड़ा और ट्रेस की जानकारी को Cloud Trace पर भेजने के लिए, Spring Cloud GCP का इस्तेमाल किया..
9. बधाई हो!
आपने अपना पहला App Engine वेब ऐप्लिकेशन लिखना सीख लिया है!
ज़्यादा जानें
- क्लाउड ट्रेस: https://cloud.google.com/trace/
- GCP प्रोजेक्ट के मुताबिक स्प्रिंग सीज़न: http://cloud.spring.io/spring-cloud-gcp/
- GCP GitHub के डेटा स्टोर करने की जगह पर वसंत के लिए: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Google Cloud Platform पर Java: https://cloud.google.com/java/
लाइसेंस
इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.