วันนี้น้องในทีมแนะนำให้รู้จัก Spring Boot Admin
เมื่อลองไปดูพบว่ามันคือ ระบบจัดการและดูแลระบบงานที่พัฒนาด้วย Spring Boot
พัฒนาโดยบริษัท Codecentric
ยังไม่พอนะ มันยังมี User Interface ให้ใช้แบบง่าย ๆ อีกเพียบ
ซึ่งในส่วนนี้พัฒนาด้วย AngularJS (เสียใจที่ไม่ใช่ Angular)

แสดงข้อมูลได้เยอะเลย ยกตัวอย่างเช่น

  • แสดง health status ของแต่ละระบบหรือ service
  • แสดง Access log ของแต่ละ service
  • แสดง metric ต่าง ๆ เช่นการใช้งานแต่ละ service
  • แสดงการใช้งาน JVM และ memory ของแต่ละ service
  • การจัดารเกี่ยว Logging
  • ดูพวก thread dump และ tracing
  • มีระบบ notification ให้ด้วย

Spring Boot Admin ยังสามารถทำงานร่วมกับ
พวก service registration และ service discovery
เช่น Spring cloud, Zookeeper, Consul และ Eureka ได้อีกด้วย

อธิบายไปก็ไม่เห็นภาพ ดังนั้นลองใช้งานดีกว่า
ตัวอย่างจะสร้างระบบแบบ Maven Project นะครับ

เริ่มต้นด้วยการสร้าง Spring Boot Admin ขึ้นมาก่อน

ซึ่งมันง่ายมาก ๆ มีขั้นตอนดังนี้

เริ่มด้วย library ต่าง ๆ ที่ใช้งานสำหรับ Spring Boot Admin

จากนั้นสร้างไฟล์ Application.java สำหรับการเริ่มทำงานของระบบ

เมื่อทุกอย่างพร้อมทำการ run ระบบด้วยคำสั่ง

$mvn clean package
$java -jar ./target/spring-boot-admin.jar

ลองเปิดใช้งานผ่าน browser ด้วย url = http://localhost:8080/

หรือถ้าใครชอบใช้ Docker ผมก็มี Dockerfile ไว้ให้สร้าง Docker image ไว้ใช้เอง

จากนั้นทำการสร้าง Docker image และ container ด้วยคำสั่ง

$docker image build -t admin .
$docker container run -d --name admin -p 8080:8080 admin

ผลการทำงานก็จะเหมือนกัน
หรือถ้าใครไม่อยากสร้าง Docker image เอง
ก็สามารถไป pull มาจาก Docker hub ได้
แต่แบบนี้ไม่ดีนะครับ เนื่องจาก image ที่ได้มันใหญ่เกินไป !!
แนะนำให้แยกระหว่างขั้นตอนการ build กับ run ออกจากกันด้วย Multi-stage ดีกว่า

จากนั้นทำการสร้าง Service ด้วย Spring Boot

โดย service ต่าง ๆ เหล่านี้จะทำการ register ไปยัง Spring Boot Admin แบบอัตโนมัติ
ในส่วนนี้จะรองรับหลายแบบเช่น
1. แบบปกติคือกำหนด endpoint ของ Spring Boot Admin ใน service เลย
2. ใช้งานร่วมกับพวก Service discovery เช่น Eureka, Consul และ Zookepper

เพื่อความง่ายจะเลือกแบบแรกมาสร้างระบบตัวอย่างให้ดู

เริ่มด้วย library ต่าง ๆ ที่ใช้งานใน service
จำเป็นต้องมี Spring Boot Actuator ด้วยสำหรับ health check และรายละเอียดต่าง ๆ ของ service

ต่อมากำหนด endpoint ของ Spring Boot Admin ในไฟล์ application.yml ดังนี้
ในตัวอย่างนี้จะยังไม่มีเรื่องของ security ใด ๆ เลย

เมื่อทุกอย่างพร้อมทำการ run service ด้วยคำสั่ง

$mvn clean package
$java -jar ./target/service01.jar

ผลที่ได้คือ
เมื่อ service ทำการ start เรียบร้อยแล้ว
จะทำการ register ไปยัง Spring Boot Admin ให้แบบอัตโนมัติ
แสดงดังรูป

เข้าไปดูรายละเอียดของ service ผ่าน User Interface กัน

จะแสดงข้อมูลต่าง ๆ เพียบเลย เช่น Metric, Logging, JMX, Thread, Trace และ Heapdump เป็นต้น

ตัวอย่างของ Logging

ตัวอย่างของ Trace เพื่อดูการเข้าใช้งาน service

และยังมีการแสดงการเปลี่ยนแปลงสถานะของ service อีกด้วยนะ

ปล. ใน Google Chrome มี notification ด้วยนะ

มาถึงตรงนี้น่าจะพอทำให้เห็นความสามารถของ Spring Boot Admin บ้างนะ

น่าจะมีประโยชน์มากสำหรับการ monitoring service ต่าง ๆ
ยิ่งถ้ามี service ที่พัฒนาด้วย Spring boot จำนวนมาก ๆ
น่าจะอำนวยความสะดวกได้อีกมากเลย

ปล. ที่สำคัญ Spring Boot Admin สามารถทำ cluster ได้อีกด้วย
ซึ่งจะทำการ replicate สิ่งต่าง ๆ ใน cluster ด้วย Hazelcast

ขอให้สนุกกับการ coding ครับ