วันนี้น้องในทีมแนะนำให้รู้จัก 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 ให้ด้วย
อธิบายไปก็ไม่เห็นภาพ ดังนั้นลองใช้งานดีกว่า ตัวอย่างจะสร้างระบบแบบ Maven Project นะครับ
เริ่มต้นด้วยการสร้าง Spring Boot Admin ขึ้นมาก่อน
ซึ่งมันง่ายมาก ๆ มีขั้นตอนดังนี้ เริ่มด้วย library ต่าง ๆ ที่ใช้งานสำหรับ Spring Boot Admin [gist id="499aaa303f803d70a036d8358535951f" file="pom.xml"] จากนั้นสร้างไฟล์ Application.java สำหรับการเริ่มทำงานของระบบ [gist id="499aaa303f803d70a036d8358535951f" file="Application.java"] เมื่อทุกอย่างพร้อมทำการ run ระบบด้วยคำสั่ง [code] $mvn clean package $java -jar ./target/spring-boot-admin.jar [/code] ลองเปิดใช้งานผ่าน browser ด้วย url = http://localhost:8080/ หรือถ้าใครชอบใช้ Docker ผมก็มี Dockerfile ไว้ให้สร้าง Docker image ไว้ใช้เอง [gist id="499aaa303f803d70a036d8358535951f" file="Dockerfile"] จากนั้นทำการสร้าง Docker image และ container ด้วยคำสั่ง [code] $docker image build -t admin . $docker container run -d --name admin -p 8080:8080 admin [/code] ผลการทำงานก็จะเหมือนกัน หรือถ้าใครไม่อยากสร้าง 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 [gist id="499aaa303f803d70a036d8358535951f" file="pom2.xml"] ต่อมากำหนด endpoint ของ Spring Boot Admin ในไฟล์ application.yml ดังนี้ ในตัวอย่างนี้จะยังไม่มีเรื่องของ security ใด ๆ เลย [gist id="499aaa303f803d70a036d8358535951f" file="application.yml"] เมื่อทุกอย่างพร้อมทำการ run service ด้วยคำสั่ง [code] $mvn clean package $java -jar ./target/service01.jar [/code] ผลที่ได้คือ เมื่อ 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 ครับ