บทความนี้ส่วนใหญ่พูดถึงส่วนประกอบการติดตามบริการ Zipkin และ Spring Cloud Sleuth รวมองค์ประกอบ Zipkin
1. บทนำ
เพิ่มนักสืบลงใน ClassPath ของแอปพลิเคชันสปริงบูต (ดูด้านล่างสำหรับตัวอย่าง Maven และ Gradle) และคุณจะเห็นข้อมูลสหสัมพันธ์ที่รวบรวมไว้ในบันทึกตราบใดที่คุณกำลังบันทึกคำขอ
- ข้อความที่ตัดตอนมาจากเว็บไซต์อย่างเป็นทางการ
ฟังก์ชั่นหลักของ Spring Cloud Sleuth คือการจัดหาโซลูชันการติดตามในระบบกระจายและเข้ากันได้กับ Zipkin คุณจะต้องแนะนำการพึ่งพาที่สอดคล้องกันในไฟล์ POM
2. การติดตามและการวิเคราะห์บริการ
ในสถาปัตยกรรม Microservice บริการจะถูกแบ่งออกผ่านบริการ อินเทอร์เฟซที่สัมผัสกับโลกภายนอกอาจต้องใช้บริการมากมายในการทำงานร่วมกันเพื่อทำฟังก์ชั่นอินเทอร์เฟซนี้ให้สมบูรณ์ หากบริการใด ๆ ในลิงค์มีปัญหาหรือหมดเวลาเครือข่ายมันจะทำให้การเรียกอินเทอร์เฟซล้มเหลว ในขณะที่ธุรกิจยังคงขยายตัวการโทรระหว่างบริการจะมีความซับซ้อนมากขึ้นเรื่อย ๆ
เมื่อมีบริการมากขึ้นเรื่อย ๆ การวิเคราะห์โซ่การโทรจะมีความซับซ้อนมากขึ้นเรื่อย ๆ ความสัมพันธ์ระหว่างการโทรอาจมีดังนี้:
iii. คำศัพท์
ช่วง: หน่วยงานพื้นฐาน ตัวอย่างเช่นการส่ง RPC ในช่วงที่สร้างขึ้นใหม่นั้นเทียบเท่ากับการส่งคำขอตอบกลับไปยัง RPC ช่วงเวลาถูกระบุโดย ID 64 บิตและการติดตามจะแสดงด้วยรหัส 64 บิตอื่น ช่วงเวลามีข้อมูลข้อมูลอื่น ๆ เช่น Digest, เหตุการณ์การประทับเวลา, คำอธิบายประกอบค่าคีย์ (แท็ก), ID ของ SPAN และ ID ความคืบหน้า (โดยปกติแล้วที่อยู่ IP)
ช่วงเวลาเริ่มต้นและหยุดอย่างต่อเนื่องและในเวลาเดียวกันบันทึกข้อมูลเวลา เมื่อคุณสร้างช่วงคุณต้องหยุดมันในบางจุดในอนาคต
Trace: โครงสร้างต้นไม้ประกอบด้วยชุดของช่วง ตัวอย่างเช่นหากคุณใช้งานโครงการข้อมูลขนาดใหญ่แบบกระจายคุณอาจต้องสร้างร่องรอย
คำอธิบายประกอบ: ใช้ในการบันทึกการมีอยู่ของเหตุการณ์ในเวลาและคำอธิบายประกอบหลักบางอย่างใช้เพื่อกำหนดจุดเริ่มต้นและจุดสิ้นสุดของคำขอ
กราฟิกกระบวนการใช้คำอธิบายประกอบ Zipkin ในระบบเดียว:
4. โครงการก่อสร้าง
หลังจากอธิบายความรู้พื้นฐานมาทำงานจริง กรณีในบทความนี้ส่วนใหญ่ประกอบด้วยสามโครงการ: Server-Zipkin ซึ่งส่วนใหญ่ใช้ฟังก์ชั่นของ Zipkinserver เพื่อรวบรวมข้อมูลการโทรและแสดง Service-Hi ซึ่งเปิดเผยอินเทอร์เฟซ HI ไปยังภายนอก Service-Miya ซึ่งเปิดเผยอินเทอร์เฟซ Miya ไปด้านนอก บริการทั้งสองนี้สามารถเรียกกันได้ และหลังจากที่พวกเขาถูกเรียกใช้ Server-Zipkin จะรวบรวมข้อมูลซึ่งเป็นสาเหตุที่เรียกว่าการติดตามบริการ
4.1 Build Server-Zipkin
สร้างโครงการ Spring-Boot ชื่อ Server-Zipkin และแนะนำการพึ่งพาใน POM:
<การพึ่งพา> <การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter </Artifactid> </การพึ่งพาอาศัย> <การพึ่งพา> <roupid> org.springframework.boot </groupid> <RoupID> org.springframework.boot </groupId> <ratifactid> การทดสอบสปริง-สตาร์เทสต์ </artifactid> <scope> ทดสอบ </cope> </predency> <pendency> <RoupID> io.zipkin.java </groupId> <ratifactid> Zipkin-AutoconFigure-ui </artifactid> </การพึ่งพาอาศัย> </การพึ่งพาอาศัย> </การพึ่งพาอาศัย> <cersion> camden.sr6 </version> <ply> pom </type> <pope> นำเข้า </cope> </predency> </pendencies> </perentencyManagement>
ในคลาสรายการโปรแกรมเพิ่มคำอธิบายประกอบ @enablezipkinserver เพื่อเปิดใช้งานฟังก์ชันของ Zipkinserver:
@springbootapplication@enablezipkinserverpublic คลาส serverzipkinapplication {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (serverzipkinapplication.class, args); -ในไฟล์กำหนดค่า Application.yml ระบุพอร์ตบริการเป็น:
Server.port = 9411
4.2 สร้างบริการฮิ
ในการแนะนำ POM การพึ่งพาเริ่มต้นคือ Spring-Cloud-Starter-Zipkin รหัสมีดังนี้:
<การพึ่งพา> <การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </artifactid> </การพึ่งพา <RoupID> org.springframework.cloud </groupId> <ratifactid> Spring-Cloud-Starter-Zipkin </artifactid> </การพึ่งพาอาศัย> <การพึ่งพา> <roupid> org.springframework.boot </groupid> </permentency> </derctency> <การพึ่งพาการจัดการ> <การพึ่งพา> <การพึ่งพา> <roupId> org.springframework.cloud </groupId> <ratifactid> สปริงคลาวด์-พึ่งพาอาศัยกัน </artifactid>
ในไฟล์กำหนดค่าแอปพลิเคชัน application.yml ระบุที่อยู่ของเซิร์ฟเวอร์ zipkin และส่วนหัวถูกระบุโดยการกำหนดค่า "spring.zipkin.base-url":
server.port = 8988Spring.zipkin.base-url = http: // localhost: 9411spring.application.name = service-hi
มันก็โอเคที่จะแนะนำการพึ่งพาสปริงคลาวด์-สตาร์เทอร์-ซิปคินและตั้งค่า Spring.zipkin.base-url
อินเทอร์เฟซการเปิดรับแสงภายนอก:
@springbootapplication@restcontrollerpublic คลาส servicehiapplication {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (servicehiapplication.class, args); } logger สุดท้ายคงที่ logger log = logger.getLogger (serviceHiapplication.class.getName ()); @AutoWired RestTemplate RestTemplate; @bean สาธารณะ RestTemplate getRestTemplate () {ส่งคืน RESTTEMPLATE ใหม่ (); } @RequestMapping ("/hi") สตริงสาธารณะ callhome () {log.log (level.info, "การเรียกใช้ Service-hi"); return resttemplate.getForObject ("http: // localhost: 8989/miya", string.class); } @RequestMapping ("/info") ข้อมูลสตริงสาธารณะ () {log.log (level.info, "การเรียกใช้บริการติดตาม -HI"); กลับ "ฉันบริการฮิ"; } @Bean สาธารณะ AlwaysSampler DefaultSampler () {return new AlwaysAmpler (); -4.3 สร้าง Service-Miya
กระบวนการสร้างทำให้เกิดการบริการแนะนำการพึ่งพาเดียวกันและกำหนดค่า Spring.zipkin.base-url
อินเทอร์เฟซการเปิดรับแสงภายนอก:
@springbootapplication@restcontrollerpublic คลาส servicemiyaapplication {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (servicemiyaapplication.class, args); } logger สุดท้ายคงที่ logger log = logger.getLogger (ServiceMiyaApplication.class.getName ()); @RequestMapping ("/hi") สตริงสาธารณะที่บ้าน () {log.log (level.info, "HI ถูกเรียกว่า"); กลับ "สวัสดีฉันมิยา!"; } @requestmapping ("/miya") ข้อมูลสตริงสาธารณะ () {log.log (level.info, "ข้อมูลถูกเรียกว่า"); ส่งคืน RestTemplate.getForObject ("http: // localhost: 8988/info", string.class); } @AutoWired RestTemplate RestTemplate; @bean สาธารณะ RestTemplate getRestTemplate () {ส่งคืน RESTTEMPLATE ใหม่ (); -4.4 เริ่มโครงการสาธิตและติดตาม
เริ่มต้นสามโครงการด้านบนเปิดเบราว์เซอร์เพื่อเข้าถึง: http: // localhost: 9411/และอินเทอร์เฟซต่อไปนี้จะปรากฏขึ้น:
เยี่ยมชม: http: // localhost: 8989/miya, เบราว์เซอร์ปรากฏขึ้น: ฉันบริการฮิ-
จากนั้นเปิดอินเทอร์เฟซของ http: // localhost: 9411/และคลิกการพึ่งพาเพื่อค้นหาการพึ่งพาของบริการ:
คลิกค้นหาร่องรอยเพื่อดูข้อมูลของบริการเฉพาะที่โทรหากัน:
ดาวน์โหลดซอร์สโค้ดของบทความนี้: https://github.com/forezp/springcloudlearning/tree/master/chapter9
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น