ใช้ Prometheus และ Grafana เพื่อแสดงภาพตัววัดของไมโครเซอร์วิสของคุณ

หากคุณใช้ "Istio" เพื่อจัดการไมโครเซอร์วิสภายใน Kubernetes การรวบรวมและการแสดงภาพเมตริกถือเป็นหนึ่งในฟีเจอร์หลักที่มีให้ มันช่วยให้คุณควบคุมและควบคุม Mesh ของคุณได้อย่างมาก และช่วยให้คุณเข้าใจไมโครเซอร์วิสของคุณได้ดีขึ้น

ไม่เพียงแต่ช่วยให้ทีมปฏิบัติการของคุณได้รับข้อมูลเชิงลึกที่เป็นประโยชน์ในการแก้ไขปัญหา แต่ยังช่วยให้ทีมรักษาความปลอดภัยได้รับข้อมูลอันมีค่าอีกด้วย ซึ่งช่วยให้พวกเขาทำสิ่งต่างๆ เช่น เชื่อมต่อตาข่ายของคุณด้วยซอฟต์แวร์ตรวจจับการบุกรุกเพื่อรักษาความปลอดภัยให้กับแอปพลิเคชันของคุณเพิ่มเติม

เรื่องราวนี้เป็นเรื่องราวต่อจาก “วิธีใช้ Istio เพื่อฉีดข้อผิดพลาดเพื่อแก้ไขปัญหาไมโครเซอร์วิสใน Kubernetes” วันนี้ เราจะมาหารือเกี่ยวกับการรวบรวมและการแสดงภาพบริการ Mesh ของ Istio โดยใช้ "Prometheus" และ "Grafana"

Istio รวบรวมเมตริกอย่างไร

หากคุณกำลังติดตามซีรีส์นี้ คุณควรทราบว่า Istio ใช้พร็อกซี Envoy เป็นไฟล์เสริมสำหรับคอนเทนเนอร์ไมโครเซอร์วิสของคุณ

เนื่องจากการรับส่งข้อมูลทั้งหมดไหลผ่านพรอกซีเหล่านี้ พวกเขาจึงส่งข้อมูลการวัดและส่งข้อมูลทางไกลไปยัง Prometheus ซึ่งสามารถจัดเก็บและแสดงภาพโดยใช้เครื่องมือ เช่น Grafana

คุณยังสามารถส่งออกหน่วยวัดของคุณไปยังเครื่องมือต่างๆ เช่น ELK stack หรือเครื่องสแกนความปลอดภัยเพื่อรับข้อมูลเชิงลึกเพิ่มเติมจากข้อมูลและใช้สำหรับการวิเคราะห์ในอนาคตและการเรียนรู้ของเครื่อง

ข้อกำหนดเบื้องต้น

เราจะใช้แอปพลิเคชัน Bookinfo ในงานนี้ด้วย และสร้างการเข้าชมบางส่วน จากนั้นเราจะสืบค้นตัววัดโดยใช้ Prometheus และแสดงภาพข้อมูลการวัดและส่งข้อมูลทางไกลโดยใช้ Grafana

ตรวจสอบว่าคุณใช้งานคลัสเตอร์ Kubernetes และติดตั้ง Istio ไว้ด้านบน ปฏิบัติตามคำแนะนำ “เริ่มต้นใช้งาน Istio บน Kubernetes” และตรวจดูให้แน่ใจว่าคุณได้ทำงานทั้งหมดจากคู่มือนี้จนเสร็จสิ้นและปรับใช้แอปพลิเคชัน Bookinfo แล้ว

การรวบรวมข้อมูลการวัดและส่งข้อมูลทางไกล

บริการ ratings-v2 สามารถเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูล MongoDB แบ็กเอนด์ได้ ให้เราใช้สิ่งนั้นเพื่อที่เราจะสามารถจำลองสถานการณ์ส่วนหน้า-ส่วนหลังที่สมจริงได้

ติดตั้งบริการ ratings-v2:

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml
serviceaccount/bookinfo-ratings-v2 created
deployment.apps/ratings-v2 created

ตอนนี้ติดตั้งบริการ mongodb:

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo-db.yaml
service/mongodb created
deployment.apps/mongodb-v1 created

ตอนนี้ เรามากำหนดกฎปลายทางเพื่อให้เราสามารถกำหนดเส้นทางการรับส่งข้อมูลตามป้ายกำกับที่เลือกได้ นั่นคือกฎปลายทางเดียวกันกับที่เราเคยใช้ในบทความก่อนหน้านี้

$ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
destinationrule.networking.istio.io/productpage created
destinationrule.networking.istio.io/reviews created
destinationrule.networking.istio.io/ratings created
destinationrule.networking.istio.io/details created

ขั้นตอนต่อไปคือการเปิดเผยไมโครเซอร์วิสโดยใช้บริการเสมือน มาดูไฟล์ YAML กันก่อน

ดังที่คุณเห็นใน YAML การรับส่งข้อมูล reviews ทั้งหมดควรไหลไปที่ reviews-v3 และการรับส่งข้อมูล ratings ทั้งหมดไปที่ ratings-v2

ใช้บริการเสมือนโดยการรันสิ่งต่อไปนี้:

$ kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-db.yaml
virtualservice.networking.istio.io/reviews created
virtualservice.networking.istio.io/ratings created

ส่งการจราจร

ขั้นตอนต่อไปคือการส่งการรับส่งข้อมูลผ่านบริการ เพื่อให้เราสามารถตรวจสอบว่า Istio กำลังรวบรวมเมตริกในส่วนถัดไปหรือไม่

เยี่ยมชมหน้าผลิตภัณฑ์ และรีเฟรชเบราว์เซอร์ของคุณหลายๆ ครั้งเพื่อสร้างการเข้าชม

การวัดแบบสอบถามโดยใช้ Prometheus

เปิดเผย Prometheus ผ่านพร็อกซีการส่งต่อพอร์ต

$ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090 &
[1] 910
$ Forwarding from 127.0.0.1:9090 -> 9090

ตอนนี้ เปิดลิงก์ http://127.0.0.1:9090 ผ่านเบราว์เซอร์ของคุณ

หากคุณเข้าใจภาษา Prometheus Query เราสามารถค้นหาเมตริกใดเมตริกหนึ่งได้โดยเพียงพิมพ์ชื่อของพารามิเตอร์

เริ่มต้นด้วยการพิมพ์ istio_tcp_connections_opened_total

แล้วistio_tcp_connections_closed_totalล่ะ?

มาดูคำขอทั้งหมดโดยใช้ istio_requests_total แต่คราวนี้ เราจะมาดูมุมมองกราฟิกกัน คลิกแท็บกราฟ พิมพ์เมตริกในช่องค้นหา และคลิกดำเนินการ

ตอนนี้เรามาลองใช้คำค้นหาขั้นสูงกัน แล้วคำขอทั้งหมดไปยัง reviews-v3 microservice ล่ะ?

istio_requests_total{destination_service="reviews.default.svc.cluster.local", destination_version="v3"}

และอัตราการร้องขอไปยังไมโครเซอร์วิส productpage คืออะไร

rate(istio_requests_total{destination_service=~"productpage.*", response_code="200"}[5m])

อย่างที่คุณเห็น เราสามารถรวบรวมและสืบค้นตัววัดการวัดและส่งข้อมูลทางไกลโดยใช้ Prometheus ได้สำเร็จ

แสดงภาพตัวชี้วัดโดยใช้ Grafana

สำหรับบุคลากรทางเทคนิค การสืบค้นตัววัดผ่าน Prometheus อาจดูเพียงพอแล้ว อย่างไรก็ตาม หากคุณต้องการให้ใครก็ตามแสดงภาพข้อมูลโดยสังหรณ์ใจ โดยเฉพาะทีมปฏิบัติการและบุคคลที่ต้องการวิเคราะห์ข้อมูล เราสามารถใช้เครื่องมือแสดงภาพข้อมูล เช่น Grafana

เปิดเผย Grafana ผ่านพร็อกซีการส่งต่อพอร์ต

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 &

เปิด URL จากเบราว์เซอร์

เลือกโฟลเดอร์ Istio และอย่างที่คุณเห็น คุณจะได้รับแดชบอร์ด Grafana ที่กำหนดค่าไว้ล่วงหน้าจำนวนมากเมื่อคุณติดตั้ง Istio คุณสามารถใช้แดชบอร์ดเพื่อตรวจสอบส่วนประกอบ Istio ทั้งหมดและไมโครเซอร์วิสของคุณได้

คุณยังสามารถปรับแต่งและสร้างแดชบอร์ดใหม่ได้ตามความต้องการของคุณ

หากคุณเปิดแดชบอร์ดบริการ Grafana คุณจะเห็นภาพเมตริกที่เกี่ยวข้องกับบริการทั้งหมดของคุณได้ คุณยังกรองบริการเฉพาะเพื่อดูเมตริกได้ด้วย

ตอนนี้สร้างการเข้าชมโดยการรีเฟรชหน้าผลิตภัณฑ์หลายๆ ครั้ง และคุณจะเห็นแดชบอร์ด Grafana เริ่มแสดงเมตริก

หากคุณต้องการเข้าใจปริมาณงาน มีแดชบอร์ดปริมาณงานในตัวใน Grafana ให้เปิดแดชบอร์ดเพื่อดูกราฟปริมาณงาน

สำรวจแดชบอร์ดอื่นๆ เพื่อดูการแสดงภาพและเมตริกต่างๆ ที่คุณรวบรวมและตรวจสอบได้โดยใช้ Istio

ยินดีด้วย! คุณได้เสร็จสิ้นกิจกรรมการแสดงภาพหน่วยวัดไมโครเซอร์วิสของคุณโดยใช้ Prometheus และ Grafana แล้ว

บทสรุป

ขอบคุณสำหรับการอ่านผ่าน! ฉันหวังว่าคุณจะสนุกกับบทความนี้ ในส่วนถัดไป เราจะพูดถึง ""วิธีทำให้ไมโครเซอร์วิสของคุณแข็งแกร่งขึ้นบน Kubernetes โดยใช้ Istio" ได้อย่างไร แล้วพบกันใหม่ในเรื่องต่อไป!