แอปพลิเคชันที่ deploy ขึ้นไปบน server นั้นควรจะมีระบบที่สามารถตรวจสอบการทำงานของระบบได้ด้วย เพื่อที่จะทำให้หาสาเหตุในเวลาที่มีปัญหาเกิดขึ้นมาได้
Monitoring นั้นมีหลายแบบ และทั้งหมดใช้เพื่อเช็คความเป็นตายของแอปพลิเคชัน ลองดูว่ามีอะไรให้ใช้บ้าง
Jaeger เป็นเครื่องมือยอดนิยมที่ใช้ในการทำ tracing; Jaeger นั้นจะ webserver เป็น UI ที่สามารถทำให้อ่านข้อมูลที่เกิดขึ้นได้ง่าย ๆ Jaeger ใช้ในการสร้าง trace ที่จะบอกว่า transaction นึงที่เกิดขึ้นได้ไปหา service ใด ๆ บ้าง ในแต่ละ trace นั้นจะประกอบไปด้วย span และ context
Span ก็คือเส้น timeline ที่สามารถใส่รายละเอียดได้ว่า ณ เวลาใด ๆ เกิด event อะไรขึ้นบ้าง และเราสามารถสร้าง span ย่อย ๆ (timeline ย่อย) โดยที่มี span นึงเป็นตัวหลัก ว่า span แต่ละตัวนั้นถูกเรียกโดย span หลักขณะที่มันยังทำงานอยู่; ยกตัวอย่าง ลูกค้าสร้างบัญชีใหม่ในระบบ ก็จะมี trace เกิดขึ้น ใน trace นั้นก็จะมี root span ว่า CreateAccount และมี span ย่อย ๆ หลายตัว เช่นนำพาสเวิร์ดไป hash บ้าง ส่งข้อมูลลูกค้าไปบันทึกที่ customer service บ้าง และใน customer service ก็อาจจะมี span ย่อยซ้อนเข้าไปอีกที โดย span พวกนี้จะบอกเวลาที่ตัวมันเองแต่ละตัวใช้ในการทำงาน ซึ่งตรงนี้เราจะสามารถใช้ตรงนี้ในการหาได้เลยว่ามี service ตัวไหนที่ทำงานนานเกินปรกติ หรือมี error แดงขึ้นมาตอน span ไหน ก็จะทำให้ไม่เสียเวลาในการมัวแต่หาว่าปัญหาเกิดจากจุดไหน
Context นั้นจะถูกสร้างมาคู่กันกับ span ซึ่งจะเก็บ metadata เกี่ยวกับ trace id, span id, ชื่อ, เวลา และ attributes ต่าง ๆ โดน context จะถูกใช้ในการสร้าง span ย่อย หรือ child span
Prometheus เป็นเครื่องมือการทำ metrics วิธีการเก็บค่าข้อมูลจากแอปพลิเคชันนั้นจะต่างจาก Jaeger ตรงที่ Prometheus เป็นฝ่ายเข้าไปเก็บข้อมูลจาก services เอง แทนที่ services จะเป็นตัวยิงข้อมูลไปหา เนื่องจาก Prometheus นั้นเก็บข้อมูลเป็นรูปแบบ time series ซึ่งประเภท metrics จะมีอยู่สามแบบ
Prometheus นอกจากจะเอาไว้ใช้เก็บ metrics data แล้วก็ยังสามารถเขียน alert rules ที่เอาไว้ติดต่อกับ Alertmanager ได้ด้วย; โดยจะเขียน rules ต่าง ๆ ไว้ว่า ถ้าหากสถานะของระบบ (ข้อมูลที่ได้มาจาก metrics) เป็นไปตามเงื่อนไข เช่นใช้ cpu เกิน 75% ก็จะส่งข้อมูลไปยัง Alertmanager; โดยตัว Alertmanager นี้ก็ตั้งค่าได้ว่าจะให้ส่งแจ้งไปทางไหน mail, sms, slack หรือยิง webhook ก็ได้ แล้วเมื่อได้รับแจ้งปัญหาเราก็จะมาใช้ Jaeger เพื่อ trace services ดูว่ามีปัญหาที่ตรงไหนเป็นต้น
Alerts ที่ส่งมาจาก Alertmanager จะมีอยู่สองสถานะคือ Firing ที่จะส่งมาเมื่อระบบตกอยู่ภายในเงื่อนไขของ alert rules; และสถานะ Resolved ที่จะถูกส่งมาอีกครั้งเมื่อระบบหลุดจากเงื่อนไขของ alert rules แล้ว (ในกรณีตัวอย่างนี้ก็คือ cpu กลับมาต่ำกว่า 75%)