מידע על Codelab זה
1. סקירה כללית
מעקב מבוזר חשוב כדי לקבל תובנות וניראות לארכיטקטורה רב-שכבתית של שירותי מיקרו-שירות. כשמוסיפים שרשרת שירות לשיחות שירות, משירות א' לשירות ב' ועד שירות ג', חשוב להבין שהשיחות בוצעו בהצלחה וכן את זמן האחזור בכל שלב.
ב-Spring אתחול, ניתן להשתמש ב-Spring Cloud Slumth כדי להוסיף באופן חלק את אינסטרומנטציית המעקב המבוזרת לאפליקציה שלך. כברירת מחדל, הוא יכול להעביר את נתוני המעקב ל-Zipkin.
ב-Google Cloud Platform יש את Stackdriver Trace, שירות מנוהל שמאפשר לך לאחסן נתוני מעקב בלי לנהל מופע או אחסון משלך ב-Zipkin. באמצעות Stackdriver Trace אפשר גם להפיק דוחות הפצת זמן אחזור, ולזהות באופן אוטומטי רגרסיית ביצועים.
יש שתי אפשרויות להשתמש ב-Stackdriver Trace מאפליקציית Spring אתחול:
- שימוש ב-Proxydriver Trace Zipkin Proxy
- לחלופין, אפשר להשתמש ב-Spring Cloud GCP Trace, המשתלב בצורה חלקה עם Spring Cloud Sluth ומעביר את נתוני המעקב ישירות ל-Stackdriver Trace.
ב-codelab הזה תלמדו איך ליצור אפליקציה חדשה ל-Spring Bot ואיך להשתמש ב-Spring Cloud GCP Trace למעקב אחר הפצה.
מה תלמדו
- איך יוצרים אפליקציית Spring Boot Java ומגדירים את Stackdriver Trace.
מה צריך?
- פרויקט של Google Cloud Platform
- דפדפן, למשל Chrome או Firefox
- היכרות עם עורכי טקסט רגילים של Linux, כמו Vim , EMAC או Nano
איך תשתמשו במדריך הזה?
איך היית מדרג את החוויה שלך בעת בניית אפליקציות אינטרנט מסוג HTML/CSS?
איזה דירוג מתאים לדעתך לחוויית השימוש בשירותי Google Cloud Platform?
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמי
אם עדיין אין לכם חשבון Google (Gmail או Google Apps), עליכם ליצור חשבון. נכנסים למסוף ב-Google Cloud Platform (console.cloud.google.com) ויוצרים פרויקט חדש:
חשוב לזכור את מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם הקודם כבר תפוס, והוא לא יעבוד בשבילך.) נתייחס אליו מאוחר יותר ב-codelab הזה בתור PROJECT_ID
.
לאחר מכן, עליך להפעיל חיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
התהליך של קוד Lab זה לא אמור לעלות יותר מדולר אחד, אבל יכול להיות שתצטרכו לשלם על משאבים נוספים או להשאיר אותו פעיל (עיינו בקטע "cleanup" בסוף המסמך).
משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300$.
Google Cloud Shell
Google Cloud ו-Kubernetes ניתנים להפעלה מרחוק מהמחשב הנייד שלך, אבל במעבדה זו נעשה שימוש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
הפעלת Google Cloud Shell
במסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
לאחר מכן לוחצים על "Start Cloud Shell":
יחלפו רק כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו:
המכונה הווירטואלית הזו נטענת באמצעות כל כלי הפיתוח הדרושים לך. יש בה ספריית בית בנפח עקבי של 5GB, והיא פועלת ב-Google Cloud, וכך משפרת באופן משמעותי את הביצועים ואת האימות של הרשת. את רוב העבודה שלכם בשיעור ה-Lab הזה (אם לא כולם) אפשר לבצע בדפדפן או ב-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. יצירת שירות חדש לעונת האתחול של Spring
אחרי ההשקה של 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-one | tar -xzvf - \
&& cd trace-service-one
כדי ליצור בקר חדש ל-REST יש להוסיף מחלקה חדשה:
src/main/javascript/com/example/demo/WorkController.javascript
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 Boot בדרך כלל באמצעות הפלאגין Spring אתחול. אפשר לדלג על בדיקות לשיעור ה-Lab הזה:
$ ./mvnw -DskipTests spring-boot:run
לאחר שליחת הבקשה, לוחצים על הסמל של תצוגה מקדימה באינטרנט בסרגל הכלים של Cloud Shell ובוחרים באפשרות תצוגה מקדימה ביציאה 8080.
לאחר המתנה קצרה אמורה להופיע התוצאה:
ב-Cloud Shell אתם אמורים לראות גם את הודעות היומן עם מזהה לצורכי מעקב ומזהה טווח:
4. באמצעות דוח קריסות
הפעלת Stackdriver Trace API
עליך להפעיל תחילה את Stackdriver Trace API כדי להשתמש ב-Stackdriver Trace כדי לאחסן את נתוני המעקב. כדי להפעיל את ה-API, עוברים אל שירותי API ← ספרייה
מחפשים את Stackdriver Trace
לוחצים על Stackdriver Trace API ואז על הפעלה אם היא כבר לא מופעלת.
הגדרה של ברירת מחדל לפרטי כניסה עבור אפליקציה
בשיעור Lab זה תצטרכו להגדיר פרטי כניסה כברירת מחדל לאפליקציה. פרטי הכניסה האלה ייאספו באופן אוטומטי על-ידי Spring Cloud GCP Trace Starter.
קודם מתחברים:
$ 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
בשירות הזה כבר השתמשנו ב-Spring Cloud Slume לצורך מעקב. הגיע הזמן להוסיף את הנתונים ל-Spring Cloud GCP Trace כדי להתחיל להעביר את הנתונים אל Stackdriver Trace.
מוסיפים את מידת התאימות של מעקב ה-GCP ב-Spring 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 סלאוט לא נדגם כל בקשה. כדי שיהיה לנו קל יותר לבצע בדיקות, צריך להגדיל את שיעור הדגימה ב-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 GCP עוקב אחר נתוני מעקב ושולח אותם פעם אחת ב-10 שניות, או כאשר מתקבל מספר מינימלי של נתוני מעקב. ניתן להגדיר זאת, ואפשר לעיין במסמכי העזר בנושא מעקב של GCP ב-Cloud Cloud כדי לקבל מידע נוסף.
שליחת בקשה לשירות:
$ curl localhost:8080
ב-Cloud Console, עוברים אל Stackdriver ← מעקב ← רשימת מעקב
בחלק העליון של המסך, מצמצמים את טווח הזמן לשעה. כברירת מחדל, טעינה אוטומטית מופעלת. לכן, כאשר נתוני המעקב יופיעו, הם אמורים להופיע במסוף!
נתוני המעקב אמורים להופיע בתוך כ-30 שניות.
לוחצים על הנקודה הכחולה כדי לראות את פרטי המעקב:
זה היה פשוט!
5. יצירה של אפליקציית אינטרנט נוספת לאתחול אביב
פותחים סשן חדש של Cloud Shell על ידי לחיצה על הסמל +:
בביקור החדש, יוצרים את האפליקציה השנייה לאתחול ספרינג:
$ 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/javascript/com/example/demo/MeetingController.javascript
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 אל 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>
מגדירים את Slous לדגימה של 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 Boot ביציאה 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/javascript/com/example/demo/DemoApplication.JavaScript
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/javascript/com/example/demo/WorkController.javascript
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 יש לראות את המעקב השני:
תוכלו ללחוץ על הנקודה החדשה הכחול ולראות את פרטי המעקב:
אפשר גם ללחוץ על טווח כלשהו בתרשים הזה כדי להציג את פרטיו.
7. דוח 'זמן אחזור' ודוח ביצועים
כשמשתמשים ב-Stackdriver Trace בתור אחסון נתוני מעקב, התכונה Stackdriver Trace יכולה להשתמש בנתונים כדי ליצור דוח הפצת זמן אחזור. צריך יותר מ-100 עקבות כדי ליצור את הדוח כך:
כמו כן, באמצעות Stackdriver Trace ניתן לזהות באופן אוטומטי רגרסיית ביצועים של אותו שירות בשתי תקופות זמן שונות בקטע דוח ניתוח.
8. סיכום
בשיעור Lab זה יצרתם 2 שירותים פשוטים והוספתם נתוני מעקב אחר הפצה עם Spring Cloud Sluth והשתמשתם ב-Spring Cloud GCP כדי להעביר את פרטי המעקב אל Stackdriver Trace.
9. מעולה!
למדת איך לכתוב את אפליקציית האינטרנט הראשונה שלך ב-App Engine!
למידע נוסף
- מעקב Stackdriver: https://cloud.google.com/trace/
- אביב בפרויקט GCP : http://cloud.spring.io/spring-cloud-gcp/
- אביב במאגר GitHub: https://github.com/spring-cloud/spring-cloud-gcp
- Java ב-Google Cloud Platform : https://cloud.google.com/javascript/
רישיון
היצירה הזו ברישיון תחת רישיון Creative Commons Attribution 2.0.