Tentang codelab ini
1. Ringkasan
Pelacakan terdistribusi penting untuk mendapatkan insight dan kemampuan observasi ke arsitektur microservice bertingkat. Jika Anda telah menghubungkan layanan ke panggilan layanan, dari layanan A ke layanan B hingga layanan C, penting untuk memahami bahwa panggilan tersebut berhasil serta latensi di setiap langkah.
Di Spring Boot, Anda dapat menggunakan Spring Cloud Sleuth untuk menambahkan instrumentasi pelacakan terdistribusi ke aplikasi dengan lancar. Secara default, ini dapat meneruskan data trace ke Zipkin.
Google Cloud Platform memiliki Stackdriver Trace, sebuah layanan terkelola yang memungkinkan Anda menyimpan data rekaman aktivitas tanpa harus mengelola instance Zipkin sendiri atau penyimpanan. Stackdriver Trace juga dapat menghasilkan laporan distribusi latensi dan mendeteksi regresi performa secara otomatis.
Anda memiliki dua opsi untuk menggunakan Stackdriver Trace dari aplikasi Spring Boot:
- Gunakan Proxy Zipkin Stackdriver Trace dan cukup konfigurasikan Spring Cloud Sleuth untuk menggunakan proxy ini sebagai endpoint Zipkin
- Atau, gunakan Spring Cloud GCP Trace, yang terintegrasi secara lancar dengan Spring Cloud Sleuth dan meneruskan data trace langsung ke Stackdriver Trace.
Dalam codelab ini, Anda akan mempelajari cara mem-build aplikasi Spring Boot baru dan menggunakan Spring Cloud GCP Trace untuk pelacakan terdistribusi.
Yang akan Anda pelajari
- Cara membuat aplikasi Java Spring Boot dan mengonfigurasi Stackdriver Trace.
Yang Anda butuhkan
- Project Google Cloud Platform
- Browser, seperti Chrome atau Firefox
- Pemahaman tentang editor teks Linux standar, seperti Vim, EMAC, atau Nano
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana Anda menilai pengalaman membuat aplikasi web HTML/CSS Anda?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud Platform?
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
Jika belum memiliki Akun Google (Gmail atau Google Apps), Anda harus membuatnya. Login ke Google Cloud Platform console (console.cloud.google.com) dan buat project baru:
Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID
.
Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.
Menjalankan melalui codelab ini tidak akan menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih jika Anda memutuskan untuk menggunakan lebih banyak resource atau jika Anda membiarkannya berjalan (lihat bagian "pembersihan" di akhir dokumen ini).
Pengguna baru Google Cloud Platform memenuhi syarat untuk mendapatkan uji coba gratis senilai$300.
Google Cloud Shell
Meskipun Google Cloud dan Kubernetes dapat dioperasikan dari jarak jauh dari laptop Anda, dalam codelab ini kami akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Mengaktifkan Google Cloud Shell
Dari GCP Console, klik ikon Cloud Shell di toolbar kanan atas:
Kemudian klik "Mulai Cloud Shell":
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB, dan berjalan di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser atau Google Chromebook.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke PROJECT_ID.
Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3. Membuat Layanan Spring Boot REST baru
Setelah Cloud Shell diluncurkan, Anda dapat menggunakan command line untuk membuat aplikasi Spring Boot baru dengan 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
Buat pengontrol REST baru dengan menambahkan class baru:
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!";
}
}
Anda dapat memulai aplikasi Spring Boot secara normal dengan plugin Spring Boot. Mari kita lewati pengujian untuk lab ini:
$ ./mvnw -DskipTests spring-boot:run
Setelah aplikasi dimulai, klik ikon Pratinjau Web di toolbar Cloud Shell dan pilih pratinjau di port 8080.
Setelah menunggu beberapa saat, Anda akan melihat hasilnya:
Di Cloud Shell, Anda juga akan melihat pesan log dengan ID pelacakan dan ID span:
4. Menggunakan Stackdriver Trace
Mengaktifkan Stackdriver Trace API
Anda harus mengaktifkan Stackdriver Trace API terlebih dahulu untuk menggunakan Stackdriver Trace untuk menyimpan data trace. Untuk mengaktifkan API, buka Layanan API → Library
Telusuri Stackdriver Trace
Klik Stackdriver Trace API, lalu klik Aktifkan jika belum diaktifkan.
Menyiapkan Kredensial Default Aplikasi
Untuk lab ini, Anda harus mengonfigurasi kredensial default aplikasi. Kredensial ini akan otomatis diambil oleh pemicu Spring Cloud GCP Trace.
Pertama, login:
$ 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: ...
Klik link untuk membuka tab browser baru, lalu klik Izinkan
Selanjutnya, salin dan tempel kode verifikasi kembali ke Cloud Shell dan tekan enter. Anda akan melihat:
Credentials saved to file: [/tmp/tmp.jm9bnQ4R9Q/application_default_credentials.json]
These credentials will be used by any library that requests
Application Default Credentials.
Menambahkan Spring Cloud GCP Trace
Dalam layanan ini, kami telah menggunakan Spring Cloud Sleuth untuk pelacakan. Mari tambahkan starter Spring Cloud GCP Trace untuk meneruskan data ke Stackdriver Trace.
Tambahkan dependensi Spring Cloud GCP Trace:
pom.xml
<project>
...
<dependencies>
...
<!-- Add Stackdriver Trace Starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
</dependencies>
...
</project>
Secara default, Spring Cloud Sleuth tidak mengambil sampel setiap permintaan. Untuk mempermudah pengujian, tingkatkan frekuensi sampel menjadi 100% di application.properties
untuk memastikan kita melihat data rekaman aktivitas, serta abaikan beberapa URL yang tidak penting:
$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
" > src/main/resources/application.properties
Jalankan kembali aplikasi, lalu gunakan Pratinjau Web Cloud Shell untuk melihat aplikasi:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run
Secara default, Spring Cloud GCP Trace mengelompokkan data pelacakan dan mengirimkannya sekali setiap 10 detik, atau saat jumlah minimum data pelacakan diterima. Bagian ini dapat dikonfigurasi dan Anda dapat membaca dokumentasi referensi Spring Cloud GCP Trace untuk informasi lebih lanjut.
Buat permintaan ke layanan:
$ curl localhost:8080
Di Cloud Console, buka Stackdriver → Trace → Daftar trace
Di bagian atas, persempit rentang waktu menjadi 1 jam. Secara default, Pemuatan Ulang Otomatis diaktifkan. Jadi, saat data trace tiba, data tersebut akan muncul di konsol.
Data trace akan muncul dalam waktu sekitar 30 detik.
Klik titik biru untuk melihat detail trace:
Cukup mudah.
5. Membuat Aplikasi Web Spring Boot kedua
Buka sesi Cloud Shell baru dengan mengklik ikon +:
Di sesi baru, buat aplikasi Spring Boot kedua:
$ 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
Buat pengontrol REST baru dengan menambahkan class baru:
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";
}
}
Menambahkan Spring Cloud GCP Trace ke 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>
Mengonfigurasi Sleuth untuk mengambil sampel 100% permintaan:
src/main/resources/application.properties
$ echo "
spring.sleuth.sampler.probability=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)
" > src/main/resources/application.properties
Terakhir, Anda dapat memulai aplikasi Spring Boot di port 8081 dengan plugin Spring Boot:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run -Dserver.port=8081
6. Mengupdate Layanan Pertama untuk Menggunakan Layanan Kedua
Saat trace-service-two
sedang berjalan, kembalilah ke jendela sesi Cloud Shell pertama dan lakukan perubahan pada trace-service-one
.
Pertama, lakukan inisialisasi kacang RestTemplate
baru:
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);
}
}
Di WorkController.meeting()
, hubungi layanan Rapat.
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);
}
...
}
Mulai layanan lagi dan picu endpoint dari Pratinjau Web:
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`
$ ./mvnw -DskipTests spring-boot:run
Di kedua jendela sesi, Anda akan melihat pesan log, dengan ID Pelacakan disebarkan dari satu layanan ke layanan lainnya.
Dalam Daftar Trace Stackdriver Trace, Anda akan melihat trace kedua:
Anda dapat mengklik titik biru yang baru dan melihat detail trace:
Anda juga dapat mengklik span mana pun dalam diagram ini untuk melihat detail span.
7. Distribusi Latensi &Laporan Performa
Jika Anda menggunakan Stackdriver Trace sebagai penyimpanan data trace, Stackdriver Trace dapat menggunakan data tersebut untuk membuat laporan distribusi latensi. Anda memerlukan lebih dari 100 trace untuk membuat laporan seperti ini:
Selain itu, Stackdriver Trace dapat otomatis mendeteksi regresi performa layanan yang sama di dua jangka waktu yang berbeda di bagian Analisis Laporan.
8. Ringkasan
Di lab ini, Anda telah membuat 2 layanan sederhana dan menambahkan pelacakan terdistribusi dengan Spring Cloud Sleuth, serta menggunakan Spring Cloud GCP untuk meneruskan informasi trace ke Stackdriver Trace.
9. Selamat!
Anda telah mempelajari cara menulis aplikasi web App Engine pertama Anda.
Pelajari Lebih Lanjut
- Stackdriver Trace: https://cloud.google.com/trace/
- membuka project GCP: http://cloud.spring.io/spring-cloud-gcp/
- Masuk ke repositori GitHub GCP: https://github.com/spring-cloud/spring-cloud-gcp
- Java di Google Cloud Platform: https://cloud.google.com/java/
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.