ใช้ 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" ได้อย่างไร แล้วพบกันใหม่ในเรื่องต่อไป!