จากการแบ่งปันเรื่อง Observability ของระบบงาน
ใน Course Microservices workshop ที่ Skooldio มานั้น
โดย Observability นั่นประกอบไปด้วย 3 ส่วนหลัก ๆ คือ
- Application metric
- Distributed tracing
- Log aggregation
ต่อจากนั้นก็เอาไปทำ dashboard และ alert system ได้อีก
เพื่อช่วยให้เราสามารถดูได้ว่า application ทำงานอย่างไร
มีปัญหาตรงไหนบ้าง ?
หรือมีสัญญาณของปัญหาที่อาจจะเกิดขึ้นไหม ?
ถ้าเจอแล้ว สามารถเข้าถึงจุดเกิดเหตุได้ง่ายและรวดเร็วมากยิ่งขึ้น
จากแนวคิด นำมาสู่วิธีการจัดการ นั่นคือเครื่องมือที่ใช้งาน
หนึ่งในชุดของเครื่องมือที่แนะนำกันมาคือ Grafana platform
ประกอบไปด้วย
- Grafana สำหรับ dashboard
- Loki สำหรับเก็บ logging
- Tempo สำหรับเก็บ tracing
- ใช้งาน Prometheus สำหรับ data source ที่จัดเก็บข้อมูล metric
ตัวใหม่ที่น่าสนใจคือ Tempo
ใช้ในการจัดการ distributed tracing
แสดงการทำงานดังรูป
![](http://www.somkiat.cc/wp-content/uploads/2023/04/getting-started.png)
โดยที่ตัว Agent นั้น สามารถกำหนดได้ว่า exporter หรือปลายทางที่เก็บคืออะไร
เช่น
- OTLP (http, grpc)
- Zipkin
- Jaeger (http, grpc)
ตัว Tempo นั้น สร้างมาเพื่อเป้าหมายของ high-scale distributed tracing backend
นั่นคือ เลือก data storage ได้เยอะขึ้น ทั้ง local และ remote
ช่วยให้เก็บได้ทั้ง 100% ดีขึ้น ลดพื้นนที่ในการจัดเก็บ
สนับสนุน TraceQL สำหรับการดึงข้อมูล tracing
และใช้งานได้ง่าย
เพื่อความเข้าใจมาดูการใช้งาน Grafana platform กับ Spring Boot 3 กัน
แสดงโครงสร้างการทำงานดังรูป
![](http://www.somkiat.cc/wp-content/uploads/2023/04/grafana-platform-1024x457.jpg)
ใน Sprint Boot นั้นทำงานเรื่อง Tracing เหมือนเดิม
เพิ่มเติมคือ จะมี Grafana Agenet สำหรับ Java เข้ามา เข้ามา
เพื่อทำการส่งข้อมูลจากเครื่องที่ service ของ Spring Boot ทำงานอยู่
ไปเก็บที่ Tempo นั่นเอง
ตัวอย่างการกำหนดค่าใน docker compose ของ Spring Boot 3
- ทำการกำหนด Grafana agent และกำหนด environment variable ได้อีก
- เก็บ trace ผ่าน OTLP
- ที่จัดเก็บ trace คือ Tempo server ผ่าน HTTP protocol
มาดูตัวอย่างการ config Tempo และ Grafana กัน
[gist id="8b9e04d239b0bc1482028b9a45386c5c" file="2.yml"]ผลการทำงาน เมื่อมีการ access เข้า Spring Boot 3 application
ข้อมูล trace จะเข้าไปที่ Tempo และแสดงผลผ่าน Grafana Explore ดังรูป
![](http://www.somkiat.cc/wp-content/uploads/2023/04/Screenshot-2566-04-07-at-10.15.03-1024x502.png)
ชุดเครื่องมืออื่น ๆ ประกอบไปด้วย
- Application metric => Prometheus, Grafana Loki
- Distributed tracing => Zipkin, Jaeger และ Grafana Tempo
- Log aggregation => ELK stack
Reference Websites